Выбор функций с помощью курсора rfe и обучение другим методом

Прямо сейчас я пытаюсь использовать функцию 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. Есть ли способ сделать такое с rfe?


person Kévin Autin    schedule 20.08.2018    source источник


Ответы (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

person missuse    schedule 20.08.2018