我现在已经捣乱了大约一个星期,试图弄清楚这个,所以任何帮助都会非常感激。
我有一个带有二进制目标和连续预测变量的数据集。
输入看起来像这样(有更多变量,但你明白了 - 它非常稀疏):
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序列,尝试了一些较小的数据集(然后我得到了整数变量,这些变量是空值,并且出现了一些错误)。
超级,超级混淆我还能尝试什么。数据集适用于回归,但在我使用分类变量进行尝试时,会继续吐出回归值。
不知道接下来该做什么。 。 。提前感谢任何反馈!
答案 0 :(得分:1)
这里有几件事:
predict
S3泛型而不是predict.glmnet
,因为class(ridge_fit)
= c("lognet" "glmnet")
。因此predict()
将首先选择predict.lognet
。如果您需要概率,请使用type = 'response'
。ridge_fit
object获取lambda值。cv.glmnet()
函数根据交叉验证选择最佳lambda。