我想使用主成分回归找到必要成分,然后提取这些成分以进行进一步的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。