机器学习之——集成学习之装袋法

装袋法

装袋法又称为引导聚集算法,其原理是通过组合多个训练集的分类结果来提升分类效果。

假设有一个大小为n的训练样本集S,装袋法从样本集S中多次放回采样取出大小为n'(n'

装袋法由于多次采样,每个样本被选中的概率相同,因此噪声数据的影响下降,所以装袋法不太容易受到过拟合的影响。

下面用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())

其中,cart为决策树分类器,model为sklearn库中自带的装袋法分类器,两种算法的效果验证均采用k折交叉验证的方法,BaggingClassifier方法中的n_estimators表示创建100个分类模型。运行结果如下:

可以看到装袋法对模型结果有一定提升。当然,提升程度与原模型的结果和数据质量有关。如果分类回归树的高数设置为3或5,原算法本身的效果就会比较好,装袋法就没有提升的空间。所以装袋法还是有一定的数据局限。 

你可能感兴趣的:(sklearn)