r - R中的Boruta箱形图

标签 r boxplot feature-selection

我正在使用 R 中的 Boruta 包进行变量选择。Boruta 在单个图中为我提供了标准系列箱线图,这很有用,但鉴于我有太多预测变量,我希望能够限制出现在 boruta 图中的箱线图的数量。类似于下图的东西。

Boruta plot

基本上,我想在情节的右端“缩放”,但不知道如何使用 boruta 情节对象来做到这一点。

谢谢,

先生

最佳答案

听起来像一个简单的问题,解决方案似乎令人惊讶地复杂。也许有人可以想出一个更快/更优雅的方式......

在这里,我基于源函数 plot.Boruta 创建了一个新函数,并添加了一个函数参数 pars,它采用我们的变量/预测器的名称想加入剧情。

例如,我使用 iris 数据集来拟合模型。

# Fit model to the iris dataset
library(Boruta);
fit <- Boruta(Species ~ ., data = iris, doTrace = 2);

generateCol 函数在 plot.Boruta 内部调用,但不导出,因此在包外不可用。但是,我们需要修改后的 plot.Boruta 例程的函数。

# generateCol is needed by plot.Boruta
generateCol<-function(x,colCode,col,numShadow){
 #Checking arguments
 if(is.null(col) & length(colCode)!=4)
  stop('colCode should have 4 elements.');
 #Generating col
 if(is.null(col)){
  rep(colCode[4],length(x$finalDecision)+numShadow)->cc;
  cc[c(x$finalDecision=='Confirmed',rep(FALSE,numShadow))]<-colCode[1];
  cc[c(x$finalDecision=='Tentative',rep(FALSE,numShadow))]<-colCode[2];
  cc[c(x$finalDecision=='Rejected',rep(FALSE,numShadow))]<-colCode[3];
  col=cc;
 }
 return(col);
}

我们现在修改plot.Boruta,并添加一个函数参数pars,我们通过它过滤我们的变量列表。

# Modified plot.Boruta
plot.Boruta.sel <- function(
    x,
    pars = NULL,
    colCode = c('green','yellow','red','blue'),
    sort = TRUE,
    whichShadow = c(TRUE, TRUE, TRUE),
    col = NULL, xlab = 'Attributes', ylab = 'Importance', ...) {

    #Checking arguments
    if(class(x)!='Boruta')
        stop('This function needs Boruta object as an argument.');
    if(is.null(x$ImpHistory))
        stop('Importance history was not stored during the Boruta run.');

    #Removal of -Infs and conversion to a list
    lz <- lapply(1:ncol(x$ImpHistory), function(i)
        x$ImpHistory[is.finite(x$ImpHistory[,i]),i]);
    colnames(x$ImpHistory)->names(lz);

    #Selection of shadow meta-attributes
    numShadow <- sum(whichShadow);
    lz <- lz[c(rep(TRUE,length(x$finalDecision)), whichShadow)];

    #Generating color vector
    col <- generateCol(x, colCode, col, numShadow);

    #Ordering boxes due to attribute median importance
    if (sort) {
        ii <- order(sapply(lz, stats::median));
        lz <- lz[ii];
        col <- col[ii];
    }

    # Select parameters of interest
    if (!is.null(pars)) lz <- lz[names(lz) %in% pars];

    #Final plotting
    graphics::boxplot(lz, xlab = xlab, ylab = ylab, col = col, ...);
    invisible(x);
}

现在我们需要做的就是调用 plot.Boruta.sel 而不是 plot,并指定我们想要包含的变量。

plot.Boruta.sel(fit, pars = c("Sepal.Length", "Sepal.Width"));

enter image description here

关于r - R中的Boruta箱形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47342553/

相关文章:

r - 相当于 R 中的egrep -o ".{0,4}TEST.{0,8}"

Gnuplot - 比较一张图片中的多个箱线图对

machine-learning - 使用weka对传感器数据进行分类

scikit-learn - 多标签分类的特征选择(scikit-learn)

R将数据框转换为JSON

r - 无法为 geom_密度_ridges 中的抖动点着色

r - 使用 rpart : How to get more variability on predictions?

python - 分组后如何排列seaborn swarmplot和各自箱线图中的点

python - 如何在一个循环中绘制列的箱线图?

python - 解释 sklearn 集成方法中的 feature_importances_