使用Boruta进行特征选择

特征选择(feature selsection)是机器学习最重要的步骤,如果说算法决定了模型的下线,那么特征就决定模型的上线;另外,需要注意不是说用尽可能多的特征得出的模型表现越好,有些时候数个特征就能得到理想的结果。
Boruta采用随机森林的办法抽取特征、打乱特征顺序计算特征的重要性

#1.安装特征选择包Boruta
if(!requireNamespace('Boruta',quietly=T))
  install.packages('Boruta')
library('Boruta')
# ?Boruta  #查看使用方法

#2.理解数据
#下载mlbench(Machine Learning Benchmark Problems)数据集
if(!requireNamespace('mlbench',quietly=T))
  install.packages('mlbench')
library('mlbench') 
data('Ozone') #载入mlbench的数据集Ozone
help(Ozone)  #查看数据集内容
#这是一份洛杉矶在1976年臭氧污染的数据,数据框格式,366个观测值(每一个观测值即是1天),13个变量(包括第几天,每天中最大的1小时平均臭氧量、风速、湿度、温度、能见度等)。想要研究的问题就是如何预测日最大臭氧量。
summary(Ozone)  #每个特征的五分位数统计
rawdim<-dim(Ozone)  #查看有多少行多少列数据
head(Ozone)  #查看前10行数据,发现在7、8、9等列存在缺失值
Ozone <- na.omit(Ozone)  #删掉含有缺失值的观测值(行),只要存在缺失值就去掉(NA>=1);对于空值,可以先赋值给NA,再按此法处理
head(Ozone) #检查去掉缺失值后的数据
rawdim[1]-dim(Ozone)[1]  #可知去掉了163行含有NA的缺失值

#3.Feature selecton
set.seed(1)  #设置随机数种子,一个特定的种子可以产生一个特定的伪随机序列,便于在线这里的结果
Boruta.Ozone <- Boruta(V4 ~ ., data = Ozone, doTrace = 2, maxRuns = 500,getImp = getImpRfZ)  
  #V4 ~ .,待分析模型的公式,左边是因变量,右边是自变量,'.'表示除开因变量列的其他所有列
  #data = Ozone,公式要分析的数据
  #doTrace =2,唠叨模式,0不唠叨,3最唠叨(详细)
  #maxRuns = 500,计算importance的最大迭代次数,当要保留暂时属性时(Tentative feature)应提高该值。
  #getImp = getImpRfZ,用来衡量属性重要性的计算方法,默认使用随机森林整合平均下降精度的Z-scores,该值越大说明该属性越重要。
Boruta.Ozone  #报告整体决策情况
#str(Boruta.Ozone)  #str()展示Boruta数据对象的内部结构
#Boruta对象最重要的是finalDecision,包含3个类型:Tentative暂时/待定特征(不足以接受或者拒绝),Confirmed接受的特征,Rejected拒绝特征
#Boruta.Ozone$finalDecision  #查看每个特征的最终决定情况(去或留)
#Boruta.Ozone[["finalDecision"]][["V1"]]  #查看特征1的(第一列)的决定情况,list取值操作
#Boruta.Ozone[["ImpHistory"]]  #记录着每个特征的重要性得分
write.table(Boruta.Ozone$finalDecision,'FinalDecision.txt',sep="\t",quote=F,col.names=F)
plot(Boruta.Ozone)  #横轴是feature,纵轴是重要性得分,分越高,说明该特征越重要,红色boxplot表示rejected,绿色块confirmed
#由结果可知,V9,V8,V12即'Temperature (degrees F) measured at El Monte, CA','Temperature (degrees F) measured at Sandburg, 'Temperature (degrees F) measured at Sandburg, CA','Inversion base temperature (degrees F) at LAX',说明温度对于预测日最大臭氧量影响最大。
#同时会输出3个额外的表征,shadowMin,shadMean,shadMax是判别FinalDecision的依据
confirmedFormula<-getConfirmedFormula(Boruta.Ozone)  #获得confirmed特征的公式,用于后续的建模
Confirmed.Boruta.Ozone <- Boruta(confirmedFormula, data = Ozone, doTrace = 2, maxRuns = 500,getImp = getImpRfZ)
Confirmed.Boruta.Ozone  #验证之前的结果
发布了23 篇原创文章 · 获赞 18 · 访问量 6560

猜你喜欢

转载自blog.csdn.net/qq_42491125/article/details/97791083