我一直在使用R中的插入符号包构建几个不同的回归模型,以便预测某些基因序列在某些实验条件下会变成荧光 .
我遵循了将数据分成两组的基本协议:一个"training-testing set"(80%)和一个"hold-out set"(20%),前者将用于构建模型,后者将用于测试它们为了比较和选择最终模型,基于其R平方和RMSE值等指标 . 我所遵循的许多指南都可以在这里找到(http://www.kimberlycoffey.com/blog/2016/7/16/compare-multiple-caret-run-machine-learning-models) .
但是,我遇到了一个障碍,因为我不知道如何测试和比较不同的模型,因为它们可以预测保持集中的分数 . 在我上面链接的指南中,作者使用 ConfusionMatrix
来计算每个模型的特异性和准确性,以便在保留数据集上应用最近构建的模型的 predict.train
对象(称为 test
)在链接中) . 但是, ConfusionMatrix
只能应用于分类模型,其中结果(或响应)是一个分类值(据我的研究表明 . 如果这是不正确的,请纠正我,因为我无法毫无疑问地得出结论)就是这种情况) .
我发现 resamples
方法能够将多个模型相互比较(来源:https://www.rdocumentation.org/packages/caret/versions/6.0-77/topics/resamples),但它不能考虑新模型如何与我从训练测试会话中排除的数据相匹配 .
我尝试使用最近构建的模型和保持数据创建 predict
对象,然后使用插入符号的 R2
和 RMSE
方法计算Rsquared和RMSE值 . 但我不确定这种方法是否是比较和选择最佳模型的最佳方法 .
在这一点上,我应该注意到我使用的所有模型构建方法都基于线性回归,因为我需要能够提取系数并将它们应用于单独的Python脚本中 .
我考虑的另一个选择是在我的结果中设置一个阈值,其中任何具有超过100的荧光值的基因序列被认为是有用的,而得分值低于100的序列则不是 . 这将允许我利用 ConfusionMatrix
. 但是我还担心这种方法可能会使我的回归模型难以应用于其他数据并做出预测 .
对于它的 Value ,每个预测变量都是整数或浮点数,并且具有非正态分布的范围 .
这是我到目前为止使用的代码:
library(caret)
data <- read.table("mydata.csv")
sorted_Data<- data[order(data$fluorescence, decreasing= TRUE),]
splitprob <- 0.8
traintestindex <- createDataPartition(sorted_Data$fluorescence, p=splitprob, list=F)
holdoutset <- sorted_Data[-traintestindex,]
trainingset <- sorted_Data[traintestindex,]
traindata<- trainingset[c('x1', 'x2', 'x3', 'x4', 'x5', 'fluorescence')]
cvCtrl <- trainControl(method = "repeatedcv", number= 20, repeats = 20, verboseIter = FALSE)
modelglmStepAIC <- train(fluorescence~., traindata, method = "glmStepAIC", preProc = c("center","scale"), trControl = cvCtrl)
model_rlm <- train(fluorescence~., traindata, method = "rlm", preProc = c("center","scale"), trControl = cvCtrl)
pred_glmStepAIC<- predict.lm(modelglmStepAIC$finalModel, holdoutset)
pred_rlm<- predict.lm(model_rlm$finalModel, holdoutset)
glmStepAIC_r2<- R2(pred_glmStepAIC, holdoutset$fluorescence)
glmStepAIC_rmse<- RMSE(pred_glmStepAIC, holdoutset$fluorescence)
rlm_r2<- R2(pred_rlm, holdoutset$fluorescence)
rlm_rmse<- RMSE(pred_rlm, holdoutset$fluorescence)
1 回答
Caret提供的样本外性能测量值是RMSE,MAE和拟合值与观测值之间的平方相关性(混淆地称为R2) . 在这里查看更多信息https://topepo.github.io/caret/measuring-performance.html
至少在时间序列回归上下文中,RMSE是回归模型的样本外性能的标准度量 .
我建议不要对连续结果变量进行离散,因为你实际上是通过离散来丢弃信息 .