我正在尝试使用SuperLearner,不管我在库中添加了哪些算法,它只会提供系数1的离散赢家。有什么选项可以防止这种情况发生吗?
代码:
library(SuperLearner)
Call:
SuperLearner(Y = msicudatatrain$IsDeceased, X = x, family = binomial(),
SL.library = c("SL.mean", "SL.glmnet",
"SL.ksvm", "SL.rpart"), verbose = TRUE)
Risk Coef
SL.mean_All 1.684285e-01 0
SL.glmnet_All 4.483909e-07 0
SL.ksvm_All 1.750231e-03 0
SL.rpart_All 0.000000e+00 1不包括rpart,同样的情况也会发生.
Call:
SuperLearner(Y = msicudatatrain$IsDeceased, X = x, family = binomial(), SL.library = c("SL.mean", "SL.glmnet",
"SL.ksvm"), verbose = TRUE)
Risk Coef
SL.mean_All 1.683833e-01 0
SL.glmnet_All 4.482701e-07 1
SL.ksvm_All 1.989397e-03 0如果我尝试一个连续的Y变量(在这种情况下,住院时间),它也会给出一个离散的赢家,这似乎违背了直觉。
Call:
SuperLearner(Y = msicudatatrain$ICU_LOS_Clinical, X = x, family = gaussian(),
SL.library = c("SL.mean", "SL.glmnet",
"SL.ksvm", "SL.randomForest", "SL.rpart"), verbose = TRUE)
Risk Coef
SL.mean_All 51.59664196 0
SL.glmnet_All 0.05281076 1
SL.ksvm_All 2.69611753 0
SL.randomForest_All 2.00135683 0
SL.rpart_All 1.38172213 0我该怎么办?
发布于 2018-06-22 06:47:40
从您的结果1:
结果表明,rpart不存在风险/错误,因此它是明显的赢家,添加其他学习者只会增加预测中的风险/错误。
类似地,从结果2:
结果表明,glmnet具有较小的预测风险/误差。
您的类似乎分离得很好(从rpart中冒0.0000的风险),或者存在一些建模错误。我建议您单独运行分类模型,并检查它们的性能(即预测中的比较错误)。
建模错误:,一种可能是在将因子提供给SuperLearner之前忘记将其转换为二进制特性。SuperLearner提供了一个包装器来使用R中已经实现的算法。算法可能有直接处理因素的规定,也可能没有直接处理因素的规定,所以在提供给SuperLearner之前,需要将因子/分类特性转换为二进制特性(0/1)。
参考官方的SuperLearners:面向SuperLearner的数据集预处理的数据预处理和使用指南:“如果我们有因子变量,我们将使用model.matrix()转换成数字。”
https://stackoverflow.com/questions/50981322
复制相似问题