sklearn上使用集成算法

来源:互联网 发布:ubuntu ant android 编辑:程序博客网 时间:2024/06/05 02:38

集成方法即将不同的分类器组合起来,使用集成方法会有多种形式:不同算法的集成、同一算法在不同设置下的集成、数据集不同部分分配给不同分类器之后的集成。

sklearn中封装了Ensemble methods.AdaBoost和bagging方法。他们都是基于同一种分类器多个不同实例的计算方法.

1.boosting

【是啥】

boosting是几个不同的分类器的集成。(注意:这里的不同只是训练集不同,或者说同一训练集上样本权重不同,而分类器的基本类型没有不同!)不同的分类器是通过串行训练而获得的,每个新分类器都在已训练出的分类器的性能基础上再进行训练,通过集中关注被已有分类器错分的些数据来获得新的分类器。关注方法是:每次训练后根据此次训练集中的每个样本是否被分类正确以及上次的总体分类的准确率,来确定每个样本的权值。Boosting分类的结果是基于所有分类器的加权求和结果的,分类器权重并不相等,每个权重代表的是其对应分类器在上一轮迭代中的成功度。Boosting算法有很多种,AdaBoost(Adaptive Boost)就是其中最流行的。 每个弱分类器可以是机器学习算法中的任何一个,如logistic回归,SVM,决策树等。

其中:每个样本都有一个权重,初始为1/m,分错后权重增大。

      每个分类器也有权重,根据错误率越小,最后所占的权重越大

训练:设置n个弱分类器,依次在同一样本集上分类,根据错误率确定a。

      训练最后得到n个分类器和对应n个a,

测试:判断结果=求和(ai*i的分类结果)

【怎么用】

from sklearn.ensemble importAdaBoostClassifier

clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1),

                                   algorithm="SAMME",n_estimators=200)

说明:参数n_estimators设置弱分类器的数量,参数learning_rate是每个弱分类器在最后决定中所做的贡献,就是上面所说的a。默认的弱分类器为决策树,不同的弱学习器可以通过参数base_estimator来确定。重要参数是弱分类器的数量:n_estimators和基本分类器的复杂性,它们对获得好的分类结果有重要的影响。

注意:用LR或者SVC作为弱分类器,出现问题。

  按照我们最初始的想法,使用之前训练好的LR和SVC作为弱分类器。但是调用拟合函数fit的时候报错。分析原因是:虽然在sklearn中已经写好了adboosting 方法。但每次训练(fit)是要给出指定的sample_weight,而LR和SVC中的fit函数都不支持使用sample_weight。

2.Bagging

【是啥】

Bagging和Boosting一样,是一种组合基本分类器的方法,也就是使用多个基分类器来获取更为强大的分类器,其核心思想是有放回的抽样。

Bagging算法的训练流程:

1、从样本集中有放回的抽样M个样本。

2、用这M个样本训练基分类器C。

3、重复这个过程X次,得到若干个基分类器。

Bagging算法的预测流程:

1、对于新传入实例A,用这X个新分类器得到一个分类结果的列表。

2、若待分类属性是数值型(回归),求这个列表的算数平均值作为结果返回。

3、若待分类属性是枚举类型(分类),按这个列表对分类结果进行投票,返回票数最高的。

【怎么用】

from sklearn.ensemble importBaggingClassifier

from sklearn.neighborsimport KNeighborsClassifier

bagging =BaggingClassifier(KNeighborsClassifier(),

                                          max_samples=0.5,max_features=0.5)

说明:用户指定基本分类器,例如上面的KNeighborsClassifier,同时调整一些参数来明确随机子集的筛选方法。特别的,通过max_sample和max_features控制子集的规模。

原创粉丝点击