如果你想在你的 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。