r - 如何使用 R 中的机器学习和 Caret 包在新数据集上测试调整后的 SVM 模型?

标签 r machine-learning svm r-caret training-data

伙计们!

我是机器学习方法的新手,对此有疑问。我尝试使用 R 中的 Caret 包来启动此方法并使用我的数据集。

我有一个训练数据集 (Dataset1),其中包含有关我感兴趣的基因的突变信息,比如说基因 A

Dataset1中,我以MutNot-Mut<的形式获得了有关基因A突变的信息/强>。我使用 Dataset1SVM 模型 来预测输出(我选择 SVM 是因为它比 LVQ 或 GBM 更准确)。 因此,在第一步中,我将数据集分为训练组和测试组,因为我在数据集中拥有作为测试集和训练集的信息。然后我用10倍进行了交叉验证。 我调整了模型并使用测试数据集(使用 ROC 曲线)评估了模型的性能。 直到这一步一切都很顺利。

我有另一个数据集。 数据集2,没有关于基因A的突变信息。 我现在想做的是使用 Dataset2 上的 Dataset1 中的调整后的 SVM 模型,看看它是否可以为我提供有关以下方面的突变信息: 数据集2中的基因A,形式为Mut/Not-Mut。我已经阅读了 Caret 软件包指南,但我无法获取它。我被困在这里,不知道该怎么办。

我不确定我是否选择了正确的方法。任何建议或帮助将不胜感激。

这是我的代码,直到我从第一个数据集调整我的模型。

从第一个数据集中选择训练和测试模型:

M_train <- Dataset1[Dataset1$Case=='train',-1] #creating train feature data frame

M_test <- Dataset1[Dataset1$Case=='test',-1] #creating test feature data frame

y=as.factor(M_train$Class) # Target variable for training


ctrl <- trainControl(method="repeatedcv", # 10fold cross validation
                     repeats=5, # do 5 repititions of cv
                     summaryFunction=twoClassSummary, # Use AUC to pick the best model
                     classProbs=TRUE)


#Use the expand.grid to specify the search space 
#Note that the default search grid selects 3 values of each tuning parameter

grid <- expand.grid(interaction.depth = seq(1,4,by=2), #tree depths from 1 to 4
                    n.trees=seq(10,100,by=10), # let iterations go from 10 to 100
                    shrinkage=c(0.01,0.1), # Try 2 values fornlearning rate 
                    n.minobsinnode = 20)


# Set up for parallel processing
#set.seed(1951)
registerDoParallel(4,cores=2)


#Train and Tune the SVM
svm.tune <- train(x=M_train,
                  y= M_train$Class,
                  method = "svmRadial",
                  tuneLength = 9, # 9 values of the cost function
                  preProc = c("center","scale"),
                  metric="ROC",
                  trControl=ctrl) # same as for gbm above

#Finally, assess the performance of the model using the test data set.

#Make predictions on the test data with the SVM Model
svm.pred <- predict(svm.tune,M_test)

confusionMatrix(svm.pred,M_test$Class)

svm.probs <- predict(svm.tune,M_test,type="prob") # Gen probs for ROC

svm.ROC <- roc(predictor=svm.probs$mut,
               response=as.factor(M_test$Class),
               levels=y))

plot(svm.ROC,main="ROC for SVM built with GA selected features")

所以,这就是我遇到的问题,如何使用 svm.tune 模型来预测 Dataset2Gene A 的突变?

提前致谢,

最佳答案

现在您只需使用您构建和调整的模型并使用predict进行预测即可:

D2.predictions <- predict(svm.tune, newdata = Dataset2)

它们的关键是确保您在该集合中拥有所有相同的预测变量,具有相同的列名称(并且在我的偏执世界中以相同的顺序)。

D2.predictions 将包含未标记数据的预测类别。

关于r - 如何使用 R 中的机器学习和 Caret 包在新数据集上测试调整后的 SVM 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858631/

相关文章:

python - 在tensorflow中初始化变量、变量范围和import_graph_def

machine-learning - 使用 Python 请求 Bluemix 上的机器学习服务

python - 找到 C 和 gamma 的值以优化 SVM

python - [target == t,1]的语法解释

machine-learning - 在线/增量学习分类器

parallel-processing - 通过并行处理加速 Sklearn 中的支持向量回归

r - 在 data.table 中的函数内子集行

xml - 从 xml 文件制作 data.frame 的问题

从 R 列表名称中删除重音符号 (`)

emacs - 使用 ESS/R 重构 R 代码