1、随机森林分类,随机森林(random forests)和使用决策树作为基本分类器的bagging有些类似点. 而随机森林也是进行许多次自助法放回抽样;所得到的样本数目及由此建立的决策树数量要大大多于bagging的样本数目. 与bagging的关键区别在于, 在生成每棵树的时候, 每个节点的变量都仅仅在随机选出的少数变量中产生. 因此, 不但样本是随机的, 就连每个节点的产生都有相当大的随机性.随机森林让每个树尽量增长, 而且不进行修剪. 随机森林不惧怕很大的维数, 即使是数千变量, 它也不必删除变量. 它也给出分类中各个变量的重要性., library(randomForest) w=rea
2、d.csv(CTG.NAOMIT.csv,header=T)#读入数据 F=c(30,41,42);for(i in F)w,i=factor(w,i)#因子化最后三个哑元变量 set.seed(1010)#设置随机种子,可以使每一次进行随机森林的结果相同a=randomForest(NSPLB+AC+FM+UC+DL+DS+DP+ASTV+MSTV+ALTV+MLTV+Width+ +Min+Max+Nmax+Nzeros+Mode+Mean+Median+Variance+Tendency+CLASS+ ,w,importance=TRUE,proximity=TRUE)#进行拟合 wp=
3、predict(a,w) D=42 (z=table(w,D,wp)#将观测值与拟合值用表的形式表示出来 wp 1 2 3 1 1655 0 0 2 1 294 0 3 0 0 176 (E0=(sum(z)-sum(diag(z)/sum(z)#求误判率1 0.0004703669,随机森林对全部数据的拟合,randomForest函数,参数:ntree:决策树的数量,默认为500 mtry:在每一个分裂节点处样本预测器 Subset:是一个指示量 表示哪一行应该被使用 replace:取值为1或0,默认值为1, 表示是否做变量替换函数:predict():用随机森林预测测试数据 impor
4、tance():各个变量的相对重要性,table函数,功能:统计每对因子水平组合出现的次数 输出为一个表(即矩阵)的形式table(x,y) 1.x与y同属一个数据的两列,都是因子列时:以表的形式列出每对因子水平组合在数据中出现的次数。 2.x与y是两独立等长的列向量:类似用cbind(x,y)生成一个两列的数据,统计每对因子水平组合在数据中出现的次数。在回归模型中,若包含了两个名义变量,在研究其相互影响之前,常使用table函数统计各组观察值的数量关系。,1 2 3 MeanDecreaseAccuracyLB 7.931391e-03 0.0182678564 0.0164483718 1
5、.006298e-02AC 1.681484e-02 0.0533512068 0.0473898364 2.440966e-02FM 2.018432e-03 0.0051100572 0.0030471463 2.530536e-03UC 2.990938e-03 0.0128540930 0.0295112182 6.554363e-03DL 3.134727e-03 0.0062163297 0.0083109671 3.975893e-03DS 7.271044e-05 0.0000000000 0.0000000000 5.614251e-05DP 1.465497e-02 0.0
6、093218847 0.0192492928 1.426760e-02ASTV 1.533337e-02 0.0611994215 0.0978431327 2.855682e-02MSTV 1.750367e-02 0.0428296783 0.0925550973 2.711638e-02ALTV 1.422563e-02 0.0442124724 0.0924956932 2.479885e-02MLTV 2.542157e-03 0.0212964709 0.0246086714 6.946948e-03Width 6.981794e-03 0.0096438771 0.0168171
7、867 8.167042e-03Min 6.672575e-03 0.0119848115 0.0276738150 9.101807e-03Max 5.182692e-03 0.0100589883 0.0112846337 6.351818e-03Nmax 1.916819e-03 0.0054471771 0.0070532573 2.822992e-03Nzeros 9.320171e-05 0.0011708216 0.0007542885 3.054480e-04Mode 9.544448e-03 0.0195386527 0.0364370950 1.308980e-02Mean
8、 1.878777e-02 0.0343876820 0.0913690697 2.688858e-02Median 8.356795e-03 0.0208518866 0.0623242695 1.450081e-02Variance 7.466426e-03 0.0180881253 0.0354075277 1.122307e-02Tendency 7.832140e-04 0.0009360381 0.0027049166 9.585888e-04CLASS 1.725178e-01 0.4983320492 0.4285115981 2.384477e-01,MeanDecrease
9、GiniLB 15.1370104AC 22.3189711FM 7.0323795UC 15.2780532DL 4.6476965DS 0.2698911DP 21.8114885ASTV 66.6440206MSTV 57.3781446ALTV 53.6217850MLTV 21.0317074Width 14.6554145Min 13.7609524Max 10.9187963Nmax 7.3793892Nzeros 2.1300278Mode 27.3576951Mean 51.7621164Median 27.3817224Variance 17.3383879Tendency
10、 2.2989011CLASS 321.8888317, a$importance,用随机森林拟合数据时变量的重要性图,par(mfrow=c(3,1)#将3*1个图在一个页面上显示matplot(importance(a),1:3,type=o,pch=1:3,lty=1:3,col=1, xlab=Variable Number,ylab=Importance) #matplot(x,y) as y x-1:n 画矩阵中各列的折线图title(Variable Importance for Three Levels of Response)legend(topleft,legend=pas
11、te(NSP=,1:3,sep=), pch=1:3,lty=1:3,col=1)barplot(importance(a),4,cex.name=0.6)#画直方图title(Variable Importance According to Mean Decrease Accuracy)barplot(importance(a),5,cex.name=0.6)title(Variable Importance According to Mean Decrease Gini)par(mfrow=c(1,1)?, aCall: randomForest(formula = NSP LB + AC
12、 + FM + UC + DL + DS + DP + ASTV + MSTV + ALTV + MLTV + Width + Min + Max + Nmax + Nzeros + Mode + Mean + Median + Variance + Tendency + CLASS, data = w, importance = TRUE, proximity = TRUE) Type of random forest: classification Number of trees: 500No. of variables tried at each split: 4 OOB estimat
13、e of error rate: 1.32%Confusion matrix: 1 2 3 class.error1 1651 4 0 0.0024169182 20 274 1 0.0711864413 0 3 173 0.017045455,基于OOB的结果,十折交叉验证, Fold=function(Z=10,w,D,seed=1010)+ n=nrow(w)+ d=1:n;dd=list()+ e=levels(w,D)+ T=length(e);set.seed(seed)+ for(i in 1:T)+ d0=dw,D=ei;j=length(d0)+ ZT=rep(1:Z,cei
14、ling(j/Z)1:j+ id=cbind(sample(ZT,length(ZT),d0);ddi=id+ mm=list();for(i in 1:Z)u=NULL;+ for(j in 1:T)u=c(u,ddjddj,1=i,2)+ mmi=u+ return(mm), Z=10;n=nrow(w) mm=Fold(Z,w,D,1010) E=rep(0,Z) for(i in 1:Z)m=mmi+ n1=length(m)a=randomForest(NSPLB+AC+FM+UC+DL+DS+DP+ASTV+MSTV+ALTV+MLTV+Width+Min+Max+Nmax+Nze
15、ros+Mode+Mean+Median+Variance+Tendency+CLASS,data=w-m,)+ Ei=sum(wm,D!=predict(a,wm,)/n1 mean(E)1 0.01319476, a=svm(NSPLB+AC+FM+UC+DL+DS+DP+ASTV+MSTV+ALTV+MLTV+Width+ +Min+Max+Nmax+Nzeros+Mode+Mean+Median+Variance+Tendency+CLASS,+ data=w,kernal=sigmoid) wp=predict(a,w) (z=table(w,D,wp) wp 1 2 3 1 165
16、2 3 0 2 12 281 2 3 2 1 173 (E=(sum(z)-sum(diag(z)/sum(z)1 0.009407338,支持向量机分类-方法一 用程序包e1071中的svm()函数对全部数据拟合,svm函数中的参数kernal,功能:指定在模型建立过程中使用的核函数 作用:解决数据的线性不可分问题 为了提高模型预测的精度,使用核函数对 特征进行变换提高原始特征的维度核函数的种类:线性核函数(linear) 多项式核函数(polynomial)* 径向基核函数(radial basic)* 神经网络核函数(sigmoid)*, a=ksvm(NSPLB+AC+FM+UC+DL
17、+DS+DP+ASTV+MSTV+ALTV+MLTV+Width+ +Min+Max+Nmax+Nzeros+Mode+Mean+Median+Variance+Tendency+CLASS,+ data=w) wp=predict(a,w) (z=table(w,D,wp) wp 1 2 3 1 1652 3 0 2 11 282 2 3 2 1 173 (E=(sum(z)-sum(diag(z)/sum(z)1 0.008936971,支持向量机分类-方法二 用程序包kernlab的ksvm()函数对全部数据拟合,十折交叉验证-svm函数, Fold=function(Z=10,w,D,
18、seed=1010)+ n=nrow(w)+ d=1:n;dd=list()+ e=levels(w,D)+ T=length(e);set.seed(seed)+ for(i in 1:T)+ d0=dw,D=ei;j=length(d0)+ ZT=rep(1:Z,ceiling(j/Z)1:j+ id=cbind(sample(ZT,length(ZT),d0);ddi=id+ mm=list();for(i in 1:Z)u=NULL;+ for(j in 1:T)u=c(u,ddjddj,1=i,2)+ mmi=u+ return(mm), E=rep(0,Z) for(i in 1:
19、Z)m=mmi+ n1=length(m)+ a=svm(NSPLB+AC+FM+UC+DL+DS+DP+ASTV+MSTV+ALTV+MLTV+Width+ +Min+Max+Nmax+Nzeros+Mode+Mean+Median+Variance+Tendency+CLASS,+ data=w-m,kernal=sigmoid)+ Ei=sum(wm,D!=predict(a,wm,)/n1 mean(E)1 0.0169486,十折交叉验证-ksvm函数, E=rep(0,Z) for(i in 1:Z)m=mmi+ n1=length(m)+ a=ksvm(NSPLB+AC+FM+UC+DL+DS+DP+ASTV+MSTV+ALTV+MLTV+Width+ +Min+Max+Nmax+Nzeros+Mode+Mean+Median+Variance+Tendency+CLASS,+ data=w-m,kernal=sigmoid)+ Ei=sum(wm,D!=predict(a,wm,)/n1 mean(E)1 0.01694196,