思想:Bagging(bootstrap aggregating)是通过结合几个模型降低泛化误差的技术。主要想法是分别训练几个不同的模型,然后让所有模型表决测试样例的输出。 这是机器学习中常规策略的一个例子,被称为模型平均(modelaveraging)。采用这种策略的技术被称为集成方法。
框架流程:
- 从原始样本集中使用Bootstraping 方法随机抽取n个训练样本,共进行k轮抽取,得到k个训练集(k个训练集之间相互独立,元素可以有重复)。
- 对于n个训练集,我们训练k个模型,(这个模型可根据具体的情况而定,可以是决策树,knn等)
-
对于分类问题:由投票表决产生的分类结果;对于回归问题,由k个模型预测结果的均值作为最后预测的结果(所有模型的重要性相同)。
bagging通过在不同数据集上训练模型降低分类器的方差。换句话说,bagging可以预防过拟合。bagging的有效性来自不同训练数据集上单独模型的不同,它们的误差在投票过程中相互抵消。此外,某些bootstrap训练样本很可能略去离散值。
典型算法:与其说Bagging是一种算法啊,不如说是一种解决问题的思想,一种框架,而Random Forest是基于Bagging的一种经典装袋法。顾名思义,随机森林是一种算则分类回归树作为基模型的Bagging算法。
Random Forest :在Bagging策略的基础上进行修改后的一种算法
(1)从样本集中用Bootstrap采样选出n个样本;
(2)从所有属性中随机选择K个属性,选择出最佳分割属性作为节点创建决策树;
(3)重复以上两步m次,即建立m棵决策树;
(4)这m个决策树形成随机森林,通过投票表决结果决定数据属于那一类
随机森林的随机性体现在哪几个方面?
1、数据集的随机选取
从原始的数据集中采取有放回的抽样(bagging),构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。
2、待选特征的随机选取
与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。
思想:
随机森林实际上是一种特殊的bagging方法,它将决策树用作bagging中的模型。首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到能使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽到的特征中间找到最优解,应用于节点,进行分裂。随机森林的方法由于有了bagging,也就是集成的思想在,实际上相当于对于样本和特征都进行了采样(如果把训练数据看成矩阵,就像实际中常见的那样,那么就是一个行和列都进行采样的过程),所以可以避免过拟合。最终分类的时候采用多用用户投票,回归采用均值。
为什么绝大多数随机森林算法中用的都是cart树
在sklearn中的随机森林算法中用的就是cart树,在分类问题中,分裂方式不限于gini,也可以选entropy,在回归问题中,用的是mse和mae。
ID3有很多明显不足的地方:比如不能处理连续性变量;不能处理缺失值;选择分裂变量时会倾向于选择类别较多的变量(理解这个问题可以想的极端一点,如ID类的特征,每一类下都只有一个输出项);容易过拟合。
同样,C4.5也有一些问题:C4.5生成的是多叉树,即一个父节点可以有多个节点。很多时候,在计算机中二叉树模型会比多叉树运算效率高,如果采用二叉树,可以提高效率;C4.5只能用于分类,不能用于回归;C4.5由于使用了熵模型,里面有大量耗时的对数运算,如果是连续值还有大量的排序运算,运算效率较低。
cart树可以分类可以回归。
cart树里面引入了一个gini系数的概念,gini的计算相比熵要简单的多,所以可以减少一定的运算量。
cart树第二个特点在于节点的分裂上,每次节点分裂都是二叉的,所以cart树就是多个二叉树组成的,这种特点使得cart算法与C4.5算法在处理离散变量上有很大的不同,离散变量在C4.5中只有一次可能出现在分裂节点上,分裂的枝数与离散变量的类别数量有关。
因为每次都是二分裂,所以cart也没有ID3中倾向于选择类别较多的变量的缺陷。
随机森林优缺点总结 优点
- 由于采用了集成算法,本身精度比大多数单个算法要好,所以准确性高
- 在测试集上表现良好,由于两个随机性的引入,使得随机森林不容易陷入过拟合(样本随机,特征随机)
- 在工业上,由于两个随机性的引入,使得随机森林具有一定的抗噪声能力,对比其他算法具有一定优势
- 由于树的组合,使得随机森林可以处理非线性数据,本身属于非线性分类(拟合)模型
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化
- 训练速度快,可以运用在大规模数据集上
- 可以处理缺省值(单独作为一类),不用额外处理
- 由于有袋外数据(OOB),可以在模型生成过程中取得真实误差的无偏估计,且不损失训练数据量
- 在训练过程中,能够检测到feature间的互相影响,且可以得出feature的重要性,具有一定参考意义
- 由于每棵树可以独立、同时生成,容易做成并行化方法
- 由于实现简单、精度高、抗过拟合能力强,当面对非线性数据时,适于作为基准模
缺点
- 当随机森林中的决策树个数很多时,训练时需要的空间和时间会比较大
- 随机森林中还有许多不好解释的地方,有点算是黑盒模型
- 在某些噪音比较大的样本集上,RF的模型容易陷入过拟合