2015-10-06 3 views
1

поскольку существует несколько методов, доступных в каретке мл, что don't have a built in feature selection, я экспериментировал с rfe.R каретка: разница между поездом и ДВРОМ

Может кто-нибудь объяснить, в чем разница междуtrain() и rfe() это - в стороне от времени обучения и ранжированный список функций? Могут ли дела только train() и наоборот?

Вот мой пример, чтобы проиллюстрировать этот вопрос:

# worker functions 
useRFE <- function(trainctrl) { 
    control <- rfeControl(functions=caretFuncs, 
    method="cv", 
    repeats=5, 
    number=5, 
    returnResamp="final", 
    verbose = TRUE) 


# run the RFE algorithm 
resultsRFE <- 
    rfe(
     training[,1:ncol(iris) - 1], 
     training$Species, 
     sizes = subsets, 
     rfeControl = control, 
     method = "svmRadial", 
     metric = "Accuracy", 
     trControl = trainctrl 
    ) 

    # test 
    predictedClasses <- predict(resultsRFE, testing) 
    confmat <- confusionMatrix(data = predictedClasses$pred, reference = testing$Species) 
    confmat 
    # Balanced Accuracy = 100% 
} 

useTrain <- function(trainctrl) {  
    # train 
    resultsTrain <- train(
     Species ~ ., 
     data = training, 
     method = "svmRadial", 
     metric = "Accuracy", 
     trControl = trainctrl 
) 

    # test 
    predictedClasses <- predict(resultsTrain, testing) 
    confmat <- confusionMatrix(data = predictedClasses, 
     reference = testing$Species) 
    confmat 
    # Balanced Accuracy = 100% 
} 
# load library 
library(caret) 

# load iris data 
data(iris) 

# create datasets 
inTrain <- createDataPartition(y = iris$Species, 
    p = .75, 
    list = FALSE) 

## The output is a set of integers for the rows of Sonar 
## that belong in the training set. 
training <<- iris[ inTrain,] 
testing <<- iris[-inTrain,] 

# select count of features 
subsets <- c(1:ncol(iris)-1) 

# set controls 
trainctrl <- trainControl(
    classProbs= TRUE, 
    method="cv", 
    repeats=5, 
    number=5, 
    verbose = TRUE) 

# compare 
ptm <- proc.time() 
useTrain(trainctrl = trainctrl) 
proc.time() - ptm 
# Accuracy : 0.9167  
# User  System  passed 
# 1.54  0.06  10.27 

ptm <- proc.time() 
useRFE(trainctrl = trainctrl) 
proc.time() - ptm 
# Accuracy : 0.9167 
# User  System  passed 
# 0.86  0.04  24.44 
+0

Что такое 'функция useTrain'? –

+0

смотрите второй фрагмент, где две функции 'useTrain()' и 'useRFE()' определены :) Извините за длинный вопрос, но я хотел бы дать весь код, который необходимо запустить его. – Boern

+1

Лучше определить эти функции раньше, так как люди склонны загружать пример по порядку. –

ответ

1

trainbuilds and tunes более со всеми предсказателей в качестве входных данных. rfe делает исключение, где different predictors are removed рекурсивную функцию таким образом, что пытается оптимизировать производительность модели. Вы можете представить rfe как возможную обертку вокруг train.

Объяснения этих подходов на website.

+0

Имеет ли смысл запустить rfe() сначала для исключения переменных, а затем запустить train() для моделирования? –

Смежные вопросы