六、集成学习二、集成学习(Bagging、Stacking)

集成学习(Ensemble Learning)

    KNN、决策树、神经网络等学习器都是单一、独立的,集成学习就是组合多个学习器,最后可以得到一个更好的学习器。集成学习就是构建并组合多个学习器来完成学习任务的算法,常用的有三类:

Bagging:个体学习器之间没有强依赖关系,可同时生成的并行化方法,装袋

Boosting:个体学习器之间存在强依赖关系,必须串行生成基分类器的方法

Stacking:使用多个不同的分类器进行预测,把预测的结果作为一个次级分类器的输入,次级分类器的输出是整个模型的预测结果。



一、Bagging

    也叫做bootstrap aggregating,是在原始数据集选择S次后得到S个新数据集的一种技术,是一种 有放回抽样 。

eg:原始数据集:    {0,1,2,3,4,5,6,7,8,9}

        Boostrap抽样:{7,2,6,7,5,4,8,8,1,0}——未采样3,9

                                 {1,3,8,0,3,5,8,0,1,9}——未采样2,4,6,7

                                 {2,9,4,2,7,9,3,0,1,0}——未采样5,6,8

    Boosting方法是将“弱学习算法”提升为“强学习算法”的过程,通过反复学习得到一系列弱分类器(决策树和逻辑回归),组合这些弱分类器得到一个强分类器,Boosting算法要涉及到两个部分,加法模型和前向分步算法

加法模型:

    强分类器由一系列弱分类器线性相加而成。一般组合形式如下:

                                                        

其中,是弱分类器,是弱分类器学习到的最优参数,是弱学习在强分类器中所占比重,P是所有和的组合。这些弱分类器线性相加组成强分类器。

前向分步:

    是在训练过程中,下一轮迭代产生的分类器是在上一轮的基础上训练得来的。即

                                                    

随机森林(Random Forest)

    RF = 决策树 + Bagging + 随机属性选择

同时训练多个决策树,预测时综合考虑多个结果进行预测,例如取多个节点的均值(回归),或者是众数(分类)

流程:1、样本的随机: 从样本集中用bagging的方式,随机选n个样本

           2、特征的随机: 从所有属性d中随机选择k个属性(k

            3、重复上述两个步骤m次,建立m棵CART决策树

            4、这m棵CART决策树形成随机森林,通过投票表决结果,决定数据属于哪一类



优势:1、消除了决策树容易出现过拟合的缺点

           2、减小了预测的方差,预测值不会因为训练数据的小变化而剧烈变化

from sklearn.ensembleimport RandomForestClassifier

RF = RandomForestClassifier(n_estimators=50)

RF.fit(x_train, y_train)

plot(RF)

print(RF.score(x_test, y_test))

二、Stacking

    

eg:

from sklearn.linear_modelimport LogisticRegression

from sklearn.neighborsimport KNeighborsClassifier

from sklearn.treeimport DecisionTreeClassifier

from mlxtend.classifierimport StackingClassifier

from sklearn.ensembleimport VotingClassifier#投票的分类器

# 定义三个不同的分类器

clf1 = KNeighborsClassifier(n_neighbors=1)

clf2 = DecisionTreeClassifier()

clf3 = LogisticRegression()

# 定义一个次级分类器

lr = LogisticRegression()

sclf = StackingClassifier(classifiers=[clf1, clf2, clf3],

meta_classifier=lr)

for clf, labelin zip([clf1, clf2, clf3, sclf],

['KNN','Decision Tree','LogisticRegression','StackingClassifier']):

scores = model_selection.cross_val_score(clf, x_data, y_data,cv=3,scoring='accuracy')

print("Accuracy: %0.2f [%s]" % (scores.mean(), label))

# VotingClassifier

sclf1 = VotingClassifier([('knn',clf1), ('dtree', clf2), ('rf', clf3)])

for clf, labelin zip([clf1, clf2, clf3, sclf1],

['KNN','Decision Tree','LogisticRegression','VotingClassifier']):

scores = model_selection.cross_val_score(clf, x_data, y_data,cv=3,scoring='accuracy')

print("Accuracy: %0.2f [%s]" % (scores.mean(), label))

你可能感兴趣的:(六、集成学习二、集成学习(Bagging、Stacking))