创建日期 星期二 18 十二月 2018
首先有个概念,个体学习器,一般是弱学习器,当然强学习器也是可以的;集成学习就是把个体学习器做一次集成,然后对结果进行一次决策,就叫集成学习,举个简单的例子就是,100个人中来吃一包口味一样的糖,然后其中有98个人说是甜的,做个投票,然后就说这包糖是甜的;
然后个体学习器中分为强关联的学习器和弱关联学习器,两个不一样,强关联也叫强依赖,意思是个体学习器之间存在强的依赖关系,一般这些学习器集成都是串行集成,而另一种弱关联学习器就是依赖关系不是很大,一般是并行集成;
强依赖的一般是boosting,什么GDBT,xGBOOST之类的串行,弱依赖的一般就是随机森林,bagging之类的;
boosting原理就是这个图
Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
简单的理解
初始对每个样本分配相同的权重,每次经过分类,把对的结果的权重降低,错的结果权重增高,如此往复,直到阈值或者循环次数。
梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部极小值。这种在函数域的梯度提升观点对机器学习的很多领域有深刻影响。
提升的理论意义:如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器。
简单理解GBDT:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。GBDT是boosting思想的一种实现;
推导就不写了,网上一搜一大堆,基本上都是残差的拟合和损失函数的减小来提升;
然后bagging就是赌博机类似,就是我上面举得那个例子差不多就是将对同一个x做训练的值做一次汇总然后用某种决策策略来决定结果;最常用的决策策略是投票法,就是取众数,还有平均法,取平均值,还有再给这一堆值做一次拟合,建一个模型,将预测的值作为x再预测一遍;
然后就是随机森林,就是多棵决策树做的森林;决策树前面讲过,在这不细讲了;这个就是并行的使用决策树;
下面是弱依赖模型
集成学习(ensermble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system) ,基于委员会的学习(committee-based learning)等
一般是先产生一组个体学习器,然后通过某种策略来把他们结合起来;个体学习器通常由一个现有的学习算法从训练数据中产生,例如如C4.5决策树算法,BP神经网络算法等,此时集成中值包含相同类型的个体学习器,比如决策树集成中全是决策树;
神经网络集成中全部都是神经网络,这样的集成是同质的(homogeneous);同质集成中的个体学习器也叫作基学习器,相应的学习算法也称为基学习算法;集成包括不同的叫异质的,异质集成中的个体学习器由不同学习算法生成,这里面的个体学习器就不叫基学习器,而叫做组件学习器或者直接称为个体学习器;当然个体学习器要有一定的准确性,就是不能太次,要好而不同,就是学习效果不能太坏,并且有多样性,学习器之间要有差异;
然后通过式子可以证明随着个体分类器的个数增多,你想让其分类分错的可能性会呈指数级下降,因为那是个多项式的类似于多项式概率分布,最后结果会越变小,这里就不谢那个公式了,我感觉一般人都可以理解;
根据个体学习器的生成方式,目前的集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系,必须串行化生成序列化方法,以及个体学习器之间不存在强依赖关系,可以同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和随机森林(Random Forest)
Boosting 是一种可将弱学习算法提升为强学习器的算法,这种算法的工作机制类似,先从初始的训练集训练出一个基学习器,然后根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到更多的关注;
关于Adaboost的两种权重
Adaboost算法中有两种权重,一种是数据的权重,另一种是弱分类器的权重。其中,数据的权重主要用于弱分类器寻找其分类误差最小的决策点,找到之后用这个最小误差计算出该弱分类器的权重(发言权),分类器权重越大说明该弱分类器在最终决策时拥有更大的发言权。
Adaboost数据权重与弱分类器
刚刚已经介绍了单层决策树的原理,这里有一个问题,如果训练数据保持不变,那么在数据的某个特定维度上单层决策树找到的最佳决策点每一次必然都是一样的,为什么呢?因为单层决策树是把所有可能的决策点都找了一遍然后选择了最好的,如果训练数据不变,那么每次找到的最好的点当然都是同一个点了。
所以,这里Adaboost数据权重就派上用场了,所谓“数据的权重主要用于弱分类器寻找其分类误差最小的点”,其实,在单层决策树计算误差时,Adaboost要求其乘上权重,即计算带权重的误差。
举个例子,在以前没有权重时(其实是平局权重时),一共10个点时,对应每个点的权重都是0.1,分错1个,错误率就加0.1;分错3个,错误率就是0.3。现在,每个点的权重不一样了,还是10个点,权重依次是[0.01,0.01,0.01,0.01,0.01,0.01, 0.01,0.01,0.01,0.91],如果分错了第1一个点,那么错误率是0.01,如果分错了第3个点,那么错误率是0.01,要是分错了最后一个点,那么错误率就是0.91。这样,在选择决策点的时候自然是要尽量把权重大的点(本例中是最后一个点)分对才能降低误差率。由此可见,权重分布影响着单层决策树决策点的选择,权重大的点得到更多的关注,权重小的点得到更少的关注。
在Adaboost算法中,每训练完一个弱分类器都就会调整权重,上一轮训练中被误分类的点的权重会增加,在本轮训练中,由于权重影响,本轮的弱分类器将更有可能把上一轮的误分类点分对,如果还是没有分对,那么分错的点的权重将继续增加,下一个弱分类器将更加关注这个点,尽量将其分对。
这样,达到“你分不对的我来分”,下一个分类器主要关注上一个分类器没分对的点,每个分类器都各有侧重。
Adaboost分类器的权重
由于Adaboost中若干个分类器的关系是第N个分类器更可能分对第N-1个分类器没分对的数据,而不能保证以前分对的数据也能同时分对。所以在Adaboost中,每个弱分类器都有各自最关注的点,每个弱分类器都只关注整个数据集的中一部分数据,所以它们必然是共同组合在一起才能发挥出作用。所以最终投票表决时,需要根据弱分类器的权重来进行加权投票,权重大小是根据弱分类器的分类错误率计算得出的,总的规律就是弱分类器错误率越低,其权重就越高
bagging
多个相同的学习器并行然后取众数或者平均数;
模型融合的结合策略: 基本学习器学习完后,需要将各个模型进行融合,常见的策略有:
1,平均法: 平均法有一般的评价和加权平均,这个好理解。对于平均法来说一般用于回归预测模型中,在Boosting系列融合模型中,一般采用的是加权平均融合。
2,投票法:有绝对多数投票(得票超过一半),相对多数投票(得票最多),加权投票。这个也好理解,一般用于分类模型。在bagging模型中使用。
3,学习法:一种更为强大的结合策略是使用”学习法”,即通过另一个学习器来进行结合,把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。常见的有Stacking和Blending两种
Stacking方法: Stacking 先从初始数据集训练出初级学习器,然后”生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。
stacking一般使用交叉验证的方式,初始训练集D 被随机划分为k 个大小相似的集合D1 , D2 , … , Dk,每次用k-1个部分训练T个模型,对另个一个部分产生T个预测值作为特征,遍历每一折后,也就得到了新的特征集合,标记还是源数据的标记,用新的特征集合训练一个集合模型。
随机森林利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。下面我们再详细说一下随机森林是如何构建的。
随机森林主要包括4个部分:随机选择样本;随机选择特征;构建决策树;随机森林投票分类。
随机选择样本
给定一个训练样本集,数量为N,我们使用有放回采样到N个样本,构成一个新的训练集。注意这里是有放回的采样,所以会采样到重复的样本。详细来说,就是采样N次,每次采样一个,放回,继续采样。即得到了N个样本。
然后我们把这个样本集作为训练集,进入下面的一步。
随机选择特征
在构建决策树的时候,我们前面已经讲过如何在一个节点上,计算所有特征的InformationGain(ID3) 或者 GainRatio(C4.5),然后选择一个最大增益的特征作为划分下一个子节点的走向。
但是,在随机森林中,我们不计算所有特征的增益,而是从总量为M的特征向量中,随机选择m个特征,其中m可以等于sqrt(M),然后计算m个特征的增益,选择最优特征(属性)。注意,这里的随机选择特征是无放回的选择!
所以,随机森林中包含两个随机的过程:随机选择样本,随机选择特征。
构建决策树
有了上面随机产生的样本集,我们就可以使用一般决策树的构建方法,得到一棵分类(或者预测)的决策树。需要注意的是,在计算节点最优分类特征的时候,我们要使用上面的随机选择特征方法。而选择特征的标准可以是我们常见的InformationGain(ID3) 或者 Gain Ratio(C4.5)。
随机森林投票分类
通过上面的三步走,我们可以得到一棵决策树,我们可以重复这样的过程H次,就得到了H棵决策树。然后来了一个测试样本,我们就可以用每一棵决策树都对它分类一遍,得到了H个分类结果。这时,我们可以使用简单的投票机制,或者该测试样本的最终分类结果。
优缺点分析
优点:
它能够处理很高维度(feature很多)的数据,并且不用做特征选择;
由于随机选择样本导致的每次学习决策树使用不同训练集,所以可以一定程度上避免过拟合;
缺点:
随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合;
对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的
随机森林决策树参数
RF的决策树参数,它要调参的参数基本和GBDT相同,如下:
1) max_features
决策树划分时考虑的最大特征数max_features:可以使用很多种类型的值,默认是”None”,意味着划分时考虑所有的特征数;如果是”log2”意味着划分时最多考虑log2(n_features)个特征;如果是”sqrt”或者”auto”意味着划分时最多考虑sqrt(n_features) 个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般来说,如果样本特征数不多,比如小于50,我们用默认的”None”就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。
参数效果:max_features 值越大,模型学习能学习到的信息越多,越容易过拟合。
2)max_depth
决策树最大深度max_depth, 默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
参数效果:值越大,决策树越复杂,越容易过拟合。
3) min_samples_split
内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
参数效果:值越大,决策树越简单,越不容易过拟合。
4)min_samples_leaf
叶子节点最少样本数min_samples_leaf: 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
参数效果:值越大,叶子节点越容易被被剪枝,决策树越简单,越不容易过拟合。
5)min_weight_fraction_leaf
叶子节点最小的样本权重和min_weight_fraction_leaf:这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
6) max_leaf_nodes
最大叶子节点数max_leaf_nodes: 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
参数效果:值越小,叶子节点个数越少,可以防止过拟合。
7)min_impurity_split
节点划分最小不纯度min_impurity_split: 这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。
上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。
常用方法
predict_proba(x):给出带有概率值的结果。每个点在所有label(类别)的概率和为1.
predict(x):直接给出预测结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。
predict_log_proba(x):和predict_proba基本上一样,只是把结果给做了log()处理。
创建日期 星期二 18 十二月 2018
首先有个概念,个体学习器,一般是弱学习器,当然强学习器也是可以的;集成学习就是把个体学习器做一次集成,然后对结果进行一次决策,就叫集成学习,举个简单的例子就是,100个人中来吃一包口味一样的糖,然后其中有98个人说是甜的,做个投票,然后就说这包糖是甜的;然后个体学习器中分为强关联的学习器和弱关联学习器,两个不一样,强关联也叫强依赖,意思是个体学习器之间存在强的依赖关系,一般这些学习器集成都是串行集成,而另一种弱关联学习器就是依赖关系不是很大,一般是并行集强依赖的一般是boosting,什么GDBT,xGBOOST之类的串行,弱依赖的一般就是随机森林,bagging之类的;Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
简单的理解
初始对每个样本分配相同的权重,每次经过分类,把对的结果的权重降低,错的结果权重增高,如此往复,直到阈值或者循环次数。
梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐逼近局部极小值。这种在函数域的梯度提升观点对机器学习的很多领域有深刻影响。
提升的理论意义:如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器。
简单理解GBDT:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。GBDT是boosting思想的一种实现;
推导就不写了,网上一搜一大堆,基本上都是残差的拟合和损失函数的减小来提升;
然后bagging就是赌博机类似,就是我上面举得那个例子差不多就是将对同一个x做训练的值做一次汇总然后用某种决策策略来决定结果;最常用的决策策略是投票法,就是取众数,还有平均法,取平均值,还有再给这一堆值做一次拟合,建一个模型,将预测的值作为x再预测一遍;
然后就是随机森林,就是多棵决策树做的森林;决策树前面讲过,在这不细讲了;这个就是并行的使用决策树;
集成学习(ensermble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system) ,基于委员会的学习(committee-based learning)等
一般是先产生一组个体学习器,然后通过某种策略来把他们结合起来;个体学习器通常由一个现有的学习算法从训练数据中产生,例如如C4.5决策树算法,BP神经网络算法等,此时集成中值包含相同类型的个体学习器,比如决策树集成中全是决策树;
神经网络集成中全部都是神经网络,这样的集成是同质的(homogeneous);同质集成中的个体学习器也叫作基学习器,相应的学习算法也称为基学习算法;集成包括不同的叫异质的,异质集成中的个体学习器由不同学习算法生成,这里面的个体学习器就不叫基学习器,而叫做组件学习器或者直接称为个体学习器;当然个体学习器要有一定的准确性,就是不能太次,要好而不同,就是学习效果不能太坏,并且有多样性,学习器之间要有差异;
然后通过式子可以证明随着个体分类器的个数增多,你想让其分类分错的可能性会呈指数级下降,因为那是个多项式的类似于多项式概率分布,最后结果会越变小,这里就不谢那个公式了,我感觉一般人都可以理解;
根据个体学习器的生成方式,目前的集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系,必须串行化生成序列化方法,以及个体学习器之间不存在强依赖关系,可以同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和随机森林(Random Forest)
Boosting 是一种可将弱学习算法提升为强学习器的算法,这种算法的工作机制类似,先从初始的训练集训练出一个基学习器,然后根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续得到更多的关注;
关于Adaboost的两种权重
Adaboost算法中有两种权重,一种是数据的权重,另一种是弱分类器的权重。其中,数据的权重主要用于弱分类器寻找其分类误差最小的决策点,找到之后用这个最小误差计算出该弱分类器的权重(发言权),分类器权重越大说明该弱分类器在最终决策时拥有更大的发言权。
Adaboost数据权重与弱分类器
刚刚已经介绍了单层决策树的原理,这里有一个问题,如果训练数据保持不变,那么在数据的某个特定维度上单层决策树找到的最佳决策点每一次必然都是一样的,为什么呢?因为单层决策树是把所有可能的决策点都找了一遍然后选择了最好的,如果训练数据不变,那么每次找到的最好的点当然都是同一个点了。
所以,这里Adaboost数据权重就派上用场了,所谓“数据的权重主要用于弱分类器寻找其分类误差最小的点”,其实,在单层决策树计算误差时,Adaboost要求其乘上权重,即计算带权重的误差。
举个例子,在以前没有权重时(其实是平局权重时),一共10个点时,对应每个点的权重都是0.1,分错1个,错误率就加0.1;分错3个,错误率就是0.3。现在,每个点的权重不一样了,还是10个点,权重依次是[0.01,0.01,0.01,0.01,0.01,0.01, 0.01,0.01,0.01,0.91],如果分错了第1一个点,那么错误率是0.01,如果分错了第3个点,那么错误率是0.01,要是分错了最后一个点,那么错误率就是0.91。这样,在选择决策点的时候自然是要尽量把权重大的点(本例中是最后一个点)分对才能降低误差率。由此可见,权重分布影响着单层决策树决策点的选择,权重大的点得到更多的关注,权重小的点得到更少的关注。
在Adaboost算法中,每训练完一个弱分类器都就会调整权重,上一轮训练中被误分类的点的权重会增加,在本轮训练中,由于权重影响,本轮的弱分类器将更有可能把上一轮的误分类点分对,如果还是没有分对,那么分错的点的权重将继续增加,下一个弱分类器将更加关注这个点,尽量将其分对。
这样,达到“你分不对的我来分”,下一个分类器主要关注上一个分类器没分对的点,每个分类器都各有侧重。
Adaboost分类器的权重
由于Adaboost中若干个分类器的关系是第N个分类器更可能分对第N-1个分类器没分对的数据,而不能保证以前分对的数据也能同时分对。所以在Adaboost中,每个弱分类器都有各自最关注的点,每个弱分类器都只关注整个数据集的中一部分数据,所以它们必然是共同组合在一起才能发挥出作用。所以最终投票表决时,需要根据弱分类器的权重来进行加权投票,权重大小是根据弱分类器的分类错误率计算得出的,总的规律就是弱分类器错误率越低,其权重就越高
bagging
多个相同的学习器并行然后取众数或者平均数;
模型融合的结合策略: 基本学习器学习完后,需要将各个模型进行融合,常见的策略有:
1,平均法: 平均法有一般的评价和加权平均,这个好理解。对于平均法来说一般用于回归预测模型中,在Boosting系列融合模型中,一般采用的是加权平均融合。
2,投票法:有绝对多数投票(得票超过一半),相对多数投票(得票最多),加权投票。这个也好理解,一般用于分类模型。在bagging模型中使用。
3,学习法:一种更为强大的结合策略是使用”学习法”,即通过另一个学习器来进行结合,把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器。常见的有Stacking和Blending两种
Stacking方法: Stacking 先从初始数据集训练出初级学习器,然后”生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。
stacking一般使用交叉验证的方式,初始训练集D 被随机划分为k 个大小相似的集合D1 , D2 , … , Dk,每次用k-1个部分训练T个模型,对另个一个部分产生T个预测值作为特征,遍历每一折后,也就得到了新的特征集合,标记还是源数据的标记,用新的特征集合训练一个集合模型。
随机森林利用随机的方式将许多决策树组合成一个森林,每个决策树在分类的时候投票决定测试样本的最终类别。下面我们再详细说一下随机森林是如何构建的。
随机森林主要包括4个部分:随机选择样本;随机选择特征;构建决策树;随机森林投票分类。
随机选择样本
给定一个训练样本集,数量为N,我们使用有放回采样到N个样本,构成一个新的训练集。注意这里是有放回的采样,所以会采样到重复的样本。详细来说,就是采样N次,每次采样一个,放回,继续采样。即得到了N个样本。
然后我们把这个样本集作为训练集,进入下面的一步。
随机选择特征
在构建决策树的时候,我们前面已经讲过如何在一个节点上,计算所有特征的InformationGain(ID3) 或者 GainRatio(C4.5),然后选择一个最大增益的特征作为划分下一个子节点的走向。
但是,在随机森林中,我们不计算所有特征的增益,而是从总量为M的特征向量中,随机选择m个特征,其中m可以等于sqrt(M),然后计算m个特征的增益,选择最优特征(属性)。注意,这里的随机选择特征是无放回的选择!
所以,随机森林中包含两个随机的过程:随机选择样本,随机选择特征。
构建决策树
有了上面随机产生的样本集,我们就可以使用一般决策树的构建方法,得到一棵分类(或者预测)的决策树。需要注意的是,在计算节点最优分类特征的时候,我们要使用上面的随机选择特征方法。而选择特征的标准可以是我们常见的InformationGain(ID3) 或者 Gain Ratio(C4.5)。
随机森林投票分类
通过上面的三步走,我们可以得到一棵决策树,我们可以重复这样的过程H次,就得到了H棵决策树。然后来了一个测试样本,我们就可以用每一棵决策树都对它分类一遍,得到了H个分类结果。这时,我们可以使用简单的投票机制,或者该测试样本的最终分类结果。
优缺点分析
优点:
它能够处理很高维度(feature很多)的数据,并且不用做特征选择;
由于随机选择样本导致的每次学习决策树使用不同训练集,所以可以一定程度上避免过拟合;
缺点:
随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合;
对于有不同级别的属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的
随机森林决策树参数
RF的决策树参数,它要调参的参数基本和GBDT相同,如下:
1) max_features
决策树划分时考虑的最大特征数max_features:可以使用很多种类型的值,默认是”None”,意味着划分时考虑所有的特征数;如果是”log2”意味着划分时最多考虑log2(n_features)个特征;如果是”sqrt”或者”auto”意味着划分时最多考虑sqrt(n_features) 个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般来说,如果样本特征数不多,比如小于50,我们用默认的”None”就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。
参数效果:max_features 值越大,模型学习能学习到的信息越多,越容易过拟合。
2)max_depth
决策树最大深度max_depth, 默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
参数效果:值越大,决策树越复杂,越容易过拟合。
3) min_samples_split
内部节点再划分所需最小样本数min_samples_split: 这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
参数效果:值越大,决策树越简单,越不容易过拟合。
4)min_samples_leaf
叶子节点最少样本数min_samples_leaf: 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。
参数效果:值越大,叶子节点越容易被被剪枝,决策树越简单,越不容易过拟合。
5)min_weight_fraction_leaf
叶子节点最小的样本权重和min_weight_fraction_leaf:这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
6) max_leaf_nodes
最大叶子节点数max_leaf_nodes: 通过限制最大叶子节点数,可以防止过拟合,默认是”None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
参数效果:值越小,叶子节点个数越少,可以防止过拟合。
7)min_impurity_split
节点划分最小不纯度min_impurity_split: 这个值限制了决策树的增长,如果某节点的不纯度(基于基尼系数,均方差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。一般不推荐改动默认值1e-7。
上面决策树参数中最重要的包括最大特征数max_features, 最大深度max_depth, 内部节点再划分所需最小样本数min_samples_split和叶子节点最少样本数min_samples_leaf。
常用方法
predict_proba(x):给出带有概率值的结果。每个点在所有label(类别)的概率和为1.
predict(x):直接给出预测结果。内部还是调用的predict_proba(),根据概率的结果看哪个类型的预测值最高就是哪个类型。
predict_log_proba(x):和predict_proba基本上一样,只是把结果给做了log()处理。