我正在尝试使用 SuperLearner ,无论我添加到库中的算法是什么,它只会为系数为1的离散赢家提供收益。是否有防止这种情况发生的选项发生了吗?
代码:
Java version - 1.8.0_161
OS - Ubuntu 16.04
Opendaylight version - Oxygen SR1
Features installed:
odl-netconf-topology
odl-restconf-all
现在不包括 rpart ,发生同样的情况...
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
如果我尝试一个连续的Y变量(在这种情况下,是住院时间),它还会给出一个离散的获胜者,这似乎与直觉相反。
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
我该怎么办?
答案 0 :(得分:0)
从结果1开始:
它表明 rpart 没有风险/错误,因此,它无疑是赢家,添加其他学习者只会增加预测中的风险/错误。
同样,来自结果2:
它表明 glmnet 在预测中具有风险/误差,其幅度小于其他两个。
似乎您的类之间的间隔非常好(与rpart的风险为0.0000 ),或者存在某些 建模错误 。我建议您分别运行分类模型并检查其性能(即比较预测中的错误)
建模错误: :一种可能是忘记将 factor 转换为 binary 功能,然后再将其提供给 SuperLearner 。 SuperLearner提供了一个 wrapper 来使用 R 中已经实现的算法。算法可能会或可能不会直接处理因子,因此您需要先将因子/分类特征转换为二进制特征(0/1),然后再提供给 SuperLearner 。
有关 SuperLearners 的数据预处理和用法,请参考官方R指南:Dataset Pre-processing for SuperLearner 它提到:“如果我们有因子变量,我们将使用model.matrix()转换为数字。”