#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! Хотя этот фрагмент кода может решить проблему, он не объясняет, почему или как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , поскольку это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причин вашего предложения по коду.