Я хочу использовать принцип регрессии основных компонентов, чтобы найти важные компоненты, а затем извлечь эти компоненты, чтобы применить дальнейший анализ SVR, но у меня возникли некоторые проблемы при этом.
Во-первых, я следую советам: Как извлечь компоненты после выполнения регрессии главных компонентов для дальнейшего анализа в пакете R caret
А вот и мой код:
library(caret)
library(tidyverse)
library(pls)
library(e1071)
library(kernlab)
# Load the data
data("Boston", package = "MASS")
# Split the data into training and test set
set.seed(123)
training.samples <- Boston$medv %>% createDataPartition(p = 0.8, list = FALSE)
train.data <- Boston[training.samples, ]
test.data <- Boston[-training.samples, ]
set.seed(1)
sigDist <- sigest(medv~., data = train.data, frac = 1)
svrGrid <- expand.grid(.sigma = sigDist, .C = 2^(-2:7))
set.seed(2)
svrPCR <- train(medv~., data = train.data,
method = "svmLinear",
tuneGrid = svrGrid,
preProcess = c("center","scale","pcr"), # if center and scale needed
trControl=trainControl("LOOCV"))
Вот моя ошибка:
Error: The tuning parameter grid should have columns C
Вторая попытка, я просто извлекаю [[scores]]
из результатов pcr, затем использую их в svr:
pcr_model <- pcr(medv~., data = train.data, scale =TRUE, validation = "LOO")
engivaluepcr=as.data.frame(pcr_model[['scores']][,1:13])
engivaluepcr=cbind(train.data$medv,engivaluepcr)
setnames(engivaluepcr,"train.data$medv","medv")
pcrsvr <- svm(medv ~ ., engivaluepcr, validation = "LOO",kernel='linear')
pred_test2 <-predict(pcrsvr,test.data)
А вот и моя новая ошибка:
Error in eval(predvars, data, env) : object 'Comp 1' not found
Может быть, оба эти способа не являются хорошими. Пожалуйста, дайте мне несколько советов о том, как использовать результаты pcr в дальнейшем анализе svr, или, возможно, просто помогите мне решить эти ошибки выше.
Спасибо,
-C.T.
Редактировать 1:
Я просто понимаю, что при использовании method = "svmLinear"
нам не нужно .sigma
в svrGrid
. После устранения сигмы я могу успешно получить свой результат.
Надеюсь, что это может быть полезно для других.
-C.T.