R glmnet分类 - 家庭='二项式',类型='类',没有错误,为什么我仍然得到回归预测?

时间:2016-07-12 09:52:28

标签: r classification glmnet

我现在已经捣乱了大约一个星期,试图弄清楚这个,所以任何帮助都会非常感激。

我有一个带有二进制目标和连续预测变量的数据集。

输入看起来像这样(有更多变量,但你明白了 - 它非常稀疏):

18.425           0             0             0             0
0.000            0             0             0             0
0.000            0             0             0             0
0.000            0             0             3.234         0
0.000            0             0             0             0

目标是二进制,0或1,也非常稀疏:

0 1 0 0 0

我正在尝试以下代码:

ridge_fit <- glmnet(x = as.matrix(train_input), 
                y = as.factor(train_target),
                family="binomial")
ridge_predict <- predict.glmnet(ridge_fit, 
                            newx = test_input, 
                            type = 'class')

得到这样的输出:

s0        s1        s2        s3        s4
-3.391069 -3.396630 -3.400896 -3.404444 -3.407538
-3.391069 -3.388934 -3.388549 -3.388796 -3.389314
-3.391069 -3.396621 -3.400882 -3.404427 -3.407517
-3.391069 -3.396630 -3.400896 -3.404444 -3.407538
-3.391069 -3.396630 -3.400896 -3.404444 -3.407538

我尝试过与家人一起玩耍,预测类型,将事物作为因素运行,作为矩阵,使用不同的alpha值进行游戏(针对山脊,但愿意尝试任何有效的方法)点)和不同的lambda序列,尝试了一些较小的数据集(然后我得到了整数变量,这些变量是空值,并且出现了一些错误)。

超级,超级混淆我还能尝试什么。数据集适用于回归,但在我使用分类变量进行尝试时,会继续吐出回归值。

不知道接下来该做什么。 。 。提前感谢任何反馈!

1 个答案:

答案 0 :(得分:1)

这里有几件事:

  1. 使用predict S3泛型而不是predict.glmnet,因为class(ridge_fit) = c("lognet" "glmnet")。因此predict()将首先选择predict.lognet。如果您需要概率,请使用type = 'response'
  2. 你的答案是矩阵。每列对应于特定的λ值。您可以从ridge_fit object获取lambda值。
  3. 如果您需要单一预测,请考虑使用cv.glmnet()函数根据交叉验证选择最佳lambda。