Sklearn是python的机器学习算法的包,在整个机器学习过程中具有非常好的口碑。我把最近看的一些东西加上自己做实验的理解做了一份总结。
1. 随机森林介绍
随机森林是一种统计学习理论,其随机有两个方面:首先在训练的每一轮中,都是对原始样本集有放回的抽取固定数目的样本点,形成k 个互不相同的样本集。第二个点是:对于每一个决策树的建立是从总的属性中随机抽取一定量的属性作为分裂属性集,这样对于k个树分类器均是不相同的。由随机生成的k个决策树组成了随机森林。
对于每一个决策树来说,其分裂属性是不断地选取具有最大信息增益的属性进行排列。整个随机森林建立后,最终的分类标准采用投票机制得到可能性最高的结果。
2. 随机森林随机选择子集需要注意
a) 如果一共有K个特征,每次取其平方根数量即可
b) 设每棵树的深度为n,那么共有2^n个叶子节点,那么所需要的样本点按照经验来看,2^n * 1000的效果最好。至于选取多少特征,大概就是低于样本数量的千分之一,2∧树深*1000=样本数量。如果不超过1000的样本,怎么做效果没有多大区别,所以研究提取的特征意义不大。
3. 随机森林自我测试
有的资料上显示,随机森林使用63%的数据作为训练数据集,37%的数据作为测试数据,但是并没有什么科学依据。就是交叉验证就可以。
4. 随机森林用途
a) 很好的用于分类和回归问题
b) 离群点分析和异常检测
c) 显示的缺失数据的计算
5. 多种模型融合技术对比
与其在一个算法上花大工夫,结果却发现,将算法进行融合,会表现得更好,而且只需花费很少的精力。提到随机森林就不得与boosting进行对比。一共有三种集成模式:
l Bagging(最简单)采用方法是:通过重(chong,重新)采样随机产生若干个不同的子训练集,然后在每个集合上训练一个分类器,最终用投票的方式将结果合并。
l Boosting采用的方法:每个训练样例都有一个权重,并且权重会不断变化,每次训练新分类器的时候都集中在那些分类器之前倾向于分错的样例上。
l Stacking采用的方法是:每个单独的分类器的输出作为更高层分类器的输入,更高层分类器可以判断如何更好地合并这些来自低层的输出。
Bagging 与Boosting的比较:
a) 如果是在有限样本并且测试数据也是有限的情况下,bootstrap可以得到更好的结果,但是如果要如kinect之类的应用,在其diversity非常高的情况下,average是更好的方法。More formally, averaging ensemble method is better in terms ofgeneralization and robustness.
b) Bagging采用重复采样,每个个体分类器所采用的训练样本都是从训练集中按等概率抽取的,因此Bagging的各子训练集能够更好的覆盖训练样本空间,从而有着良好的稳定性。
c) Boosting注重分类错误的样本,将个体子训练集分类错误的训练样本的权重提高,降低分类正确的样本权重,并依据修改后的样本权重来生成新的训练样本空间并用来训练下一个个体分类器。然而,由于Boosting算法可能会将噪声样本或者分类边界样本的权重过分累积,因此Boosting很不稳定,但是其在通常情况下,其泛化能力是比较理想的集成算法之一。
6. 融合方式
不得不提的是,常见的融合技术有两种:
a) 通过构造出的决策树进行投票,最终得票最多的类别获胜
b) 依据feature importance 新建一棵决策树,让这棵决策树进行决策
c) Weighted random forest并不是给每棵树一个权重,而是给每个特征一个权重,这个权重,然后构造决策树
但是,sklearn中用的却不是常见的投票的方式,这个我是在实验过程中意外发现的,前面十棵树全部都是分类到第1类,然而结果却是第二类,至今苦寻无果,希望之前对这一点比较了解的同学可以为我提供帮助。
7. 随机森林feature importance
a) The relative rank (i.e. depth) of a feature used as a decision node in a tree can be used to assess the relative importance of that feature with respect to the predictability of the target variable. Features used at the top of the tree are used contribute to the final prediction decision of a larger fraction of the input samples. The expected fraction of the
samples they contribute to can thus be used as an estimate of the relative importance of the features.By averaging those expected activity rates over several randomized trees one can reduce the variance of such an estimate and use it for feature selection.
b) 意思是对每棵树上面的特征所影响的数的数目求一个概率,然后将所有树得到的这些特征求一个平均值。比如一棵树的某个特征下有1000个样本,这个树共有2000样本,在这棵树上的特征重要性是1000/2000=0.5.
8. 优缺点分析
大量的理论和实证研究都证明了RF具有很高的预测准确率,对异常值和噪声有很好的容忍度,且不容易出现过拟合。可以说,RF是一种自然的非线性建模工具,是目前数据挖掘算法最热门的前沿研究领域之一。具体来说,它有以下优点:
a) 通过对许多分类器进行组合,它可以产生高准确度的分类器;
b) 他可以处理大量的输入变量
c) 他可以在决定类别时,评估变量的重要性
d) 在建造森林时,它可以在内部对于一般化后的误差产生不偏差的估计
e) 它包含一个好方法可以估计遗失的资料,并且如果有很大一部分资料遗失,仍可以维持准确度。这个在资料没超过一定限度的情况下,如果丢失了某些特征的数据,分裂时不参与互信息计算,唯一有意义的就是在两个特征分裂的信息熵一样的时候,参照两个特征的缺失百分比确定使用哪一个。
f) 提供一个实验方法,可以去侦测变量之间的相互作用
g) 学习过程是很快速的
h) 对异常值和噪声具有很好的容忍度,且不容易出现过拟合
随机森林的缺点:
a) 对于有不同级别属性的数据,级别划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的
b) 单棵决策树的预测效果很差:由于随意选择属性,使得单棵决策树的预测效果很差
9. 决策树
a) 决策树就是实例属性值约束的合取的析取式。从树根到树叶的每一条路径对应一组属性测试的合取,树本身对应这些合取的析取。
b) 决策树建立时,使用统计测试来确定每一个实例属性单独分类训练样例的能力,在每个节点选取能最好的分类样例的属性,且从不回溯重新考虑以前的选择。因此,决策树学习是一个自顶向下的贪婪搜索算法。
c) 每一步都使用统计测试使决策树学习对错误有很好的健壮性。
d) 奥坎姆剃刀:优先选择拟合数据的最简单假设。
10. 源码参照博客http://blog.itpub.net/12199764/viewspace-1572056/