8

我正在嘗試在scikit-learn中使用VotingClassifier()創建三個分類器(隨機森林,支持向量機和XGBoost)的集合。但是,我發現整體的準確性實際上是下降而不是增加。我無法弄清楚爲什麼。爲什麼我的VotingClassifier的精確度比我的個人分類器更低?

下面是代碼:

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)) 

的XGBoost具有最高的準確度,所以我甚至試圖給它更多的權重也沒有用。

我會做什麼錯?

回答

8

投票分類器並不總能保證有更好的性能,尤其是在使用軟投票的情況下,如果您的基準模型校準不好。對於一個人爲的例子,假設所有的模型在錯誤的時候都是錯誤的(比如給出錯誤的類的概率爲0.99),但是當它們是正確的時候它們只是稍微正確的(比如給出一個概率爲0.99)。 51爲正確的課程)。此外,當'xgb'錯誤時'rf'和'svc'總是正確的,反之亦然,每個分類器本身的準確度爲50%。

由於您使用的是軟投票,因此您實施的投票分類器的準確率爲0%。原因如下:

  1. 案例1:'xgb'正確。然後它給出正確類的.51的概率,得到2的權重,得分爲1.02。然而,其他模型每個給不正確的類的概率爲0.99,得分爲1.98。您的投票分類器會選擇該課程。
  2. 案例2:'xgb'錯誤。然後給出不正確的類的0.99的概率,權重爲2,得分爲1.98。另外兩個模型爲正確的課程提供1.02的總分。再次,錯誤的類是由您的分類器選擇的。
相關問題