【问题标题】:glmnet error for logistic regression/binomial逻辑回归/二项式的 glmnet 错误
【发布时间】:2015-07-11 18:37:26
【问题描述】:

在尝试将 glmnet() 与 family="binomial" 拟合时出现此错误,以进行 Logistic 回归拟合:

> 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 至少包含 2 个不同的值吗?
  • @HongOoi 绝对是。有 287 个不同的值,我检查以确保它不是矩阵而是向量。
  • @HongOoi 我也尝试运行 glmnet(x,y,family="binomial") 产生相同的错误。
  • 好吧,等一下;您的 V4 变量似乎是连续的,而不是二进制的。你不能用它来拟合逻辑模型。
  • 这个错误也可以正常发生(当目标变量是一个因素时),例如在 cv.glmnet 中,对于一些随机种子的选择,特别是。具有严重的类别不平衡,当其中一个 CV 折叠实际上最终只有 0 或 1 个观察值时。由于这是随机发生的,因此您必须优雅地处理它。

标签: r logistic-regression glmnet


【解决方案1】:

我认为这是因为您的因子变量的水平。假设有 10 个级别,而您的 1 个级别只有一条记录,请尝试删除该级别。您可以使用 gdata 包中的掉落等级。

【讨论】:

  • 或者,如果您正在训练的数据只是总数据集的一小部分(应该如此) - 使用更多数据作为您的训练集,直到错误消失。您可以尝试通过table(myData$responseColumn) 来估计您是否有人数不足的课程
【解决方案2】:

这通常是因为数据结构及其响应变量,有时响应有多个二进制输出。或者数据响应变量具有二进制输出,但它们有更多的一个类,我们最有可能称它们为类不平衡问题。因此,在训练和测试数据期间会出现问题。因此,如果有两个以上的结果,您必须将响应变量转换为二进制,第二,您可以针对binomial 应用multinomial。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 2011-10-27
    • 2018-07-19
    • 2020-11-05
    • 1970-01-01
    • 2018-04-20
    • 2016-02-21
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多