过去很长时间,我对随机森林进行了学习和应用,写这篇博客以防止遗忘。我的研究不深,可能有错误
随机森林算法简介:
随机森林算法(Random Forest, RF)是集成学习算法的一种,在处理多维数据时,具有快速、高效的特点,因此它很快成为一种经典的数据挖掘算法。近年来,在医学、生物信息学等领域得到了广泛的应用。其核心思想是通过对样本的随机采样,分类属性的随机抽取来生成大量有差异的决策树,采用决策树投票的方法来提高模型的准确率。算法在构建决策树时并不会将所有的属性都作为分类属性,而是随机选择属性集一部分作为分类属性,使决策树之间存在差异性。决策树之间的差异性正是随机森林算法采用多个弱分类器投票的意义所在。
算法由来:
1、 决策树算法,决策树算法是机器学习领域的经典算法,在处理非线性数据时很有优势,决策树算法将一组数据递归的进行分割,形成一个树状的结构,每个节点(根节点,中间节点)都有一定的分类规则,分类规则是唯一的,所以在决策树建立完成以后,相同的数据一定会到达相同的叶子节点。什么时候停止分类呢?有以下方法:(1)、叶子节点中所有数据已经属于同一类,对于分类算法来说,没必要再分下去了(至于其他算法目前我还没有了解过)。(2)、叶子节点中只有一个样本,无论如何也没办法再分裂了。(2)、为了减少算法运行时间,可以人为设置一个决策树最大深度,这个要靠经验了。(决策树还有很多剪枝算法,随机森林中没有涉及到,我也没有了解过)。
决策树算法的关键在于节点分裂的规则上,分裂规则就是通过一个标准,选取特征作为分类特征,这个标准选取算法决定了分类的准确度和算法运行速度,分裂规则算法有:CLS、ID3、C4.5、CART等,还有近年来出现了C5.0算法(应该是属于商用算法,算法细节受保护,无从得知)。我下面做一个简单的介绍:
(1)CLS算法,随机选择分类特征。
(2)ID3算法,为了避免CLS算法的不确定性,采用特征的信息增益来选取特征值,C4.5算法则采用信息增益率选取特征值,进一步改进ID3算法克服了两个问题1、信息增益率会偏向取值较多的属性。2、ID3算法无法处理连续型数据,只能处理离散型数据,(什么是离散型,什么又是连续型数据呢,离散型数据 比如以毕业生样本为例,性别:男、女。民族:汉族,少数民族。毕业学校:清华大学,北京大学,河南师范大学等等 还有集合:R={1,0}这就是离散型数据。连续性数据就是样本的身高,体重这样的数据必然不是整数,甚至是无理数)C4.5算法及ID3算法具体请参考论文《决策树C4_5连续属性分割阈值算法改进及其应用_姚亚夫》如果想看通俗易懂的版本请去:https://blog.youkuaiyun.com/zjsghww/article/details/51638126 本渣也是在这个地方看懂的。
(3)CART算法这个算法比较简单,采取Gini指数作为选取分类特征的指标,已有的介绍也很多,我没必要再写一遍(我也不是特别熟悉)介绍我参考的一篇论文给大家《随机森林优化算法研究》作者曹正风。
2、随机森林算法
随机森林算法是第一个集成分类算法,也是现在机器学习领域的经典算法,常用算法,理论简单易懂,唯一的数学都体现在分裂规则算法中,集成的方法没有多少数学知识;
(1)设训练集中共有N个样本,从中抽取n(n<N)个样本,形成子样本,我们设为data。(这里抽取方法可以采用有放回或者无放回抽样,根据我的实验来看,有放回抽样效果往往更好,精度更高。这其实就是Bagging算法。)。抽取很多个data,由于每个data上要建立一个决策树,data的数目其实就是决策树的数目,我们设为Ntree(这是随机森林的一个重要参数)。Ntree取值多少呢?有学者经过一定数量的实验,得出结论:100是一个普遍性强,效果好的值,大家可以多取几个值,理论上来说,Ttree值越大,分类精度就越高,但是往往是随着NTree旳值达到一个阈值以后,精度提高很有限,花费时间却增长极快。
(2)在(1)中抽取好的数据集上建立决策树弱作为分类器,和决策树算法不同的是,这里的决策树并不是抽取全部的特征数L全部作为分类属性,而是从全部L个特征中随机抽取一部分特征(数量设为L2)作为本决策树的分类特征,L2的值是随机森林另一个重要参数,根据经验,取值一般为sqart(L),大家可以以此参考,多加实验找最好值。每个节点分裂时,都从这L2个特征中选择最佳特征(不同节点分类算法有不同的规则)。最后,把Ntree个决策树的分类结果进行集成,一般取平均值,众数。几年来有人提出采用数据拟合的方法将分类结果集成,但我没有找到具体做法,哪位朋友对此有了解希望多多指教。
3、随机森林算法的优点和缺点
优点:
1、对于非线性数据分类效果好,而且使用时不需要考虑数据是否为线性数据,这是由决策树的特性决定的。
2、适合高维数据,由于每棵决策树只采用原数据集特征数的开方个特征,数据维度对算法运行时间影响比较小。
3、算法原理简单,容易实现。
缺点:
1、公式简单,这是优点,但是对于做科研的同学们来说就是去缺点,实在很难改进啊,简单而几乎完美的东西怎么改进呢?
2、目前的随机森林算法在面对多分类数据时分类精度会明显下降,这是我在一次数学建模比赛中发现的,当时是一个疾病数据,疾病种类多达一百多种,要我们做预测,我的天哪!这种多分类真是变态。随机森林的精度一度下降到60%左右。
总结,先写这么多吧,主要是自己记忆,如果大家能多多指点就更好了。