StackingClassifier參數詳解與示例
StackingClassifier是一種集成學習方法,通過組合多個基分類器的預測結果作為元分類器的輸入特征,從而提高整體模型性能。以下是關鍵參數的詳細說明和示例:
1. classifiers(基分類器)
- 作用:定義Stacking的底層分類器集合
- 格式:列表形式
[clf1, clf2, ..., clfn]
- 要求:基分類器必須實現
fit
和predict
/predict_proba
方法 - 存儲位置:訓練后存儲在
self.clfs_
屬性中
2. meta_classifier(元分類器)
- 作用:組合基分類器輸出的最終分類器
- 典型選擇:邏輯回歸、SVM等簡單強分類器
- 輸入特征:由基分類器的輸出(標簽或概率)構成
3. use_probas參數
- 默認值:
False
- True時的行為:
- 基分類器輸出概率向量而非類別標簽
- 元分類器使用概率值作為輸入特征
- 需配合
predict_proba
方法使用
- False時的行為:直接使用基分類器的預測類別標簽
4. average_probas參數
- 生效條件:僅當
use_probas=True
時有效 - True:對基分類器的概率輸出取平均值
- False:拼接所有基分類器的概率向量
- 示例(二分類問題):
- 基分類器1輸出概率:[0.2,0.8][0.2, 0.8][0.2,0.8]
- 基分類器2輸出概率:[0.3,0.7][0.3, 0.7][0.3,0.7]
average_probas=True
→ 元特征:[0.25,0.75][0.25, 0.75][0.25,0.75]average_probas=False
→ 元特征:[0.2,0.8,0.3,0.7][0.2, 0.8, 0.3, 0.7][0.2,0.8,0.3,0.7]
代碼示例
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from mlxtend.classifier import StackingClassifier# 1. 定義基分類器
clf1 = RandomForestClassifier(n_estimators=100)
clf2 = GaussianNB()# 2. 定義元分類器
meta_clf = LogisticRegression()# 3. 創建Stacking模型(使用概率輸出)
stacking_clf = StackingClassifier(classifiers=[clf1, clf2],meta_classifier=meta_clf,use_probas=True, # 使用概率作為元特征average_probas=False, # 拼接概率向量verbose=1
)# 4. 訓練與預測
stacking_clf.fit(X_train, y_train)
probas = stacking_clf.predict_proba(X_test)
參數選擇建議
-
use_probas=True 適用場景:
- 基分類器輸出概率置信度差異較大時
- 需要保留概率分布信息(如醫療診斷)
- 元分類器能有效處理高維特征
-
use_probas=False 適用場景:
- 基分類器預測質量相近
- 數據集維度需要控制
- 元分類器對類別標簽敏感(如決策樹)
-
classifiers選擇原則:
- 多樣性優于單個模型精度
- 典型組合:樹模型(RF/XGBoost)+ 線性模型(LR)+ 概率模型(Naive Bayes)
注意:當
use_features_in_secondary=True
時,元分類器會同時使用原始特征和基分類器的輸出,可能增加過擬合風險。