我面临着一个高维(样本=148,特征=20000)、有监督的二元分类问题。我想用一组分类器来解决这个问题,它将使用多数票进行分类。为了避免严重的过拟合,我想在插入符号中使用递归特征消除协议(可选:一些单变量选择)。然而,这似乎会导致相对较高的运行时间。我在一个有 16 个内核的节点上运行了以下代码大约 10 天。
trainRows <- createDataPartition(classes, p=.80, list=FALSE)
trainData <- X[trainRows, ]
testData <- X[-trainRows, ]
trainClasses <- classes[trainRows]
testClasses <- classes[-trainRows]
ctrl_rfe <- rfeControl(method = "repeatedcv",
repeats = 5,
verbose = TRUE,
functions = caretFuncs,
allowParallel = TRUE)
ctrl_train <- trainControl(method = "adaptive_cv",
classProbs = TRUE,
repeats = 5,
summaryFunction = twoClassSummary,
adaptive = list(min = 5, alpha = 0.05,
method = "gls", complete = TRUE),
allowParallel = TRUE)
radCostSVM_rfe <- rfe(trainData, trainClasses,
sizes = seq(1, ncol(trainData), 100),
rfeControl = ctrl_rfe,
trControl = ctrl_train,
method = "svmRadialCost",
tuneLength = 10)
为了加快速度,我使用了自适应重采样并在每次 rfe 迭代中选择 100 个特征。除了减少交叉验证中的折叠大小和重复次数之外,有没有办法进一步加快速度?SBF(通过过滤选择)与该方法相比如何?像 PCA 这样的简单降维技术对我来说是没有选择的,因为除了不受监督之外,它还会以线性组合表示我的特征,这会降低我的结果的可解释性。
任何帮助和经验分享将不胜感激。