您好,欢迎访问三七文档
随机森林随机森林的定义随机森林是一个树型分类器,构建的没有剪枝的分类回归决策树;输入的是一个二维的矩阵,决定了单颗树的生长过程;森林的输出采用简单多数投票法(针对分类)或单颗树输出结果的简单平均(针对回归)得到。妹子分类问题计算机看不到妹子的长相,只能得到一些属性(Attributes)描述,包括:身高、体重、头部面积、头部形状、眼睛面积、头发长度、胸围、腰围、臀围…等等,那么是否能够通过这些特征判断一个妹子是不是美女。决策树的定义决策树是这样的一颗树:每个内部节点上选用一个属性进行分割每个分叉对应一个属性值每个叶子结点代表一个分类A1A2A3c1c2c1c2c1a11a12a13a21a22a31a32决策树框架决策树生成算法分成两个步骤树的生成开始,数据都在根节点递归的进行数据分片树的剪枝防止过拟合决策树使用:对未知数据进行分割按照决策树上采用的分割属性逐层往下,直到一个叶子节点随机森林算法随机选取训练样本集:使用Bagging方法形成每颗树的训练集随机选取分裂属性集:假设共有M个属性,指定一个属性数F≤M,在每个内部结点,从M个属性中随机抽取F个属性作分裂属性集,以这F个属性上最好的分裂方式对结点进行分裂(在整个森林的生长过程中,F的值一般维持不变)每颗树任其生长,不进行剪枝决策树续2—分裂属性的选择度量原则:分类效果最好的(或分类最纯的,或能使树的路径最短)的属性常用度量信息增益——Informationgain(ID3/C4.5)•所有属性假设都是取离散值的字段(ID3)•经过修改之后可以适用于连续值字段(C4.5)基尼指数——Giniindex(ClassificationandRegressionTress,CART,Breiman,1984)•能够适用于离散和连续值字段信息增益任意样本分类的期望信息:I(s1,s2,……,sm)=-∑Pilog2(pi)(i=1..m)其中,数据集为S,m为S的分类数目,Pi≈|Si/|S|Ci为某分类标号,Pi为任意样本属于Ci的概率,si为分类Ci上的样本数I(s1,s2,……,sm)越小,s1,s2,……,sm就越有序(越纯),分类效果就越好。由属性A划分为子集的熵:A为属性,具有V个不同的取值,S被A划分为V个子集s1,s2,……,sv,sij是子集sj中类Ci的样本数。E(A)=∑(s1j+……+smj)/s*I(s1j,……,smj)信息增益:Gain(A)=I(s1,s2,……,sm)-E(A)分裂属性选择规则:选择具有最大信息增益的属性为分裂属性OOB估计计算1(以树为单位,错误):对每颗树,利用未被该树选中的训练样本点,统计该树的误分率;将所有树的误分率取平均得到随机森林的OOB误分率计算2(以样本为单位,正确):对每个样本,计算它作为OOB样本的树对它的分类情况(约1/3的树);然后以简单多数投票作为该样本的分类结果;最后用误分个数占样本总数的比率作为随机森林的OOB误分率OOB误分率是随机森林的泛化误差的一个无偏估计OOB估计是高效的,其结果近似于需要大量计算的k折交叉验证。随机森林的特点两个随机性的引入,使得随机森林不容易陷入过拟合两个随机性的引入,使得随机森林具有很好的抗噪声能力对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。可生成一个Proximities=(pij)矩阵,用于度量样本之间的相似性:pij=aij/N,aij表示样本i和j出现在随机森林中同一个叶子结点的次数,N随机森林中树的颗数。可以得到变量重要性排序(两种:基于OOB误分率的增加量和基于分裂时的分类节点纯度下降量)两个重要的代码randomForest主要参数是ntree,mtryPredict第一步,随机森林的安装随机森林是基于R语言运行,安装过程分两步:1.ubuntu系统下首先安装R语言包。用一行代码。sudoapt-getinstallR然后ubuntu系统就自动的帮你安装完R。2.安装randomforest意想不到的简单。打开终端,输入R,就算进入到了R语言的编码界面。在大于号后面入“install.packages(randomForest)“然后你选择一个距离你比较近的数据源就可以了。使用代码library(randomForest)data(iris)set.seed(100)ind-sample(2,nrow(iris),replace=TRUE,prob=c(0.8,0.2))iris.rfrandomForest(Species~.,iris[ind==1,],ntree=50,nPerm=10,mtry=3,proximity=TRUE,importance=TRUE)print(iris.rf)iris.pred-predict(iris.rf,iris[ind==2,])table(observed=iris[ind==2,Species],predicted=iris.pred)打开R界面我的代码library(randomForest)for(iin1:5){set.seed(i)setwd(/home/ubuntu/desktop/RNA/randomForest/train_all)name-paste(set,i,.txt,sep=)name1-paste(tree1,i,sep=)name2-paste(random,i,sep=)train1-read.table(name,header=T)train-train1[,2:dim(train1)[2]]hot.rf=randomForest(binding~.,data=train,ntree=500,mtry=18,importance=TRUE)setwd(/home/ubuntu/desktop/RNA/randomForest/query_all)test1-read.table(name,header=T)test-test1[,2:dim(test1)[2]]pre_1-predict(hot.rf,test)#table(observed=test[binding],predicted=iris.pred)setwd(/home/ubuntu/desktop/RNA/randomForest/out)write.table(getTree(hot.rf,1),name1)write(hot.rf,name2)write.table(pre_1,name)}
本文标题:随机森林
链接地址:https://www.777doc.com/doc-3485614 .html