【问题标题】:"Argument Y Missing" when trying to implement Lasso in R?尝试在 R 中实现套索时出现“参数 Y 缺失”?
【发布时间】:2019-02-13 19:32:07
【问题描述】:

尝试在 R 中执行特征选择。我正在使用 glmnet 包来执行此操作。到目前为止,这是我的代码:

lasso_model = glmnet(as.matrix(x = lasso, y = lasso_target, 
standardize=TRUE, alpha=1))

lasso 是一个充满数字和分类预测变量的数据框。第一列是我删除的目标变量。

lasso_target 是我删除的目标变量,存储为它自己的数据框。

错误:

Error in drop(y) : argument "y" is missing, with no default

我的目标是在将数据框输入模型之前从数据框中删除无意义的特征。任何帮助将不胜感激!

【问题讨论】:

  • 您的声明as.matrix(x = lasso 似乎不正确 假设lassolasso_target 是两个对象,您可能需要glmnet(x = as.matrix(lasso), y = as.matrix(lasso_target), ..。错误是因为你已经用所有参数包装了as.matrix
  • 您可以查看?glmnet,其中显示了示例x=matrix(rnorm(100*20),100,20); y=rnorm(100); fit1=glmnet(x,y)

标签: r machine-learning glmnet


【解决方案1】:

你的关闭!但是输入和响应变量需要单独定义。您所做的是将它们组合成一个矩阵(除了 glmnet 的其他参数)并将整个事物传递给函数。由于默认情况下 x 是第一个参数,因此它假定它是输入矩阵,然后找不到负责的变量,因为 y 参数尚未定义。因此,您会收到一个错误提示。

这应该可以解决问题:

lasso_model <-  glmnet(x = as.matrix(lasso), 
                       y = as.matrix(lasso_target), 
                       standardize=TRUE, 
                       alpha=1)

【讨论】:

  • 这似乎有效,谢谢!我的后续问题是关于如何解释结果以确定哪些列信息最少?我将 %dev 和 lambda 视为列。
  • coef(lasso_model, s = cv.glmnet(x=as.matrix(lasso), y=lasso_target)$lambda.min) 将返回最小化模型平均交叉验证误差的系数的权重。见stackoverflow.com/questions/30565457/…
  • 非常感谢您的回复!运行时出现此错误: cbind2(1, newx) %*% nbeta 中的错误:对 dup_mMatrix_as_dgeMatrix 无效的类 'NA'
  • @rmahesh 请避免提出与 OP 无关的后续问题。如果您有新问题,您可以随时提出新问题。另外,由于答案解决了您的问题,请接受它。
  • @Justin 再次感谢您的回复,但它似乎不起作用。我想我会研究其他选择。尽管如此,还是感谢您的所有时间。如果我有任何进一步的问题,我会发布另一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多