Cải thiện Hiệu suất của Mô hình ML
Cải thiện hiệu suất với các bộ phận lắp ráp
Ensembles có thể giúp chúng tôi tăng cường kết quả học máy bằng cách kết hợp một số mô hình. Về cơ bản, các mô hình tổng hợp bao gồm một số mô hình học tập có giám sát được đào tạo riêng lẻ và kết quả của chúng được hợp nhất theo nhiều cách khác nhau để đạt được hiệu suất dự đoán tốt hơn so với một mô hình duy nhất. Phương pháp gộp có thể được chia thành hai nhóm sau:
Các phương pháp tổng hợp tuần tự
Như tên của nó, trong loại phương pháp tổng hợp này, các trình học cơ sở được tạo tuần tự. Động cơ của các phương pháp như vậy là khai thác sự phụ thuộc giữa những người học cơ sở.
Các phương pháp kết hợp song song
Như tên của nó, trong loại phương pháp tổng hợp này, các học viên cơ sở được tạo ra song song. Động cơ của các phương pháp đó là khai thác tính độc lập giữa những người học cơ sở.
Phương pháp học tập kết hợp
Sau đây là các phương pháp học tập tổng hợp phổ biến nhất, tức là các phương pháp kết hợp các dự đoán từ các mô hình khác nhau -
Đóng bao
Thuật ngữ đóng bao còn được gọi là tổng hợp bootstrap. Trong phương pháp đóng bao, mô hình tổng hợp cố gắng cải thiện độ chính xác của dự đoán và giảm phương sai của mô hình bằng cách kết hợp các dự đoán của các mô hình riêng lẻ được đào tạo với các mẫu đào tạo được tạo ngẫu nhiên. Dự đoán cuối cùng của mô hình tổng hợp sẽ được đưa ra bằng cách tính giá trị trung bình của tất cả các dự đoán từ các công cụ ước tính riêng lẻ. Một trong những ví dụ điển hình về phương pháp đóng bao là rừng ngẫu nhiên.
Thúc đẩy
Trong phương pháp thúc đẩy, nguyên tắc chính của việc xây dựng mô hình tổng hợp là xây dựng nó 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ở. Như tên cho thấy, về cơ bản, nó kết hợp những người học cơ bản 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, để tạo ra một nhóm mạnh mẽ. Trong quá trình đào tạo các học viên cơ bản theo tuần, các trọng số cao hơn được chỉ định cho những học viên đã được phân loại sai trước đó. Ví dụ về phương pháp thúc đẩy là AdaBoost.
Biểu quyết
Trong mô hình học tập tổng hợp này, nhiều mô hình thuộc các loại khác nhau được xây dựng và một số thống kê đơn giản, như tính giá trị trung bình hoặc trung vị, v.v., được sử dụng để kết hợp các dự đoán. Dự đoán này sẽ đóng vai trò là đầu vào bổ sung cho quá trình đào tạo để đưa ra dự đoán cuối cùng.
Đóng gói các thuật toán kết hợp
Sau đây là ba thuật toán tổng hợp đóng gói -
Cây quyết định có túi
Như chúng ta biết rằng các phương pháp tổng hợp đóng gói hoạt động tốt với các thuật toán có phương sai cao và trong mối quan tâm này, phương pháp tốt nhất là thuật toán cây quyết định. Trong công thức Python sau đây, chúng ta sẽ xây dựng mô hình tổng hợp cây quyết định có túi bằng cách sử dụng hàm BaggingClassifier của sklearn với Quyết địnhTreeClasifier (một thuật toán phân loại & cây hồi quy) trên tập dữ liệu bệnh tiểu đường của người da đỏ Pima.
Đầu tiên, nhập các gói được yêu cầu như sau:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
Bây giờ, chúng ta cần tải tập dữ liệu bệnh tiểu đường Pima như chúng ta đã làm trong các ví dụ trước -
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]
Tiếp theo, cung cấp đầu vào để xác nhận chéo 10 lần như sau:
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()
Chúng tôi cần cung cấp số lượng cây mà chúng tôi sẽ xây dựng. Ở đây chúng tôi đang xây dựng 150 cây xanh -
num_trees = 150
Tiếp theo, xây dựng mô hình với sự trợ giúp của tập lệnh sau:
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
Tính toán và in kết quả như sau:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Đầu ra
0.7733766233766234
Kết quả ở trên cho thấy rằng chúng tôi có độ chính xác khoảng 77% của mô hình phân loại cây quyết định được đóng gói.
Rừng ngẫu nhiên
Nó là một phần mở rộng của cây quyết định có túi. Đối với các bộ phân loại riêng lẻ, các mẫu của tập dữ liệu huấn luyện được lấy để thay thế, nhưng các cây được xây dựng theo cách làm giảm mối tương quan giữa chúng. Ngoài ra, một tập hợp con ngẫu nhiên của các tính năng được xem xét để chọn từng điểm tách thay vì tham lam chọn điểm phân tách tốt nhất trong việc xây dựng mỗi cây.
Trong công thức Python sau đây, chúng ta sẽ xây dựng mô hình quần thể rừng ngẫu nhiên có túi bằng cách sử dụng lớp RandomForestClassifier của sklearn trên tập dữ liệu bệnh tiểu đường của người da đỏ Pima.
Đầu tiên, nhập các gói được yêu cầu như sau:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
Bây giờ, chúng ta cần tải tập dữ liệu bệnh tiểu đường Pima như đã làm trong các ví dụ trước -
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]
Tiếp theo, cung cấp đầu vào để xác nhận chéo 10 lần như sau:
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
Chúng tôi cần cung cấp số lượng cây mà chúng tôi sẽ xây dựng. Ở đây chúng tôi đang xây dựng 150 cây với các điểm phân tách được chọn từ 5 tính năng -
num_trees = 150
max_features = 5
Tiếp theo, xây dựng mô hình với sự trợ giúp của tập lệnh sau:
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
Tính toán và in kết quả như sau:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Đầu ra
0.7629357484620642
Kết quả ở trên cho thấy rằng mô hình phân loại rừng ngẫu nhiên có túi của chúng tôi có độ chính xác khoảng 76%.
Cây phụ
Nó là một phần mở rộng khác của phương pháp tập hợp cây quyết định được đóng gói. Trong phương pháp này, các cây ngẫu nhiên được xây dựng từ các mẫu của tập dữ liệu huấn luyện.
Trong công thức Python sau, chúng ta sẽ xây dựng thêm mô hình nhóm cây bằng cách sử dụng lớp ExtraTreesClassifier của sklearn trên tập dữ liệu bệnh tiểu đường của người da đỏ Pima.
Đầu tiên, nhập các gói được yêu cầu như sau:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier
Bây giờ, chúng ta cần tải tập dữ liệu bệnh tiểu đường Pima như đã làm trong các ví dụ trước -
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]
Tiếp theo, cung cấp đầu vào để xác nhận chéo 10 lần như sau:
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
Chúng tôi cần cung cấp số lượng cây mà chúng tôi sẽ xây dựng. Ở đây chúng tôi đang xây dựng 150 cây với các điểm phân tách được chọn từ 5 tính năng -
num_trees = 150
max_features = 5
Tiếp theo, xây dựng mô hình với sự trợ giúp của tập lệnh sau:
model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
Tính toán và in kết quả như sau:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Đầu ra
0.7551435406698566
Kết quả ở trên cho thấy rằng chúng tôi có độ chính xác khoảng 75,5% của mô hình phân loại cây phụ có túi của chúng tôi.
Thúc đẩy các thuật toán Ensemble
Sau đây là hai thuật toán tổng hợp tăng cường phổ biến nhất -
AdaBoost
Đây là một trong những thuật toán tổng hợp thúc đẩy thành công nhất. Chìa khóa chính của thuật toán này là ở cách chúng đưa ra trọng số cho các thể hiện trong tập dữ liệu. Do đó, thuật toán cần chú ý ít hơn đến các cá thể trong khi xây dựng các mô hình tiếp theo.
Trong công thức Python sau đây, chúng tôi sẽ xây dựng mô hình tổng thể Ada Boost để phân loại bằng cách sử dụng lớp AdaBoostClassifier của sklearn trên tập dữ liệu bệnh tiểu đường của người da đỏ Pima.
Đầu tiên, nhập các gói được yêu cầu như sau:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
Bây giờ, chúng ta cần tải tập dữ liệu bệnh tiểu đường Pima như đã làm trong các ví dụ trước -
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]
Tiếp theo, cung cấp đầu vào để xác nhận chéo 10 lần như sau:
seed = 5
kfold = KFold(n_splits=10, random_state=seed)
Chúng tôi cần cung cấp số lượng cây mà chúng tôi sẽ xây dựng. Ở đây chúng tôi đang xây dựng 150 cây với các điểm phân tách được chọn từ 5 tính năng -
num_trees = 50
Tiếp theo, xây dựng mô hình với sự trợ giúp của tập lệnh sau:
model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)
Tính toán và in kết quả như sau:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Đầu ra
0.7539473684210527
Kết quả ở trên cho thấy rằng chúng tôi có độ chính xác khoảng 75% của mô hình tổng hợp trình phân loại AdaBoost của mình.
Stochastic Gradient Bo boost
Nó còn được gọi là Máy tăng cường độ dốc. Trong công thức Python sau đây, chúng ta sẽ xây dựng mô hình Stochastic Gradient Boostingensemble để phân loại bằng cách sử dụng lớp GradientBoostingClassifier của sklearn trên tập dữ liệu bệnh tiểu đường của người da đỏ Pima.
Đầu tiên, nhập các gói được yêu cầu như sau:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
Bây giờ, chúng ta cần tải tập dữ liệu bệnh tiểu đường Pima như đã làm trong các ví dụ trước -
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]
Tiếp theo, cung cấp đầu vào để xác nhận chéo 10 lần như sau:
seed = 5
kfold = KFold(n_splits=10, random_state=seed)
Chúng tôi cần cung cấp số lượng cây mà chúng tôi sẽ xây dựng. Ở đây chúng tôi đang xây dựng 150 cây với các điểm phân tách được chọn từ 5 tính năng -
num_trees = 50
Tiếp theo, xây dựng mô hình với sự trợ giúp của tập lệnh sau:
model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)
Tính toán và in kết quả như sau:
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Đầu ra
0.7746582365003418
Kết quả ở trên cho thấy rằng chúng tôi có độ chính xác khoảng 77,5% của mô hình tổng hợp bộ phân loại Gradient Bo boost.
Bầu chọn thuật toán tập hợp
Như đã thảo luận, việc bỏ phiếu trước tiên sẽ tạo ra hai hoặc nhiều mô hình độc lập từ tập dữ liệu đào tạo và sau đó bộ phân loại biểu quyết sẽ bao bọc mô hình cùng với việc lấy giá trị trung bình của các dự đoán của mô hình con bất cứ khi nào cần dữ liệu mới.
Trong công thức Python sau đây, chúng ta sẽ xây dựng mô hình tổ hợp Bầu cử để phân loại bằng cách sử dụng lớp VotingClassifier của sklearn trên tập dữ liệu bệnh tiểu đường của người da đỏ Pima. Chúng tôi đang kết hợp các dự đoán của hồi quy logistic, bộ phân loại Cây quyết định và SVM với nhau cho một bài toán phân loại như sau:
Đầu tiên, nhập các gói được yêu cầu như sau:
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
Bây giờ, chúng ta cần tải tập dữ liệu bệnh tiểu đường Pima như đã làm trong các ví dụ trước -
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]
Tiếp theo, cung cấp đầu vào để xác nhận chéo 10 lần như sau:
kfold = KFold(n_splits=10, random_state=7)
Tiếp theo, chúng ta cần tạo các mô hình con như sau:
estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))
Bây giờ, hãy tạo mô hình nhóm biểu quyết bằng cách kết hợp các dự đoán của các mô hình phụ đã tạo ở trên.
ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())
Đầu ra
0.7382262474367738
Kết quả ở trên cho thấy rằng chúng tôi có độ chính xác khoảng 74% của mô hình tập hợp bộ phân loại biểu quyết của chúng tôi.