如何在进一步的SVR分析中使用PCR选择的主要成分?

时间:2019-05-04 13:55:47

标签: r svm pca

我想使用主成分回归找到必要成分,然后提取这些成分以进行进一步的SVR分析,但是这样做时遇到了一些问题。

首先尝试,我遵循以下建议:How to extract components after performing principal component regression for further analysis in R caret package 这是我的代码:

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

第二次尝试,我只是从pcr结果中提取[[scores]],然后在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

也许以上两种方式都不是好的方法。请给我一些有关如何在进一步的svr分析中使用pcr结果的建议,或者只是帮助我解决上述错误。

谢谢, -C.T。

编辑1: 我只是弄清楚,使用method = "svmLinear"时,.sigma中不需要svrGrid。消除sigma后,我可以成功获得结果。 希望这对其他人有帮助。 -C.T。

0 个答案:

没有答案