前言:
前一段时间,导师要求我去使用随机森林帮他做一个分类,他给的样本是两个mat文件,应该是一个正样本,一个负样本,然后就开始了使用R做随机森林的探索之旅。
其中遇到的问题也是多种多样,包括数据处理,类型的转换,最终也让自己对randomForest的输入要求有了一个比较好的理解。
数据:
准备工作:
首先当然是安装好R中随机森林包了,输入命令:install.packages("randomForest")
随后我便查看了一下randomForest的帮助文档:原谅我性急,直接看操作示例
这便是使用R做随机森林分类的一个示例,打开iris数据显示改数据集有150个样本,分别是setosa、versicolor、 virginica各50个,每种花都有四种特征## Classification: ##data(iris) set.seed(71) iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE, proximity=TRUE) print(iris.rf) ## Look at variable importance: round(importance(iris.rf), 2)
看到的结果是:
结果显示我们做的确实是分类,分类错误率为4%,细节Confusion matrix中有指出。
当然,随机森林给我们很重要的一个结果就是各个特征的MeanDecreaseGini和MeanDecreaseAccuracy了,这在一定程度上表达了特征的相对重要性,
数值大的可以理解为相对重要一点(在这里仅仅是个人理解,欢迎各位批评指正,交流)。
做到这一步,是很开心的了,示例看的差不多了,是时候处理自己的问题了。
数据的读入
使用R.matlab包,函数readMat可以读入Mat文件数据。
数据的处理
这里可以说是本篇文章的大头了。下面详细介绍数据处理的过程:
以上为数据从mat到最后可以成功使用randomForest进行分类的处理过程,个人认为没有可以省略的步骤(希望熟悉R的朋友帮忙指出改进的地方)。
附上R源码
library(R.matlab);
library(randomForest);
###正样本
po=readMat("po_sample.mat");
po=data.frame(po);
po=as.matrix(po);
po=po[1:1000,];
po_num=dim(po)[1];
po_feature=dim(po)[2];
po_tag=matrix(as.factor(1),nrow=po_num,ncol=1);
po=data.frame(po);
po_tag=data.frame(po_tag);
po_samp=cbind(po,po_tag);
colnames(po_samp)=c(1:po_feature);
###负样本
ne=readMat("ne_sample.mat");
ne=data.frame(ne);
ne=as.matrix(ne);
ne=ne[1:1000,];
ne_num=dim(ne)[1];
ne_feature=dim(ne)[2];
ne_tag=matrix(as.factor(-1),nrow=ne_num,ncol=1);
ne=data.frame(ne);
ne_tag=data.frame(ne_tag);
ne_samp=cbind(ne,ne_tag);
colnames(ne_samp)=c(1:ne_feature);
#样本
sample=rbind(po_samp,ne_samp);
colnames(sample)=c(1:ne_feature-1,"class");
sample=data.frame(sample);
#随机森林
rf=randomForest(class~.,data=sample,importance=TRUE,proximity=TRUE);
print(rf);
#变量重要性
ipor=round(importance(rf),2)
ipor感想
在使用分类函数的走了不少弯路,起初没有注意到randomForest做分类时对样本与标签的要求,就是样本必须都是numeric(数值)类型,而标签必须是factor(因子,类别型向量),否则randomForest将做回归,这也是在做分类时遇到的问题,而且很长时间没有找到原因,结果总是做回归,importance指标自然是randomForest做回归时的指标IncMSE和IncNodePurity,而不是做分类时出现的指标MeanDecreaseAccuracy和MeanDecreaseGini,虽然在结论上可能影响并不大,但是有强迫症,必须把这个问题解决。
本文介绍了使用R进行随机森林分类时的数据处理步骤,包括数据读入、数据处理,以及分类和回归的实际操作。在实践中遇到了数据类型转换和MAT模块的应用问题,通过解决这些问题,对随机森林模型进行了深入理解。
1902

被折叠的 条评论
为什么被折叠?



