在一个图中绘制插入符号的多个RFE结果

时间:2019-10-04 09:42:35

标签: r r-caret rfe

我使用了以ROC为度量标准的插入符号的RFE算法,并希望绘制结果。这很好用,但是现在我想将两个结果放在一个图中,但我不确定是否有一个简单的解决方案,甚至可能。很抱歉,如果这是一个愚蠢的问题,并且在R中没有太高级。是否有解决方案?

这是我的代码:

# define the control using a random forest selection function
rfFuncs$summary <- twoClassSummary
control <- rfeControl(functions=rfFuncs, verbose = TRUE, method="cv", number=10)
# run the RFE algorithm
results_rfe_roc_deliv <- rfe(data_deliverable[,1:91], data_deliverable[,92], sizes=c(1:91), rfeControl=control ,metric = 'ROC')
# summarize the results
print(results_rfe_roc_deliv)
# list the chosen features
predictors(results_rfe_roc_deliv)


results_rfe_roc_non_deliv <- rfe(data_non_deliverable[,1:91], data_non_deliverable[,92], sizes=c(1:91), rfeControl=control ,metric = 'ROC')
# summarize the results
print(results_rfe_roc_non_deliv)
# list the chosen features
predictors(results_rfe_roc_non_deliv)
# plot the results

plot(results_rfe_roc_deliv, type=c("g", "o"))
plot(results_rfe_roc_non_deliv, type=c("g", "o"))

从代码生成的法线图: Plot generated from code

1 个答案:

答案 0 :(得分:0)

对于想知道如何轻松实现此目的的任何人,请从对象中提取结果,然后通过ggplot软件包对其进行绘制。我的解决方案有点复杂,但是您可以轻松地根据需要对其进行修改。代码是不言自明的。这是我的方法:


rfe_result_export <- results_rfe_roc_deliv$results
names(rfe_result_export)[names(rfe_result_export) == 'ROC'] <- 'ROC.deliv'
rfe_result_export <- rfe_result_export[,-c(3:7)]
rfe_result_export$ROC.non.deliv <- results_rfe_roc_non_deliv$results$ROC
#flag data
rfe_result_export$highlight.deliv <- FALSE
rfe_result_export$highlight.non.deliv <- FALSE
#points of interest
rfe_result_export$highlight.deliv[c(40,66)] <- TRUE
rfe_result_export$highlight.non.deliv[c(48,86)] <- TRUE

ggplot(rfe_result_export, aes(Variables)) +
  geom_point(aes(y=ROC.non.deliv, colour="blue")) +
  geom_point(aes(y=ROC.deliv, colour="black")) + 
  #points of interest
  geom_point(data = subset(rfe_result_export, highlight.deliv == TRUE), aes(y=ROC.deliv, colour="red")) +
  geom_point(data = subset(rfe_result_export, highlight.non.deliv == TRUE), aes(y=ROC.non.deliv, colour="red")) +
  scale_color_manual(values =c("blue","black","red"), labels = c("Deliverable",'Non-Delivarble', "Points of interest")) +
  ylab("ROC value") + ggtitle("Results of Recursive Feature Elimination") +
  scale_x_continuous(breaks = scales::pretty_breaks(n = 10))

这将创建以下情节: rfe plot