随机森林是利用多棵树对样本进行训练并预测的一种分类器。它是由多棵CART构成的,对每棵树,其使用的训练集是从总的训练集中有放回采样出来的,这意味着总的训练集中有些样本可能多次出现在一棵树中,也可能从未出现在一棵树的训练集中。在训练每棵树的节点时,使用的特征是从所有的特征中按照一定比例随机的抽取一部分特征训练每一棵树,假设有M个特征,这个比例可以是2*根号M,0.5*根号M等。
随机森林有很多优点:
1) 每棵树都选择部分样本及部分特征,一定程度避免过拟合;
2) 每棵树随机选择样本并随机选择特征,使得具有很好的抗噪能力,性能稳定;
3) 能处理很高维度的数据,并且不用做特征选择;
4) 适合并行计算;
5) 实现比较简单;
缺点:
1) 参数较复杂;
2) 模型训练和预测都比较慢
http://blog.csdn.net/y0367/article/details/51501780
训练过程:
(1):训练集s,测试集T,特征维数F。确定参数:使用的CART的数量是t,每棵树的深度是d,每个节点使用到的特征数量是f,终止条件:节点上最少样本数s,节点上最少的信息增益是m。
对于第1到第t棵树,i=1~t:
(2)从s中有放回的抽取大小和s一样的训练集s(i),作为根节点的样本,从根节点开始训练。
(3)如果当前节点上达到终止条件,则设置当前节点为叶子节点,如果是分类问题,该叶子节点的预测输出为当前节点样本集合中数量最多的那一类c(j)
,概率p
为c(j)
占当前样本集的比例;如果是回归问题,预测输出为当前节点样本集各个样本值的平均值。然后继续训练其他节点。如果当前节点没有达到终止条件,则从F维特征中无放回的随机选取f维特征。利用这f维特征,寻找分类效果最好的一维特征k
及其阈值th
,当前节点上样本第k维特征小于th
的样本被划分到左节点,其余的被划分到右节点。继续训练其他节点。有关分类效果的评判标准在后面会讲。
(4)重复(2)(3)直到所有节点都训练过了或者被标记为叶子节点。
(5)重复(2),(3),(4)直到所有CART都被训练过。
预测过程:
同样是对i=1~t:
(1):从当前树的根节点开始,根据当前节点的阈值th,判断是进入左节点(<th
)还是进入右节点(>=th
),直到到达,某个叶子节点,并输出预测值。
(2):重复执行(1),直到所有t棵树都输出了预测值。如果是分类问题,则输出为所有树只能够预测概率总和最大的那一类,即对每个c(j)的p进行累计;如果是回归问题,则输出所有树的输出的平均值。
有关分类的评判标准,因为使用的CART,因此使用CART的评判标准,C3.0,C4.5.
特征重要性度量:
计算某个特征X的重要性时,步骤如下:
1:对每棵决策树,选择相应的袋外数据计算袋外数据误差(OOB1)。
袋外数据:每次建立决策树时,通过重复抽样得到一个数据用于训练决策树,这时大约还有1/3的数据没有被利用,没有参与决策树的建立,这部分数据可以用于决策树的性能进行评估,计算模型的预测错误率。
已经证明这是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的预测集来获取测试集误差的无偏估计
-
随机对袋外数据OOB所有样本的特征X加入噪声干扰(可以随机改变样本在特征X处的值),再次计算袋外数据误差,记为errOOB2。
- 假设森林中有N棵树,则特征X的重要性=∑errOOB2−errOOB1N。这个数值之所以能够说明特征的重要性是因为,如果加入随机噪声后,袋外数据准确率大幅度下降(即errOOB2上升),说明这个特征对于样本的预测结果有很大影响,进而说明重要程度比较高。