走在学习的路上

欢迎一起讨论~

R:特征选择算法

library(Boruta)
traindata=read.csv("train.csv",header = T,stringsAsFactors = F)
#gsub功能被用来将一种表达式用另一种方式代替
str(traindata)
names(traindata)=gsub("_","",names(traindata))
#检查一下数据集是否有缺失值
summary(traindata)
#用NA代替所有的空白
traindata[traindata==""]=NA
#这里处理缺失值的最简单的方法,即成列删除,更先进的缺失值插补的方法和包可以在这里找到
traindata=traindata[complete.cases(traindata),]

convert=c(2:6,11:13)
traindata[,convert]=data.frame(apply(traindata[convert],2,as.factor))


#现在要实施和检查包的性能
boruta.train=Boruta(Loan_Status~.-Loan_ID,data=traindata,doTrace=2)
print(boruta.train)

plot(boruta.train, xlab = "", xaxt = "n")

lz<-lapply(1:ncol(boruta.train$ImpHistory),function(i)
  boruta.train$ImpHistory[is.finite(boruta.train$ImpHistory[,i]),i])

names(lz) <- colnames(boruta.train$ImpHistory)

Labels <- sort(sapply(lz,median))

axis(side = 1,las=2,labels = names(Labels),
     at = 1:ncol(boruta.train$ImpHistory), cex.axis =  0.7)

##蓝色的盒状图对应一个阴影属性的最小、平均和最大Z分数。红色、黄色和绿色的盒状图分别代表拒绝、暂定和确认属性的Z分数。

##现在我们对实验性属性进行判定。实验性属性将通过比较属性的Z分数中位数和最佳阴影属性的Z分数中位数被归类为确认或拒绝。让我们开始吧。

final.boruta <- TentativeRoughFix(boruta.train)
print(final.boruta)

#现在我们要得出结果了。让我们获取确认属性的列表。
getSelectedAttributes(final.boruta, withTentative = F)

#我们将创建一个来自Boruta最终结果的数据框架
boruta.df <- attStats(final.boruta)








# 加载扩展包和数据集mdrr,得到自变量集合mdrrDescr和因变量mdrrClass
library(caret)
data(mdrr)
# 先删去近似于常量的变量
zerovar <- nearZeroVar(mdrrDescr)
newdata1 <- mdrrDescr[,-zerovar]
# 再删去相关度过高的自变量
descrCorr <- cor(newdata1)
highCorr <- findCorrelation(descrCorr, 0.90)
newdata2 <- newdata1[, -highCorr]
# 数据预处理步骤(标准化,缺失值处理)
Process <- preProcess(newdata2)
newdata3 <- predict(Process, newdata2)
# 用sbf函数实施过滤方法,这里是用随机森林来评价变量的重要性
data.filter <- sbf(newdata3,mdrrClass,
                   sbfControl = sbfControl(functions=rfSBF,
                                           verbose=F,
                                           method='cv'))
# 根据上面的过滤器筛选出67个变量
x <- newdata3[data.filter$optVariables]
# 再用rfe函数实施封装方法,建立的模型仍是随机森林
profile <- rfe(x,mdrrClass,
               sizes = c(10,20,30,50,60),
               rfeControl = rfeControl(functions=rfFuncs
                                       ,method='cv'))
# 将结果绘图,发现20-30个变量的模型精度最高
plot(profile,type=c('o','g'))
阅读更多
个人分类: R
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭