SuperLearner仅提供离散的赢家

时间:2018-06-22 05:39:43

标签: r machine-learning

我正在尝试使用 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

我该怎么办?

1 个答案:

答案 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()转换为数字。”