我有一个包含151个变量的数据集,发现它们的colinearility很高,因此我通过执行以下操作对其执行了主成分回归: -
ctrl <- trainControl(method = "repeatedcv", repeats = 10, savePred = T)
model <- train(RT..seconds.~., data = cadets100, method = "pcr", trControl = ctrl)
给了我: - RMSE = 65.7 R平方0.443
我只是想知道我是怎么去提取这些组件的,所以我可以说应用进一步的分析(即在它上面执行SVM,或随机森林)
答案 0 :(得分:1)
如果你想在PC的分数上做SVM,RF或任何第二分类器,那么有一个快捷方式,而不是试图重新发明caret
包。
您可以执行以下操作:
set.seed(1)
sigDist <- sigest(RT..seconds.~., data = cadets100, frac = 1)
svmGrid <- expand.grid(.sigma = sigDist, .C = 2^(-2:7))
set.seed(2)
svmPCAFit <- train(RT..seconds.~.,
method = "svmRadial",
tuneGrid = svmrGrid,
preProcess = c("center","scale","pca"), # if center and scale needed
trControl = ctrl)
这样,pca将在每个测试折叠上完成,并且将使用分数代替SVM分类器的观察。所以你不需要自己做,插入符会自动为你做。您在preProcess中传递的所有内容都将应用于新数据集,无论是CV折叠测试还是拟合保持测试集。
但是,如果你想在将分数传递给下一个分类器之前执行PLS(这是一种监督方法而不是PCA),那么你必须在插入符中自定义这样的模型(参见here)。有关示例的更多信息,您可以学习代码here,在那里您可以找到两个自定义模型,一个用于PLS-RF,另一个用于PLS-LDA。