标签: glmnet

R glmnet:"(list)对象不能被强制输入'double'"

我正在尝试glmnet在数据集上使用该包.我正在使用cv.glmnet()获取lambda值glmnet().这是数据集和错误消息:

> head(t2)
  X1 X2        X3 X4 X5         X6    X7 X8 X9 X10 X11 X12
1  1  1 0.7661266 45  2 0.80298213  9120 13  0   6   0   2
2  2  0 0.9571510 40  0 0.12187620  2600  4  0   0   0   1
3  3  0 0.6581801 38  1 0.08511338  3042  2  1   0   0   0
4  4  0 0.2338098 30  0 0.03604968  3300  5  0   0   0   0
5  5  0 0.9072394 49  1 0.02492570 …
Run Code Online (Sandbox Code Playgroud)

r glmnet

33
推荐指数
1
解决办法
6万
查看次数

将系数变量名从glmnet提取到data.frame中

我想提取glmnet生成的模型系数并从中创建一个SQL查询.该函数 coef(cv.glmnet.fit) 产生一个' dgCMatrix'对象.当我使用时将其转换为矩阵时as.matrix,变量名称将丢失,只留下系数值.

我知道可以在屏幕上打印系数,但是可以将名称写入数据框吗?

任何人都可以帮助提取这些名字吗?

r glmnet

30
推荐指数
3
解决办法
3万
查看次数

R glmnet as.matrix()错误消息

我正在尝试glmnet在数据集上使用该包.我正在使用cv.glmnet()获取lambda值glmnet().我将它们排除在第1,2,7,12列之外:id列,响应列,包含NA,并包含NA.

这是数据集和错误消息:

> head(t2)
  X1 X2        X3 X4 X5         X6    X7 X8 X9 X10 X11 X12
1  1  1 0.7661266 45  2 0.80298213  9120 13  0   6   0   2
2  2  0 0.9571510 40  0 0.12187620  2600  4  0   0   0   1
3  3  0 0.6581801 38  1 0.08511338  3042  2  1   0   0   0
4  4  0 0.2338098 30  0 0.03604968  3300  5  0   0   0   0
5  5  0 0.9072394 49  1 …
Run Code Online (Sandbox Code Playgroud)

r glmnet

20
推荐指数
3
解决办法
2万
查看次数

运行glmnet()的大矩阵

我有一个问题,用宽数据集运行glmnet套索.我的数据N = 50,但p> 49000,所有因素.所以要运行glmnet,我必须创建一个model.matrix,但是当我调用model.matrix(formula,data)时,我的内存耗尽,其中formula = Class~.

作为一个工作示例,我将生成一个数据集:

data <- matrix(rep(0,50*49000), nrow=50)
for(i in 1:50) {
x = rep(letters[2:8], 7000)
y = sample(x=1:49000, size=49000)
data[i,] <- x[y]
}

data <- as.data.frame(data)
x = c(rep('A', 20), rep('B', 15), rep('C', 15))
y = sample(x=1:50, size=50)
class = x[y]
data <- cbind(data, class)
Run Code Online (Sandbox Code Playgroud)

之后,我尝试创建一个model.matrix进入glmnet.

  formula <- as.formula(class ~ .)
  X = model.matrix(formula, data)
  model <- cv.glmnet(X, class, standardize=FALSE, family='multinomial', alpha=1, nfolds=10)
Run Code Online (Sandbox Code Playgroud)

在最后一步(X = model.matrix ...),我的内存不足.我能做什么?

r lasso-regression bigdata glmnet model.matrix

20
推荐指数
2
解决办法
8773
查看次数

如何在使用glmnet之前进行所有交互

我有一个8列的x矩阵.我想跑glmnet去做套索回归.我知道我需要打电话:

glmnet(x, y, family = "binomial", ...). 
Run Code Online (Sandbox Code Playgroud)

但是,我如何x考虑所有单向交互呢?我是否必须手动重新制作数据框:如果是,是否有更简单的方法?我想我希望用R公式做点什么.

interaction r formula glmnet

19
推荐指数
1
解决办法
6710
查看次数

如何强制cv.glmnet不丢弃一个特定的变量?

我正在运行67个观察和32个变量的回归.我正在使用glmnet包中的cv.glmnet函数进行变量选择.我想强制一个变量进入模型.(它在正常过程中被删除.)如何在cv.glmnet中指定此条件?

谢谢!

我的代码如下所示:

glmntfit <- cv.glmnet(mydata[,-1], mydata[,1])
coef(glmntfit, s=glmntfit$lambda.1se)
Run Code Online (Sandbox Code Playgroud)

我想要的变量是mydata [,2].

regression r linear-regression glmnet

18
推荐指数
1
解决办法
3916
查看次数

为什么从glmnet模型中获取回归系数的统计汇总信息是不可取的?

我有一个带二元结果的回归模型.我用glmnet拟合了模型并得到了选定的变量及其系数.

由于glmnet不计算变量重要性,我想将精确输出(选定变量及其系数)提供给glm以获取信息(标准错误等).

我搜索了r文件,似乎我可以在glm中使用"method"选项来指定用户定义的函数.但我没有这样做,有人可以帮助我吗?

statistics regression r glm glmnet

17
推荐指数
1
解决办法
8051
查看次数

将glmnet系数设为'最佳'lambda

我使用以下代码与glmnet:

> library(glmnet)
> fit = glmnet(as.matrix(mtcars[-1]), mtcars[,1])
> plot(fit, xvar='lambda')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,我想打印最好的Lambda系数,就像在岭回归中一样.我看到以下适合的结构:

> str(fit)
List of 12
 $ a0       : Named num [1:79] 20.1 21.6 23.2 24.7 26 ...
  ..- attr(*, "names")= chr [1:79] "s0" "s1" "s2" "s3" ...
 $ beta     :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
  .. ..@ i       : int [1:561] 0 4 0 4 0 4 0 4 0 4 ...
  .. ..@ p       : int [1:80] 0 0 2 4 6 8 10 12 …
Run Code Online (Sandbox Code Playgroud)

lambda regression r glmnet coefficients

16
推荐指数
1
解决办法
2万
查看次数

glmnet的公式接口

在过去的几个月里,我参与了许多项目,在这些项目中,我使用了这个glmnet包,以适应弹性网模型.它很棒,但与大多数R建模功能相比,界面相当简陋.特别是,您必须提供响应向量和预测矩阵,而不是指定公式和数据框.你也会失去常规界面提供的许多生活质量的东西,例如对因子的敏感(?)处理,缺失值,将变量放入正确的顺序等等.

所以我通常最终编写自己的代码来重新创建公式/数据框架界面.由于客户机密性问题,我最终还是留下了这个代码,不得不再次为下一个项目编写代码.我想我也可以咬紧牙关并创建一个实际的包来做到这一点.但是,在我这样做之前有几个问题:

  • 使用具有弹性网络模型的公式/数据框架界面是否存在任何问题?(我知道标准化和虚拟变量,宽数据集可能需要稀疏模型矩阵.)
  • 有没有现成的包呢?

r formula glmnet

15
推荐指数
1
解决办法
4097
查看次数

glmnet的standardize参数如何处理虚拟变量?

在我的数据集中,我有许多连续和虚拟变量.对于使用glmnet进行分析,我希望连续变量是标准化的,而不是虚拟变量.

我目前通过首先定义仅具有[0,1]值的列的虚拟向量然后scale在所有非虚拟列上使用该命令来手动执行此操作.问题是,这不是很优雅.

但是glmnet有一个内置的standardize论点.默认情况下这会使假人标准化吗?如果是这样,有没有一种优雅的方式来告诉glmnet的standardize论点跳过假人?

r machine-learning dataset glmnet

14
推荐指数
1
解决办法
6761
查看次数