2

我有一个包含 151 个变量的数据集,这些变量被发现具有很高的共线性,因此我通过执行以下操作对其进行了主成分回归:-

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,或随机森林)

4

1 回答 1

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 相对的监督方法,那么您必须在插入符号中自定义这样的模型(参见此处)。有关示例的更多信息,您也可以在此处研究代码,您会发现两种自定义模型,一种用于 PLS-RF 和 PLS-LDA。

于 2014-01-14T19:45:12.277 回答