如何在执行主成分回归后提取组件,以便在R caret包中进一步分析

时间:2013-12-10 21:26:08

标签: pca r-caret

我有一个包含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,或随机森林)

1 个答案:

答案 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。