Stacking相比Linear Blending來說,更加強(qiáng)大,然而也更容易過擬合。
Stacking做法和Linear Blending類似,首先從數(shù)據(jù)集中訓(xùn)練出初級學(xué)習(xí)器,然后”生成“一個新的數(shù)據(jù)集用于訓(xùn)練次級學(xué)習(xí)器。為了防止過擬合,采用K折交叉驗證法求解。
假設(shè)采用5折交叉驗證,每個模型都要做滿5次訓(xùn)練和預(yù)測,對于每一次:
從80%的數(shù)據(jù)訓(xùn)練得到一個模型ht,然后預(yù)測訓(xùn)練集剩下的那20%,同時也要預(yù)測測試集。
每次有20%的訓(xùn)練數(shù)據(jù)被預(yù)測,5次后正好每個訓(xùn)練樣本都被預(yù)測過了。
每次都要預(yù)測測試集,因此最后測試集被預(yù)測5次,最終結(jié)果取5次的平均。
如果是分類問題,我們對測試集的結(jié)果就不能像回歸問題一樣直接取平均,而是分類器輸出所有類別的概率,最后取平均。每個分類器都貢獻(xiàn)了_N_CLASS(類別數(shù))的維度。
由于sklearn并沒有直接對Stacking的方法,因此我們需要下載mlxtend工具包(pip install mlxtend)