Как использовать основные компоненты, выбранные методом ПЦР, в дальнейшем анализе УВО? - PullRequest
2 голосов
/ 04 мая 2019

Я хочу использовать принцип регрессии основных компонентов, чтобы найти важные компоненты, а затем извлечь эти компоненты, чтобы применить дальнейший анализ 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.

...