glmnet在逻辑回归/二项式中的错误

9

当我尝试使用family="binomial"拟合glmnet()进行逻辑回归拟合时,出现了以下错误:

> data <- read.csv("DAFMM_HE16_matrix.csv", header=F)
> x <- as.data.frame(data[,1:3])
> x <- model.matrix(~.,data=x)
> y <- data[,4]

> train=sample(1:dim(x)[1],287,replace=FALSE)

> xTrain=x[train,]
> xTest=x[-train,]
> yTrain=y[train]
> yTest=y[-train]

> fit = glmnet(xTrain,yTrain,family="binomial")

Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 
one multinomial or binomial class has 1 or 0 observations; not allowed

任何帮助都将不胜感激-我已经在互联网上搜索了很久,但没能找到任何有用的信息。
编辑:
以下是数据的样子:
> data
          V1       V2    V3      V4
1   34927.00   156.60 20321  -12.60
2   34800.00   156.60 19811  -18.68
3   29255.00   156.60 19068    7.50
4   25787.00   156.60 19608    6.16
5   27809.00   156.60 24863   -0.87
...
356 26495.00 12973.43 11802    6.35
357 26595.00 12973.43 11802   14.28
358 26574.00 12973.43 11802    3.98
359 25343.00 14116.18 11802   -2.05

你确定你的 yTrain 包含至少两个不同的值吗? - Hong Ooi
@HongOoi 当然可以。有287个不同的值,我检查过确保它不是矩阵而是向量。 - user3889389
1
等一下,你的 V4 变量似乎是连续的,而不是二进制的。你不能用它来拟合逻辑回归模型。 - Hong Ooi
@HongOoi 把这个作为注释,我会接受为答案。 - user3889389
4
这个错误有时也可能是合理的(当目标变量为因子时),例如在cv.glmnet中,对于某些随机种子的选择,尤其是在存在严重类别不平衡情况下,当CV折叠中有一个只有0或1个观测值时会发生。由于这是随机发生的,您必须妥善处理它。 - smci
显示剩余4条评论
2个回答

3

我认为这是由于您的因子变量级别造成的。假设有10个级别,而您的1级只有一条记录,请尝试删除此级别。您可以使用 gdata 包中的 drop levels。


或者,如果您正在训练的数据只是总数据集的一部分(应该是这样),请使用更多数据作为您的训练集,直到错误消失。您可以尝试通过执行“table(myData $ responseColumn)”来估计是否存在人口不足的类别。 - radumanolescu

1
这通常是由于数据结构及其响应变量的原因,有时响应具有多个二进制输出。或者数据响应变量具有二进制输出结果,但它们中有更多的一类和另一类,我们可能称之为类别不平衡问题。因此,在训练和测试数据时会遇到问题。所以,如果有超过两种结果,则必须将响应变量转换为二进制;其次,可以根据binomial的情况应用multinomial。希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接