随机森林•建立随机森林的基本思想是,通过自助法(boot-strap)重采样技术,不断生成训练样本和测试样本,由训练样本生成多个分类树组成随机森林,测试数据的分类结果按分类树投票多少形成的分数而定。随机森林有两个重要参数,一是树节点预选的变量个数mtry,二是随机森林中树的个数ntree,一般默认mtry=(mall为所有变量的个数),ntree=500。算法通过R语言编制的程序实现。mallR软件•R语言提供了一系列的统计工具(如线性和非线性模型,统计检验,时间序列分析,分类,聚类,回归,……)•R是一个程式语言,R语言的基本要素是向量(vector),不是数目(scalar).因此,以向量或矩阵的运算来说,在R中通常只需1行程式码就可以解決.简单介绍:•x-c(1,2,3)•x#输出x•“#”号是说明语句字符,#后面的语句是说明语句;-表示赋值,c()表示数组,X-c()即表示将一组数据赋给变量X;号是计算机提示符•rt-read.table(exam1.txt“,head=TRUE);rtlm.sol-lm(Weight,data=rt)summary(lm.sol)•文件的第一行是读文件exam1.txt;并认为文本文件exam1.txt中的第一行是文件的头head=TRUE;否则(FALSE)文件中的第一行作为数据处理。并将读出的内容放在变量rt中。第二个rt是显示变量的内容(如果一行执行多个命令,需用分号(;)隔开)•第二行是对数据rt中的重量作线性回归,其计算结果放置在变量lm.sol中•第三行是显示变量lm.sol的详细内容读数据的方式•读纯文本文件•读纯文本文件有两个函数,一个是read.table()函数,另一个是scan()函数read.table()函数•read.table()函数是读表格形式的文件。利用read.table()函数可读入数据,如•rt-read.table(houses.data)此时变量rt是一个数据框,其格式与纯文本文件houses.data格式相同scan()函数•scan()函数可以直接读纯文本文件数据。如:w-scan(weight.data)•也可以将由scan()读入的数据存放成矩阵格式,如果将weight.data中的数据放在一个10行20列的矩阵中,其命令格式为•X-matrix(scan(weight.data,0),nrow=10,ncol=20,byrow=TRUE)X•链接嵌入R软件的数据库,可以用data()函数调用这些数据库与软件包。如:data(iris)R软件中提供了iris数据,调用iris数据集•library()为调用程序包命令。如:•library(randomForest)调用随机森林程序包•set.seed(2)括号中的2叫做随机数种子,在设定好了随机数种子后,你每次重新运行这个程序时得到的随机数都是相同的。然后把set.seed(2)这句话去掉,再运行两遍,结果是不一样的。随机森林算法•随机森林算法是LeoBreiman于2001年提出的一种新型分类和预测模型,它具有需要调整的参数较少、不必担心过度拟合、分类速度很快,能高效处理大样本数据、能估计哪个特征在分类中更重要以及较强的抗噪音能力等特点,因此,在基因芯片数据挖掘、代谢途径分析及药物筛选等生物学领域得到应用并取得了较好的效果。该方法是基于决策树(decisiontree)的分类器集成算法。•单棵树生长方法生长单棵分类树的原则是递归分区。最简单的树是二叉树,即树中每个节点最多有两个分支节点(见图)。分类树按照不纯度最小的原则,首先找到一个特征把全部训练样本分成两组,然后按照同样的规则对节点处的样本进行再次分类。在二叉树中,根节点包含全部训练数据,按照分支生成规则分裂为左孩子节点和右孩子节点,它们分别包含训练数据的一个子集,孩子节点可以继续分裂。这样依次进行,直到满足分支停止规则停止生长为止。这时每个终端节点称为叶节点。分支节点是判断特征是否满足(T是每个节点处判断的阈值),并按照节点不纯度最小的原则生成。节点n上的分类数据如果都来自于同一类别,则此节点的不纯度i(n)=0;如果分类数据服从均匀分布,则不纯度很大。常见的不纯度的度量有3种:误分类不纯度,熵不纯度和Gini不纯度。Mmt•当生成一棵分类树时,通常需要防止出现过拟合现象。过拟合指的是分类树太复杂以至于包含了太多的噪声,对于测试数据工作得很好而对测试数据的分类性能很差。一种常见的方法是令分类树充分生长,然后利用剪枝技术对树进行修剪。•自助法重采样在统计量重采样技术中,一种新方法是自助法(bootstrap)。自助法是从原始的样本容量为N的训练样本集合中随机抽取N个样本生成新的训练样本集,抽样方法为有放回抽样,这样重新采样的数据集不可避免地存在着重复的样本。独立抽样k次,生成k个相互独立的自助样本集。随机森林算法基本原理•随机森林是通过一种新的自助法重采样技术生成很多个树分类器,其步骤如下:1.从原始训练数据中生成k个自助样本集,每个自助样本集是每棵分类树的全部训练数据。2.每个自助样本集生长为单棵分类树。在树的每个节点处从M个特征中随机挑选m个特征(m《M),按照节点不纯度最小的原则从这个m特征中选出一个特征进行分支生长。这棵分类树进行充分生长,使每个节点的不纯度达到最小,不进行通常的剪枝操作。•3.根据生成的多个树分类器对新的数据进行预测,分类结果按每个树分类器的投票多少而定。每次抽样生成自助样本集,全体样本中不在自助样本中的剩余样本称为袋外数据(out-of-bag,OOB),OOB数据被用来预测分类正确率,每次的预测结果进行汇总来得到错误率的OOB估计,用于评估组合分类器的正确率。•随机森林通过在每个节点处随机选择特征进行分支,最小化了各棵分类树之间的相关性,提高了分类精确度。因为每棵树的生长很快,所以随机森林的分类速度很快,并且很容易实现并行化。•随机森林算法作为一种新的组合学习算法,其良好的分类能力和快速的运算能力都得到了充分的体现。由于简单有效,随机森林算法会在生物信息学领域中有更广泛的应用前景,例如预测蛋白质的亚细胞定位、膜蛋白的类型、转录起始点以及蛋白质同源寡聚体分类等。1.•library(randomForest)•y-read.table(train.txt,head=TRUE)•y•set.seed(17)•y.rf-randomForest(type~.,data=y,•mtry=2,importance=TRUE,do.trace=100)•print(y.rf)2.•library(randomForest)•y-read.table(train.txt,head=TRUE)•set.seed(71)•y.rf-randomForest(type~.,data=y,importance=TRUE,proximity=TRUE)•print(y.rf)