机器学习——集成学习

一、集成学习是什么?

集成学习是对其他算法进行组合的办法。 咱们将首要学习集成学习中的代表算法AdaBoost算法与随机森林

1.1概念

集成学习有时也被笼统地称作Boosting办法,广泛用于分类和回归使命。它开端的思维很简略:运用一些(不同的)办法改动原始练习样本的散布,从而构建多个不同的分类器,并将这些分类器线性组合得到一个更强壮的分类器,来做终究的决议计划。

集成学习的理论根底来自于Kearns和Valiant提出的根据PAC(probably approximately correct)的可学习性理论 ,PAC 界说了学习算法的强弱:

  • 弱学习算法:辨认过错率小于1/2(即准确率仅比随机猜测略高的算法)
  • 强学习算法:辨认准确率很高并能在多项式时间内完成的算法

依据这两个概念,后来产生了一个重要的结论: 强可学习与弱可学习是等价的,即:一个概念是强可学习的充要条件是这个概念是弱可学习的。

1.2集成学习的特色

  • 将多个分类办法调集在一起,以进步分类的准确率。
  • 由练习数据构建一组基分类器,然后通过对每个基分类器的猜测进行投票来进行分类
  • 严格来说,集成学习并不算是一种分类器,而是一种分类器结合的办法
  • 一般一个集成分类器的分类功能会好于单个分类器
  • 假如把单个分类器比作一个决议计划者,集成学习的办法就相当于多个决议计划者共同进行一项决议计划

二、集成学习的分类

机器学习——集成学习

依据集成学习的界说,集成学习是通过构建多个学习器来完成学习使命,依据学习器的生成办法,集成学习办法大概可以分红两类:
1.每个学习器之间存在依靠联系,有必要串行运转,每一轮迭代产生一个学习器,即Boosting算法。
2.每个学习器之间不存在依靠联系,可以并行运转,即Bagging、Random Forest(随机森林)

  • Boosting办法的根本思路:将基分类器层层叠加,每一层在练习的时分,对前一层基分类器分错的样本,给予更高的权重。测验时,依据各层分类器的成果加权得到终究成果。这样就运用根底学习器之间的依靠联系。通过对之前练习中过错标记的样本赋值较高的权重,可以进步整体的猜测作用。
  • Bagging办法:在练习进程中,参加练习的基学习器之间无强依靠,可以进行并行练习(例如 Random Forest)。为了让基分类器之间相互独立,可以将练习集分为若干子集(练习样本较少时,子集之间或许有交叠)。Bagging办法更像是一个集体决议计划的进程,每个个别都进行单独学习,学习的内容可以相同也可以不同,也可以部分重叠。但由于个别之间存在差异性,终究做出的判别不会完全一致。在终究决议计划时,每个个别单独做出判别,在通过投票的办法做出终究的集体决议计划。并行办法的原理是运用根底学习器之间的独立性,通过平均可以显著下降过错。
  • Stacking算法:Stacking办法是指练习一个模型用于组合其他各个模型。首要咱们先练习多个不同的模型,然后把之前练习的各个模型的输出为输入来练习一个模型,以得到一个终究的输出。理论上,Stacking可以表明上面说到的两种Ensemble办法,只要咱们采用合适的模型组合策略即可。但在实践中,咱们一般运用logistic回归作为组合策略。

2.1Boosting算法

机器学习——集成学习

2.1.1AdaBoost算法

机器学习——集成学习

机器学习——集成学习
AdaBoost算法是Adaptive Boost的简称,由Schapire于1996年提出,是最具体完成boosting办法最典型的代表。AdaBoost在之前学习器的根底上改动样本的权重,增加那些之前被分类过错的样本的比重,下降分类正确的样本比重,这样之后的学习器将重点重视那些被分类过错的样本。终究通过将这些学习器通过加权组合组成一个强学习器,分类正确率高的学习器权重较高,反之,权重较低。 步骤一:假定练习数据集具有均匀的权值散布,即每个练习样本在根本分类器的学习中作用相同,这一假定保证了第一步可以在原始数据集上学习根本分类器Gm(x) 步骤二:AdaBoost重复学习根本分类器,在每一轮m=1,2,3,…,M依次履行下列操作

  • (a)运用当时散布Dm加权的练习数据集,学习根本分类器Gm(x)
  • (b)核算根本分类器Gm(x)在加权练习数据集上的分类差错率,其实是加权练习集上被误分类样本的权值之和,由此可以看出数据权值散布与根本分离器Gm(x)的分类差错率的联系。
  • (c)核算根本分类器Gm(x)的系数m。m表明Gm(x)在终究分类器中的重要性,而且(b)得出的分类差错率越小的根本分类器在终究分类器中的作用越大。
  • (d)更新练习数据的权值散布,为下一轮学习根本分类器做准备。此种办法不改动所给的练习数据,而不断的改动练习数据权值的散布,使得练习数据在根本分类器的学习中起到不同的作用,这是AdaBoost的一个特色。 步骤三:线性组合f(x)完成M个根本分类器的加权表决,运用根本分类器的线性组合构建终究分类器是AdaBoost的另一特色

算法完成

Scikit-learn提供了sklearn.ensemble模块,支撑许多集成学习算法和模型。

分类器

首要导入这个算法库,在这个模块中AdaBoost分类器被命名为AdaBoostClassifier(classifier是分类的意思。)
所以导入的语句是: from sklearn.ensemble import AdaBoostClassifier

from sklearn.ensemble import AdaBoostClassifier
print(AdaBoostClassifier)

导入这个模块后,输出AdaBoostClassifier分类器,得出的成果是 class ‘sklearn.ensemble._weight_boosting.AdaBoostClassifier’,恰好说明这个AdaBoost分类器是一个类,而这个类中包括了许多参数

回归器

AdaBoost回归器也是在sklearn.ensemble模块中完成,是完成的办法迥然不同,由于其中集成了算法的步骤与核算办法,所以咱们只是需求调用就可以了,可依据需求修改算法参数,但是运用AdaBoost回归器时,首要导入这个算法回归器,其导入办法如下:

from sklearn.ensemble import AdaBoostRegressor

回归器语法:

class sklearn.ensemble.AdaBoostRegressor(base_estimator=None,*,n_estimators=50,learning_rate=1.0,loss='linear',random_state=None)

  • base_estimator: 可选参数,默许为DecisionTreeClassifier。理论上可以挑选任何一个分类或许回归学习器,不过需求支撑样本权重。咱们常用的一般是CART决议计划树或许神经网络MLP。默许是决议计划树,即AdaBoostClassifier默许运用CART分类树DecisionTreeClassifier,而AdaBoostRegressor默许运用CART回归树DecisionTreeRegressor。另外有一个要注意的点是,假如咱们挑选的AdaBoostClassifier算法是SAMME.R,则咱们的弱分类学习器还需求支撑概率猜测,也便是在scikit-learn中弱分类学习器对应的猜测办法除了predict还需求有predict_proba。
  • loss: 可选参数,默许为linear。{‘linear’,’square’,’exponential’}可选,每次增强迭代后更新权重时运用的丢失函数。 n_estimators: 整数型,可选参数,默许为50。弱学习器的最大迭代次数,或许说最大的弱学习器的个数。一般来说n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合,一般挑选一个适中的数值。默许是50。在实践调参的进程中,咱们常常将n_estimators和下面介绍的参数learning_rate一起考虑。
  • learning_rate: 浮点型,可选参数,默许为1.0。每个弱学习器的权重缩减系数,取值规模为0到1,关于相同的练习集拟合作用,较小的v意味着咱们需求更多的弱学习器的迭代次数。一般咱们用步长和迭代最大次数一起来决议算法的拟合作用。所以这两个参数n_estimators和learning_rate要一起调参。一般来说,可以从一个小一点的v开端调参,默许是1。
  • random_state: 整数型,可选参数,默许为None。假如RandomState的实例,random_state是随机数生成器; 假如None,则随机数生成器是由np.random运用的RandomState实例

2.2 Bagging算法

机器学习——集成学习

Bagging算法又称(引导调集算法)装袋算法,是并行式集成学习办法的典型代表,它直接根据自助采样法。

2.2.1根本流程

给定包括m个样本的数据集,咱们先随机取出一个样本放入采样中,再把该样本放回初始数据集,使得下次采样时该样本仍有或许被选中。这样,通过m次随机采样操作,咱们得到含m个样本的采样集,初始练习会集有的样本在采样集里多次呈现,有的则从未呈现。照这样,咱们可采样出T个含m个练习样本的采样集,然后根据每个采样集练习出一个基学习器,再将这些基学习器进行结合。

在对猜测输出进行结合时,Bagging一般对分类使命运用简略投票法,对回归使命运用简略平均法。若分类猜测时呈现两个收到相同票数的情形,则最简略的做法是随机挑选一个,也可进一步考察学习器投票的置信度来确定终究胜者。

算法特色

机器学习——集成学习

算法完成

分类器

分类器算法:from sklearn.ensemble import BaggingClassifier

分类器语法:class sklearn.ensemble.BaggingClassifier(base_estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)

- base_estimator: 目标或无,可选(默许=无),界说若学习器。假如为None,则根本估量量为决议计划树。
- bootstrap: 布尔值,可选(默许= True),是否抽取样本进行替换。假如为False,则履行不替换的采样。
- bootstrap_features: 布尔值,可选(默许False),是否运用替换样本描绘特征
- oob_score: 布尔变量,可选(默许为False),是否运用现成的样原本估量泛化差错。
- warm_start: 布尔变量,可选(默许= False),设置为True时,请重用上一个调用的解决方案以合适并为调集增加更多估量量,不然,仅合适一个全新的调集。
- n_jobs: intNone(可选)(默许为None),fit和 并行运转的作业数predict。None除非joblib.parallel_backend上下文中,不然表明1-1表明运用一切处理器。
- random_state: 整型,RandomState实例或无,可选(默许值:无),假如为int,则random_state是随机数生成器运用的种子;不然为false- verbose: 在拟合和猜测时操控具体程度。
而需求重视的是三个参数,
- n_estimators: int,可选(默许值为10),随机采样的次数。
- max_samples: intfloat,可选(默许值= 1.0),从X抽取以练习每个根本估量量的样本数。假如为int,则抽取样本 max_samples;假如float,则抽取本 max_samples * X.shape[0]
- max_features: intfloat,可选(默许值= 1.0),从X制作以练习每个根本估量量的要素数量。假如为int,则制作特征 max_features;假如是起浮的,则制作特征 max_features * X.shape[1]
可以恰当改动这三个参数,准确率会有所改动。

回归器

  • 回归器算法:from sklearn.ensemble import BaggingRegressor
  • 回归器语法:class sklearn.ensemble.BaggingRegressor(base_estimator=None, n_estimators=10, *, max_samples=1.0, max_features=1.0, bootstrap=True, bootstrap_features=False, oob_score=False, warm_start=False, n_jobs=None, random_state=None, verbose=0)
- base_estimator: 目标或无,可选(默许=无),根本估量量合适数据集的随机子集。假如为None,则根本估量量为决议计划树。
- n_estimators: int,可选(默许值为10),随机采样的次数。
- max_samples: intfloat,可选(默许值= 1.0),从X抽取以练习每个根本估量量的样本数。假如为int,则抽取样本 max_samples;假如float,则抽取本 max_samples * X.shape[0]
- max_features: intfloat,可选(默许值= 1.0),从X制作以练习每个根本估量量的要素数量。假如为int,则制作特征 max_features;假如是起浮的,则制作特征 max_features * X.shape[1]
- bootstrap: 布尔值,可选(默许= True),是否抽取样本进行替换。假如为False,则履行不替换的采样。
- bootstrap_features: 布尔值,可选(默许False),是否运用替换样本描绘特征
- oob_score: 布尔变量,可选(默许为False),是否运用现成的样原本估量泛化差错。
- warm_start: 布尔变量,可选(默许= False),设置为True时,请重用上一个调用的解决方案以合适并为调集增加更多估量量,不然,仅合适一个全新的调集。
- n_jobs: intNone(可选)(默许为None),fit和 并行运转的作业数predict。None除非joblib.parallel_backend上下文中,不然表明1-1表明运用一切处理器。
- random_state: 整型,RandomState实例或无,可选(默许值:无),假如为int,则random_state是随机数生成器运用的种子;不然为false- verbose: 在拟合和猜测时操控具体程度。
需求进行修改的参数是三个参数,分别是

2.3 随机森林

机器学习——集成学习
概念:
随机森林的根底是决议计划树与Bagging算法,随机森林便是通过集成学习的思维将多棵树集成的一种算法,它的根本单元是决议计划树。随机森林的称号中有两个关键词,一个是“随机”,一个便是”森林”。“森林”咱们很好理解,一棵叫做树,那么成百上千棵就可以叫做森林了,这样的比喻仍是很恰当的,其实这也是随机森林的首要思维–集成思维的体现。

其实从直观视点来解说,每棵决议计划树都是一个分类器(假定现在针对的是分类问题),那么关于一个输入样本,N棵树会有N个分类成果。而随机森林集成了一切的分类投票成果,将投票次数最多的类别指定为终究的输出,这便是一种最简略的 Bagging 思维。

随机森林的特色 在当时一切算法中,具有极好的准确率; 可以有效地运转在大数据集上; 可以处理具有高维特征的输入样本,而且不需求降维; 可以评估各个特征在分类问题上的重要性; 在生成进程中,可以获取到内部生成差错的一种无偏估量; 关于缺省值问题也可以取得很好的成果

算法完成

from sklearn.ensemble import RandomForestClassifier

算法语法

机器学习——集成学习

- criterion: string, optional (default=”gini”) 字符串,可挑选(默许值为“gini”)。衡量割裂质量的功能函数,默许是基尼指数,熵达到峰值的进程要相对慢一些。
- min_samples_split: int, float, optional (default=2) 整数,浮点数,可选的(默许值为2)。内部节点再区分所需最小样本数。假如某节点的样本数少于,则不会持续再测验挑选最优特征来进行区分。 默许是2.假如样本量不大,不需求管这个值。假如样本量数量级非常大,则推荐增大这个值。
- min_samples_leaf: int, float, optional (default=1) 整数,浮点数,可选的(默许值为1)。叶子节点最少样本数。假如样本量数量级非常大,则推荐增大这个值。
- min_weight_fraction_leaf: float, optional (default=0.) 浮点数,可选的(默许值是0.0)。叶子节点最小的样本权重和。便是不考虑权重问题。一般来说,假如咱们有较多样本有缺失值,或许分类树样本的散布类别误差很大,就会引入样本权重,这时咱们就要注意这个值了。
- max_features: int, float, string or None, optional (default=”auto”) 整数,浮点数,字符串或许无值,可选的(默许值为"auto")。最大特征数
- max_leaf_nodes: int or None, optional (default=None) 整数或许无值,可选的(默许值为None)。最大叶子节点数。约束最大叶子节点数,可以避免过拟合。以最优的办法运用max_leaf_nodes来生长树。最好的节点被界说为不纯度上的相对减少。假如为None,那么不约束叶子节点的数量。
- min_impurity_decrease: float, optional (default=0.) 浮点数,可选的(默许值为0)。假如节点的割裂导致的指数的下降程度大于或许等于这个节点的值,那么这个节点将会被割裂。
- min_impurity_split: float, 浮点数。节点区分最小指数。
- bootstrap: boolean, optional (default=True) 布尔值,可选的(默许值为True)。建立决议计划树时,是否运用有放回抽样。
- oob_score: bool (default=False) bool,(默许值为False)。主张用True,袋外分数反应了一个模型拟合后的泛化能力。
- n_jobs: integer, optional (default=1) 整数,可选的(默许值为1)。用于拟合和猜测的并行运转的作业(作业)数量。假如值为-1,那么作业数量被设置为核的数量
- random_state: int, RandomState instance or None, optional (default=None) 整数,RandomState实例,或许为None,可选(默许值为None)。是随机数生成器运用的种子; 假如是RandomState实例,random_state便是随机数生成器;假如为None,则随机数生成器是np.random运用的RandomState实例。
- verbose: int, optional (default=0) 整数,可选的(默许值为0)。操控决议计划树建立进程的冗余度。
- warm_start: bool, optional (default=False) 布尔值,可选的(默许值为False)。当被设置为True时,从头运用之前决议的解决方案,用来给整体拟合和增加更多的估量器,反之,只是只是为了拟合一个全新的森林。