随机森林工作过程可概括如下:
(1)假设训练集中共有N个对象、M个变量,从训练集中随机有放回地抽取N个对象构建决策树;
(2)在每一个节点随机抽取m个变量,将其作为分割该节点的候选变量,每一个节点处的变量数应一致;
(3)完整生成所有决策树,无需剪枝(最小节点为1);
(4)重复(1)-(3)过程,获得大量决策树;终端节点的所属类别由节点对应的众数类别决定;
(5)对于新的观测点,用所有的树对其进行分类,其类别由多数决定原则生成。
相较于其它分类方法,随机森林通常具有如下优势:
分类准确率通常更高;
能够有效处理具有高维特征(多元)的数据集,而且不需要降维;
在处理大数据集时也具有优势;
可应用于具有大量缺失值的数据中;
能够在分类的同时度量变量对分类的相对重要性。
本篇使用微生物群落研究中的16S扩增子测序数据,展示R包randomForest中的随机森林方法。
注:randomForest包根据经典决策树生成随机森林;如果期望根据条件推断树生成随机森林,可使用party包。当预测变量间高度相关时,基于条件推断树的随机森林可能效果更好。
示例数据,R代码的百度盘链接:
https://pan.baidu.com/s/10MWBfjBnYIzf6Cx2Zd9CjA
数据集
示例文件“otu_table.txt”为来自16S测序所获得的细菌OTUs丰度表格,共计120个样本,其中60个来自环境c(c组),60个来自环境h(h组)。
接下来使用该数据:
(1)任一OTUs的丰度都很难作为判别两种不同环境的标准,因此接下来综合考虑所有OTUs的丰度并进行建模,目的是找到能够稳定区分两种环境的代表性OTUs组合(作为生物标志物);
(2)通过代表性OTUs的丰度构建预测模型,即仅通过这些OTUs的丰度就能够判断样本分类。
首先读入数据预处理。
#读取 OTUs 丰度表
otu
#过滤低丰度 OTUs 类群,它们对分类贡献度低,且影响计算效率
#120 个样本,就按 OTUs 丰度的行和不小于 120 为准吧
otu = 120), ]
#合并分组,得到能够被 randomForest 识别计算的格式
group otu otu_group
#将总数据集分为训练集(占 70%)和测试集(占 30%)
set.seed(123)
select_train otu_train otu_test
随机森林构建
<