小编Raf*_* OR的帖子

随机森林的varImp(插入符号)和重要性(randomForest)之间的差异

我不明白随机森林模型的varImp函数(caret包)和importance函数(randomForest包)之间的区别是什么:

我计算了一个简单的RF分类模型,当计算变量重要性时,我发现两个函数的预测变量的"排名"并不相同:

这是我的代码:

rfImp <- randomForest(Origin ~ ., data = TAll_CS,
                       ntree = 2000,
                       importance = TRUE)

importance(rfImp)

                                 BREAST       LUNG MeanDecreaseAccuracy MeanDecreaseGini
Energy_GLCM_R1SC4NG3        -1.44116806  2.8918537            1.0929302        0.3712622
Contrast_GLCM_R1SC4NG3      -2.61146974  1.5848150           -0.4455327        0.2446930
Entropy_GLCM_R1SC4NG3       -3.42017102  3.8839464            0.9779201        0.4170445
...

varImp(rfImp)
                                 BREAST        LUNG
Energy_GLCM_R1SC4NG3         0.72534283  0.72534283
Contrast_GLCM_R1SC4NG3      -0.51332737 -0.51332737
Entropy_GLCM_R1SC4NG3        0.23188771  0.23188771
...
Run Code Online (Sandbox Code Playgroud)

我以为他们使用相同的"算法"但我现在不确定.

编辑

为了重现该问题,ionosphere可以使用数据集(kknn包):

library(kknn)
data(ionosphere)
rfImp <- randomForest(class ~ ., data = ionosphere[,3:35],
                       ntree = 2000,
                       importance = TRUE) …
Run Code Online (Sandbox Code Playgroud)

r feature-selection random-forest r-caret

11
推荐指数
2
解决办法
1万
查看次数

从R中的交叉验证(训练)数据绘制ROC曲线

我想知道是否有一种方法可以根据caret包装生成的SVM-RFE模型的交叉验证数据绘制平均ROC曲线.

我的结果是:

Recursive feature selection

Outer resampling method: Cross-Validated (10 fold, repeated 5 times) 

Resampling performance over subset size:

 Variables    ROC   Sens   Spec Accuracy  Kappa  ROCSD SensSD SpecSD AccuracySD KappaSD Selected
         1 0.6911 0.0000 1.0000   0.5900 0.0000 0.2186 0.0000 0.0000     0.0303  0.0000         
         2 0.7600 0.3700 0.8067   0.6280 0.1807 0.1883 0.3182 0.2139     0.1464  0.3295         
         3 0.7267 0.4233 0.8667   0.6873 0.3012 0.2020 0.3216 0.1905     0.1516  0.3447         
         4 0.6989 0.3867 0.8600   0.6680 0.2551 0.2130 0.3184 0.1793     0.1458  0.3336         
         5 0.7000 0.3367 …
Run Code Online (Sandbox Code Playgroud)

r roc auc r-caret

9
推荐指数
1
解决办法
7587
查看次数

使用ROCR和pROC(R)计算平均AUC的差异

我正在使用由caret软件包生成的SVM-RFE模型处理交叉验证数据(重复10倍,重复5次)。我知道该caret软件包pROC在计算指标时可以与软件包一起使用,但是我需要使用ROCR软件包才能获得平均ROC。但是,我注意到使用每个软件包时的平均AUC值不相同,因此我不确定是否应区分使用两个软件包。

我用来证明的代码是:

predictions_NG3<-list()
labels_NG3<-list()

optSize <- svmRFE_NG3$optsize

resamples<-(split(svmRFE_NG3$pred,svmRFE_NG3$pred$Variables))
resamplesFOLD<-(split(resamples[[optSize]],resamples[[optSize]]$Resample))

auc_pROC <- vector()
auc_ROCR <- vector()

for (i in 1:50){
  predictions_NG3[[i]]<-resamplesFOLD[[i]]$LUNG
  labels_NG3[[i]]<-resamplesFOLD[[i]]$obs

  #WITH pROC
  rocCurve <- roc(response = labels_NG3[[i]],
                  predictor = predictions_NG3[[i]],
                  levels = c("BREAST","LUNG")) #LUNG POSITIVE

  auc_pROC <- c(auc_pROC,auc(rocCurve))

  #WITH ROCR
  pred_ROCR <- prediction(predictions_NG3[[i]], labels_NG3[[i]],
                          label.ordering = c("BREAST","LUNG")) #LUNG POSITIVE

  auc_ROCR <- c(auc_ROCR,performance(pred_ROCR,"auc")@y.values[[1]])

}

auc_mean_pROC <- mean(auc_pROC)
auc_sd_pROC <- sd(auc_pROC)
auc_mean_ROCR <- mean(auc_ROCR)
auc_sd_ROCR <- sd(auc_ROCR)
Run Code Online (Sandbox Code Playgroud)

结果略有不同:

  auc_mean_pROC auc_sd_pROC auc_mean_ROCR auc_sd_ROCR
1 …
Run Code Online (Sandbox Code Playgroud)

r roc auc r-caret proc-r-package

3
推荐指数
1
解决办法
669
查看次数