8

Tôi đang cố gắng tạo một bộ ba bộ phân loại (Random Forest, Support Vector Machine và XGBoost) bằng cách sử dụng VotingClassifier() trong scikit-learn. Tuy nhiên, tôi thấy rằng độ chính xác của bộ quần áo thực sự giảm thay vì tăng lên. Tôi không thể hiểu tại sao.Tại sao độ chính xác của Trình phân loại VotingClassifier của tôi thấp hơn phân loại cá nhân của tôi?

Đây là mã:

from sklearn.ensemble import VotingClassifier 

eclf = VotingClassifier(estimators=[('rf', rf_optimized), ('svc', svc_optimized), ('xgb', xgb_optimized)], 
         voting='soft', weights=[1,1,2]) 

for clf, label in zip([rf, svc_optimized, xgb_optimized, eclf], ['Random Forest', 'Support Vector Machine', 'XGBoost', 'Ensemble']): 
    scores = cross_val_score(clf, X, y, cv=10, scoring='accuracy') 
    print("Accuracy: %0.3f (+/- %0.3f) [%s]" % (scores.mean(), scores.std(), label)) 

Các XGBoost có tính chính xác cao nhất vì vậy tôi thậm chí đã cố gắng cho nó weightage nhiều vô ích.

Tôi có thể làm gì sai?

Trả lời

8

Bầu chọnClassifiers không phải lúc nào cũng được đảm bảo để có hiệu suất tốt hơn, đặc biệt là khi sử dụng biểu quyết mềm nếu bạn có mô hình cơ bản được hiệu chỉnh kém. Đối với một ví dụ giả tạo, nói rằng tất cả các mô hình thực sự sai khi chúng sai (giả sử xác suất là 0,99 cho lớp không chính xác) nhưng chỉ hơi đúng khi chúng đúng (nói cho xác suất là.). 51 cho lớp đúng). Hơn nữa, nói 'rf' và 'svc' luôn đúng khi 'xgb' sai và ngược lại và mỗi phân loại có độ chính xác là 50%.

Trình phân loại biểu quyết mà bạn triển khai sẽ có độ chính xác 0% vì bạn đang sử dụng bỏ phiếu mềm. Đây là lý do:

  1. Trường hợp 1: 'xgb' phải. Sau đó, nó cho một xác suất của .51 đến lớp đúng và nhận được trọng số là 2, với số điểm là 1,02. Tuy nhiên, các mô hình khác cho mỗi xác suất là 0,99 cho lớp không chính xác với điểm số là 1,98. Lớp đó được chọn bởi trình phân loại biểu quyết của bạn.
  2. Trường hợp 2: 'xgb' không đúng. Sau đó, nó đưa ra xác suất 0,99 cho lớp không chính xác với trọng số là 2 cho điểm 1,98. Hai mô hình còn lại cho điểm kết hợp 1,02 cho lớp chính xác. Một lần nữa, lớp sai được chọn bởi trình phân loại của bạn.
Các vấn đề liên quan