裝袋法
裝袋法又稱為引導聚集算法,其原理是通過組合多個訓練集的分類結果來提升分類效果。
假設有一個大小為n的訓練樣本集S,裝袋法從樣本集S中多次放回采樣取出大小為n'(n'<n)的m個訓練集,對于每個訓練集Si,均選擇特定的學習算法(應用在決策樹分類中即為CART算法等決策樹算法),建立分類模型。對于新的測試集樣本,所建立的m個分類模型将傳回m個預測分類結果,裝袋法建構的模型最終傳回的結果将是m個預測結果中占多數的分類結果,即投票中的多數表決。而對于回歸問題,裝袋法将采取平均值的方法得出最終結果。
裝袋法由于多次采樣,每個樣本被選中的機率相同,是以噪聲資料的影響下降,是以裝袋法不太容易受到過拟合的影響。
下面用sklearn庫實作的決策樹裝袋法提升分類效果。其中X和Y分布是鸢尾花資料集中的自變量(花的特征)和因變量(花的類别),代碼如下所示:
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn import datasets
#加載iris資料集
iris=datasets.load_iris()
X=iris.data
Y=iris.target
#分類器及交叉驗證
seed=30
kfold=KFold(n_splits=10,random_state=seed)
cart=DecisionTreeClassifier(criterion='gini',max_depth=2)
cart=cart.fit(X,Y)
result=cross_val_score(cart,X,Y,cv=kfold)
print("CART樹的結果:",result.mean())
model=BaggingClassifier(base_estimator=cart,n_estimators=100,random_state=seed)
result=cross_val_score(model,X,Y,cv=kfold)
print("裝袋法提升後的結果:",result.mean())