Scikit Learn - Phương pháp thúc đẩy
Trong chương này, chúng ta sẽ tìm hiểu về các phương pháp thúc đẩy trong Sklearn, cho phép xây dựng một mô hình tập hợp.
Các phương pháp thúc đẩy xây dựng mô hình tổng hợp theo cách tăng dần. Nguyên tắc chính là xây dựng mô hình tăng dần bằng cách đào tạo tuần tự từng công cụ ước lượng mô hình cơ sở. Để xây dựng nhóm mạnh mẽ, các phương pháp này về cơ bản kết hợp những người học vài tuần được đào tạo tuần tự qua nhiều lần lặp lại dữ liệu đào tạo. Mô-đun sklearn.ensemble đang có hai phương pháp thúc đẩy sau.
AdaBoost
Đây là một trong những phương pháp tổng hợp tăng cường thành công nhất mà chìa khóa chính nằm ở cách chúng cung cấp trọng số cho các thể hiện trong tập dữ liệu. Đó là lý do tại sao thuật toán cần ít chú ý đến các thể hiện trong khi xây dựng các mô hình tiếp theo.
Phân loại với AdaBoost
Để tạo bộ phân loại AdaBoost, mô-đun Scikit-learning cung cấp sklearn.ensemble.AdaBoostClassifier. Trong khi xây dựng bộ phân loại này, tham số chính mà mô-đun này sử dụng làbase_estimator. Ở đây, base_estimator là giá trị củabase estimatortừ đó nhóm tăng cường được xây dựng. Nếu chúng tôi chọn giá trị của tham số này thành không thì công cụ ước tính cơ sở sẽ làDecisionTreeClassifier(max_depth=1).
Ví dụ triển khai
Trong ví dụ sau, chúng tôi đang xây dựng bộ phân loại AdaBoost bằng cách sử dụng sklearn.ensemble.AdaBoostClassifier và dự đoán và kiểm tra điểm của nó.
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples = 1000, n_features = 10,n_informative = 2, n_redundant = 0,random_state = 0, shuffle = False)
ADBclf = AdaBoostClassifier(n_estimators = 100, random_state = 0)
ADBclf.fit(X, y)
Đầu ra
AdaBoostClassifier(algorithm = 'SAMME.R', base_estimator = None,
learning_rate = 1.0, n_estimators = 100, random_state = 0)
Thí dụ
Sau khi được trang bị, chúng tôi có thể dự đoán các giá trị mới như sau:
print(ADBclf.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Đầu ra
[1]
Thí dụ
Bây giờ chúng ta có thể kiểm tra điểm số như sau:
ADBclf.score(X, y)
Đầu ra
0.995
Thí dụ
Chúng ta cũng có thể sử dụng bộ dữ liệu sklearn để xây dựng bộ phân loại bằng phương pháp Extra-Tree. Ví dụ, trong một ví dụ dưới đây, chúng tôi đang sử dụng tập dữ liệu Pima-Indian.
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names = headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = AdaBoostClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())
Đầu ra
0.7851435406698566
Hồi quy với AdaBoost
Để tạo một bộ hồi quy với phương pháp Ada Boost, thư viện Scikit-learning cung cấp sklearn.ensemble.AdaBoostRegressor. Trong khi xây dựng bộ hồi quy, nó sẽ sử dụng các tham số giống như được sử dụng bởisklearn.ensemble.AdaBoostClassifier.
Ví dụ triển khai
Trong ví dụ sau, chúng tôi đang xây dựng một bộ hồi quy AdaBoost bằng cách sử dụng sklearn.ensemble.AdaBoostregressor và cũng dự đoán cho các giá trị mới bằng cách sử dụng phương thức dự đoán ().
from sklearn.ensemble import AdaBoostRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
ADBregr = RandomForestRegressor(random_state = 0,n_estimators = 100)
ADBregr.fit(X, y)
Đầu ra
AdaBoostRegressor(base_estimator = None, learning_rate = 1.0, loss = 'linear',
n_estimators = 100, random_state = 0)
Thí dụ
Sau khi được trang bị, chúng ta có thể dự đoán từ mô hình hồi quy như sau:
print(ADBregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
Đầu ra
[85.50955817]
Tăng cường cây Gradient
Nó còn được gọi là Gradient Boosted Regression Trees(GRBT). Về cơ bản nó là sự tổng quát của việc tăng cường đến các chức năng mất mát có thể phân biệt tùy ý. Nó tạo ra một mô hình dự đoán dưới dạng một tập hợp các mô hình dự đoán tuần. Nó có thể được sử dụng cho các bài toán hồi quy và phân loại. Lợi thế chính của chúng nằm ở chỗ chúng xử lý dữ liệu kiểu hỗn hợp một cách tự nhiên.
Phân loại với Gradient Tree Boost
Để tạo bộ phân loại Gradient Tree Boost, mô-đun Scikit-learning cung cấp sklearn.ensemble.GradientBoostingClassifier. Trong khi xây dựng bộ phân loại này, tham số chính mà mô-đun này sử dụng là 'loss'. Ở đây, 'loss' là giá trị của hàm mất mát cần được tối ưu hóa. Nếu chúng ta chọn mất mát = độ lệch, nó đề cập đến độ lệch để phân loại với đầu ra có xác suất.
Mặt khác, nếu chúng ta chọn giá trị của tham số này thành hàm mũ thì nó sẽ khôi phục thuật toán AdaBoost. Thông sốn_estimatorssẽ kiểm soát số lượng người học trong tuần. Một siêu tham số có tênlearning_rate (trong khoảng (0,0, 1,0]) sẽ kiểm soát việc trang bị quá mức thông qua độ co rút.
Ví dụ triển khai
Trong ví dụ sau, chúng tôi đang xây dựng bộ phân loại Gradient Bo boost bằng cách sử dụng sklearn.ensemble.GradientBoostingClassifier. Chúng tôi đang lắp bộ phân loại này với những người học 50 tuần.
from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
X, y = make_hastie_10_2(random_state = 0)
X_train, X_test = X[:5000], X[5000:]
y_train, y_test = y[:5000], y[5000:]
GDBclf = GradientBoostingClassifier(n_estimators = 50, learning_rate = 1.0,max_depth = 1, random_state = 0).fit(X_train, y_train)
GDBclf.score(X_test, y_test)
Đầu ra
0.8724285714285714
Thí dụ
Chúng tôi cũng có thể sử dụng bộ dữ liệu sklearn để xây dựng bộ phân loại bằng cách sử dụng Bộ phân loại tăng cường Gradient. Như trong ví dụ sau, chúng tôi đang sử dụng tập dữ liệu Pima-Indian.
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names = headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = GradientBoostingClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())
Đầu ra
0.7946582356674234
Hồi quy với Gradient Tree Boost
Để tạo một bộ hồi quy với phương pháp Gradient Tree Boost, thư viện Scikit-learning cung cấp sklearn.ensemble.GradientBoostingRegressor. Nó có thể chỉ định hàm mất mát cho hồi quy thông qua mất tên tham số. Giá trị mặc định cho sự mất mát là 'ls'.
Ví dụ triển khai
Trong ví dụ sau, chúng tôi đang xây dựng một bộ hồi quy Gradient Bo boost bằng cách sử dụng sklearn.ensemble.GradientBoostingregressor và cũng tìm ra lỗi bình phương trung bình bằng cách sử dụng phương thức mean_squared_error ().
import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_friedman1
from sklearn.ensemble import GradientBoostingRegressor
X, y = make_friedman1(n_samples = 2000, random_state = 0, noise = 1.0)
X_train, X_test = X[:1000], X[1000:]
y_train, y_test = y[:1000], y[1000:]
GDBreg = GradientBoostingRegressor(n_estimators = 80, learning_rate=0.1,
max_depth = 1, random_state = 0, loss = 'ls').fit(X_train, y_train)
Sau khi được trang bị, chúng ta có thể tìm thấy sai số bình phương trung bình như sau:
mean_squared_error(y_test, GDBreg.predict(X_test))
Đầu ra
5.391246106657164