PCA для KNN: параметр предварительной обработки в каретке

#r #machine-learning #pca #knn #feature-selection

#r #машинное обучение #pca #knn #выбор функции

Вопрос:

Я провожу knn регрессию своих данных и хотел бы:

а) перекрестная проверка через repeatedcv для нахождения оптимального k ;

б) при построении knn модели используйте PCA пороговое значение уровня 90% для уменьшения размерности.

 library(caret)
library(dplyr)
set.seed(0)
data = cbind(rnorm(15, 100, 10), matrix(rnorm(300, 10, 5), ncol = 20)) %>% 
  data.frame()

colnames(data) = c('True', paste0('Day',1:20))
tr = data[1:10, ] #training set
tt = data[11:15,] #test set

train.control = trainControl(method = "repeatedcv", number = 5, repeats=3)
k = train(True ~ .,
          method     = "knn",
          tuneGrid   = expand.grid(k = 1:10),
          trControl  = train.control, 
          preProcess = c('scale','pca'),
          metric     = "RMSE",
          data       = tr)
  

Мой вопрос: в настоящее время пороговое значение PCA по умолчанию составляет 95% (не уверен), как я могу изменить его на 80%?

Комментарии:

1. Возможно, вы захотите использовать, method="adaptive_cv" где вы можете установить alpha внутри adaptive=list(min=5, alpha=0.20, method="gls", complete=TRUE) ?

2. Джей, спасибо за твой совет! Кажется, вы предложили мне изменить параметры перекрестной проверки, однако, можно ли изменить параметр для pca ?

3. Я видел эту ссылку stats.stackexchange.com/a/46256/244949 и это решение, похоже, работает. Например, tc = trainControl(method = "cv", preProcOptions = list(thresh=0.8)) затем в knn модели ` train(y, method=»knn», trControl = tc, preProcess= c («масштаб», «центр», «pca»)) . Do you think this will mix up the parameters since have three параметры предварительной обработки`?

Ответ №1:

Вы можете попробовать добавить аргумент preProcOptions в trainControl

 train.control = trainControl(method = "repeatedcv", number = 5, repeats=3, preProcOptions = list(thresh = 0.80))
  

Комментарии:

1. Добро пожаловать в Stack Overflow! Хотя этот фрагмент кода может решить проблему, он не объясняет, почему или как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , поскольку это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причин вашего предложения по коду.