【问题标题】:Feature selection with caret rfe and training with another method使用插入符号 rfe 进行特征选择并使用另一种方法进行训练
【发布时间】:2023-03-04 01:42:01
【问题描述】:

现在,我正在尝试使用 Caret rfe 函数来执行特征选择,因为我处于 p>>n 的情况,并且大多数不涉及某种正则化的回归技术都不能用得很好。我已经使用了一些正则化技术(套索),但我现在想尝试的是减少我的特征数量,以便我能够运行,至少体面地,任何类型的回归算法。

control <- rfeControl(functions=rfFuncs, method="cv", number=5)
model <- rfe(trainX, trainY, rfeControl=control)
predict(model, testX)

现在,如果我这样做,将运行使用随机森林的特征选择算法,然后根据 5 折交叉验证,将具有最佳特征集的模型用于预测对吧?

我对这里的两件事感到好奇: 1)有没有一种简单的方法来获取一组特征,并在其上训练另一个用于特征选择的函数?例如,将特征数量从 500 个减少到 20 个左右,这看起来更重要,然后应用 k-最近邻域。

我正在想象一种简单的方法,看起来像这样:

control <- rfeControl(functions=rfFuncs, method="cv", number=5)
model <- rfe(trainX, trainY, method = "knn", rfeControl=control)
predict(model, testX)

2) 有没有办法调整特征选择算法的参数?我想对 mtry 的值进行一些控制。与使用 Caret 中的 train 函数时传递值网格的方式相同。有没有办法用 rfe 做这样的事情?

【问题讨论】:

    标签: r r-caret feature-selection rfe


    【解决方案1】:

    这是一个关于如何使用内置模型执行 rfe 的简短示例:

    library(caret)
    library(mlbench) #for the data
    data(Sonar)
    
    rctrl1 <- rfeControl(method = "cv",
                         number = 3,
                         returnResamp = "all",
                         functions = caretFuncs,
                         saveDetails = TRUE)
    
    model <- rfe(Class ~ ., data = Sonar,
                 sizes = c(1, 5, 10, 15),
                 method = "knn",
                 trControl = trainControl(method = "cv",
                                          classProbs = TRUE),
                 tuneGrid = data.frame(k = 1:10),
                 rfeControl = rctrl1)
    
    model
    #output
    Recursive feature selection
    
    Outer resampling method: Cross-Validated (3 fold) 
    
    Resampling performance over subset size:
    
     Variables Accuracy  Kappa AccuracySD KappaSD Selected
             1   0.6006 0.1984    0.06783 0.14047         
             5   0.7113 0.4160    0.04034 0.08261         
            10   0.7357 0.4638    0.01989 0.03967         
            15   0.7741 0.5417    0.05981 0.12001        *
            60   0.7696 0.5318    0.06405 0.13031         
    
    The top 5 variables (out of 15):
       V11, V12, V10, V49, V9
    
    model$fit$results
    #output
        k  Accuracy     Kappa AccuracySD   KappaSD
    1   1 0.8082684 0.6121666 0.07402575 0.1483508
    2   2 0.8089610 0.6141450 0.10222599 0.2051025
    3   3 0.8173377 0.6315411 0.07004865 0.1401424
    4   4 0.7842208 0.5651094 0.08956707 0.1761045
    5   5 0.7941775 0.5845479 0.07367886 0.1482536
    6   6 0.7841775 0.5640338 0.06729946 0.1361090
    7   7 0.7932468 0.5821317 0.07545889 0.1536220
    8   8 0.7687229 0.5333385 0.05164023 0.1051902
    9   9 0.7982468 0.5918922 0.07461116 0.1526814
    10 10 0.8030087 0.6024680 0.06117471 0.1229467
    

    更多定制见:

    https://topepo.github.io/caret/recursive-feature-elimination.html

    【讨论】:

      猜你喜欢
      • 2016-04-26
      • 2017-03-09
      • 2021-04-20
      • 2014-02-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2018-05-23
      相关资源
      最近更新 更多