集成方法(2)Bagging
在前一篇文章中我们说到使用不同的训练算法获得互相独立的分类器。另一种方法是在训练集的不同随机子集上训练同一种算法获得一组独立的分类器。
这种方法称为bagging(bootstrap aggregating的缩写)
顾名思义,bagging由两个内容组成:bootstrap、aggragating。
bootstrap:中文名为自助法。方法思想为从包含m个样本的初始数据集D中随机采样m次(采样后将数据放回)构成新的训练集D'。每个样本出现的概率为63.2%,重复进行n次,可以产生n个不同的训练集,由此可以训练n个相同算法的分类器。
具体每个训练集有多少样本,有超参数max_samples决定,默认为初始训练集样本个数。

aggragating:将每个预测器的结果进行聚合,可以使用投票法用于分类,或者使用平均值用于回归。
与在初始训练集上训练的预测器相比,单个预测器具有更高的偏差,但是集合可以减少偏差和方差。一般来说,与原始训练集上训练的预测器相比,集成具有相似的偏差但方差更低。
代码
from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier bag_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=500, max_samples=100,bootstrap=True,n_jobs=-1)#500棵决策树集合成Bagging分类器,n_jobs=-1表示调用所有CPU内核 bag_clf.fit(X_train,y_train) #max_samples表示每个训练集的随机采样的样本个数 y_pred = bag_clf.predict(X_test) print(accuracy_score(y_pred,y_test))
与单一决策树的预测相比,集成的预测很可能泛化得更好(不会过拟合),它在训练集上犯的错误数量大致相同,但方差更小,决策边界没有那么不规则。

包外估计(out of bagging)
默认情况下,在进行Bagging时每个训练集会有m个样本,其中m是初始训练集的大小。这意味着对于每个预测器只有大约63%的训练实例被采样。剩下的37%没有被采样的训练实例称为包外样本。注意,对于所有预测器,这些未被采样的37%样本不是相同的。
有几个训练集就会有几个包外样本集,可以使用这些包外样本集对每个预测器进行评估,通过平均每个预测器的结果来评估集成本身。
代码
bag_clf = BaggingClassifier(DecisionTreeClassifier(),n_estimators=500, bootstrap=True,n_jobs=-1,oob_score=True)#oob:out of bagging bag_clf.fit(X_train,y_train) bag_clf.oob_score_
与之前的相比只有两处不同,删去了max_samples,增加了oob_score。
随机森林
随机森林是决策树的集合,通过bagging方法训练的。与前面baggingclassifier不同的是,随机森林在训练树的过程中每个结点不是搜索最好的特征,而是会随机生成一个特征子集中,在其中搜索最好的特征。该算法产生了更大的树多样性,牺牲偏差来换取更低的方差,通常会产生一个总体更好的模型。在scikit-learning中你可以直接使用RandomForestClassifier()创建,更加方便(超参数少)同时对决策树更加优化。
from sklearn.ensemble import RandomForestClassifier rnd_clf = RandomForestClassifier(n_estimators=500,max_leaf_nodes=16,n_jobs=-1) rnd_clf.fit(X_train,y_train) y_pred_rf = rnd_clf.predict(X_test)
你也可以使用baggingclassifier方法创建跟随机森林效果差不动的一个模型。
from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier bag_clf = BaggingClassifier(DecisionTreeClassifier(splitter='random',max_leaf_nodes=16), n_estimators=500,max_samples=1,bootstrap=True,n_jobs=-1)

浙公网安备 33010602011771号