【问题标题】:Feature Importance in (Caret) package(Caret) 包中的功能重要性
【发布时间】:2022-01-17 03:36:56
【问题描述】:

我使用 Caret 包应用了四种 ML 方法(线性、XGBoost、RF、SVM)。 我使用 varImp 函数得到了特征的重要性。 插入符号::varImp(xgb1, scale = TRUE)

但是,特征重要性的总和不会加到 1。我想知道是否可以使用不同的函数将所有特征重要性加到 1。

谢谢,

【问题讨论】:

    标签: r r-caret


    【解决方案1】:

    根据varImp()documentationcaret::varImp() 函数中的scale 参数将变量重要性值从 0 缩放到 100。

    没有可重复的示例,我们将使用 Elements of Statistical Learning 一书中的元音数据生成随机森林,并通过将每个变量重要性数除以总和来重新调整变量重要性数据,使总和等于 1所有重要的数字。

    library(readr)
    vowel.train <- subset(read_csv("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/vowel.train"),
                          select = -row.names) 
    vowel.test <- subset(read_csv("https://web.stanford.edu/~hastie/ElemStatLearn/datasets/vowel.test"),
                         select = -row.names)
    library(caret)
    library(randomForest)
    vowel.train$y <- as.factor(vowel.train$y)
    vowel.test$y <- as.factor(vowel.test$y)
    set.seed(33833)
    tr1Control <- trainControl(method="boot")
    modFit <- train(y ~ .,method="rf",trControl=tr1Control,data=vowel.train)
    # Variable Importance: caret function, extract importance data frame & rescale
    v <- varImp(modFit,scale = TRUE)[["importance"]]
    v$Overall <- v$Overall / sum(v$Overall)
    v
    

    ..和输出:

    > v
             Overall
    x.1  0.318660495
    x.2  0.327734091
    x.3  0.018931795
    x.4  0.021533916
    x.5  0.126744531
    x.6  0.089627688
    x.7  0.000000000
    x.8  0.067066743
    x.9  0.027072197
    x.10 0.002628545
    

    ...并证明 sum(v$Overall) 现在是 1:

    sum(v$Overall)
    
    > sum(v$Overall)
    [1] 1
    

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 2020-05-12
      • 2018-05-21
      • 2020-10-07
      • 1970-01-01
      • 2021-07-27
      • 2021-10-23
      • 2018-06-05
      • 2014-02-12
      相关资源
      最近更新 更多