- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 glmnet
在插入符中运行弹性网络正则化。
我将 alpha 和 lambda 的值序列传递给 trainControl
,然后执行 repeatedcv
以获得 alpha 和 lambda 的最佳调整。
下面是一个示例,其中 alpha 和 lambda 的最佳调整分别为 0.7 和 0.5:
age <- c(4, 8, 7, 12, 6, 9, 10, 14, 7, 6, 8, 11, 11, 6, 2, 10, 14, 7, 12, 6, 9, 10, 14, 7)
gender <- make.names(as.factor(c(1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1)))
bmi_p <- c(0.86, 0.45, 0.99, 0.84, 0.85, 0.67, 0.91, 0.29, 0.88, 0.83, 0.48, 0.99, 0.80, 0.85,
0.50, 0.91, 0.29, 0.88, 0.99, 0.84, 0.80, 0.85, 0.88, 0.99)
m_edu <- make.names(as.factor(c(0, 1, 1, 2, 2, 3, 2, 0, 1, 1, 0, 1, 2, 2, 1, 2, 0, 1, 1, 2, 2, 0 , 1, 0)))
p_edu <- make.names(as.factor(c(0, 2, 2, 2, 2, 3, 2, 0, 0, 0, 1, 2, 2, 1, 3, 2, 3, 0, 0, 2, 0, 1, 0, 1)))
f_color <- make.names(as.factor(c("blue", "blue", "yellow", "red", "red", "yellow",
"yellow", "red", "yellow","blue", "blue", "yellow", "red", "red", "yellow",
"yellow", "red", "yellow", "yellow", "red", "blue", "yellow", "yellow", "red")))
asthma <- make.names(as.factor(c(1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1)))
x <- data.frame(age, gender, bmi_p, m_edu, p_edu, f_color, asthma)
tuneGrid <- expand.grid(alpha = seq(0, 1, 0.05), lambda = seq(0, 0.5, 0.05))
fitControl <- trainControl(method = 'repeatedcv', number = 3, repeats = 5, classProbs = TRUE, summaryFunction = twoClassSummary)
set.seed(1352)
model.test <- caret::train(asthma ~ age + gender + bmi_p + m_edu + p_edu + f_color, data = x, method = "glmnet",
family = "binomial", trControl = fitControl, tuneGrid = tuneGrid,
metric = "ROC")
model.test$bestTune
我的问题?
当我运行 as.matrix(coef(model.test$finalModel))
时,我假设它给出了与最佳模型相对应的系数,我得到了 100 个不同的系数集。
那么如何获得最佳调优对应的系数呢?
我已经看到此建议以获得最佳模型coef(model.test$finalModel, model.test$bestTune$lambda)
但是,这会返回 NULL 系数,并且在任何情况下,都会只返回与 lambda 相关的最佳调整,而不是另外返回 alpha。
编辑:
在互联网上到处搜索后,我现在能找到的正确答案是 this博客文章,其中提到 model.test$finalModel
返回与最佳 alpha 调整相对应的模型,以及 coef(model.test$finalModel, model.caret$bestTune$lambda)
code> 返回与 lambda 最佳值相对应的系数集。如果这是真的,那么这就是我的问题的答案。然而,由于这是一篇博客文章,而且我找不到任何其他内容来支持这一说法,所以我仍然持怀疑态度。任何人都可以验证 model.test$finalModel
返回与最佳 alpha 相对应的模型的说法吗?如果是这样的话,这个问题就迎刃而解了。谢谢!
最佳答案
在玩了一下你的代码后,我发现很奇怪的是 glmnet train 根据种子选择不同的 lambda 范围。这是一个例子:
library(caret)
library(glmnet)
set.seed(13)
model.test <- caret::train(asthma ~ age + gender + bmi_p + m_edu + p_edu + f_color, data = x, method = "glmnet",
family = "binomial", trControl = fitControl, tuneGrid = tuneGrid,
metric = "ROC")
c(head(model.test$finalModel$lambda, 5), tail(model.test$finalModel$lambda, 5))
#output
[1] 3.7796447301 3.4438715094 3.1379274562 2.8591626295 2.6051625017 0.0005483617 0.0004996468 0.0004552595 0.0004148155
[10] 0.0003779645
最佳 lambda 为:
model.test$finalModel$lambdaOpt
#output
#[1] 0.05
这有效:
coef(model.test$finalModel, model.test$finalModel$lambdaOpt)
#12 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -0.03158974
age 0.03329806
genderX1 -1.24093677
bmi_p 1.65156913
m_eduX1 0.45314106
m_eduX2 -0.09934991
m_eduX3 -0.72360297
p_eduX1 -0.51949828
p_eduX2 -0.80063642
p_eduX3 -2.18231433
f_colorred 0.87618211
f_coloryellow -1.52699254
给出最好的 alpha 和 lambda 系数
当使用这个模型来预测时,一些y被预测为X1,一些y被预测为X2
[1] X1 X1 X0 X1 X1 X0 X0 X1 X1 X1 X0 X1 X1 X1 X0 X0 X0 X1 X1 X1 X1 X0 X1 X1
Levels: X0 X1
现在使用您使用的种子
set.seed(1352)
model.test <- caret::train(asthma ~ age + gender + bmi_p + m_edu + p_edu + f_color, data = x, method = "glmnet",
family = "binomial", trControl = fitControl, tuneGrid = tuneGrid,
metric = "ROC")
c(head(model.test$finalModel$lambda, 5), tail(model.test$finalModel$lambda, 5))
#output
[1] 2.699746e-01 2.459908e-01 2.241377e-01 2.042259e-01 1.860830e-01 3.916870e-05 3.568906e-05 3.251854e-05 2.962968e-05
[10] 2.699746e-05
lambda 值小了 10 倍,这会给出空系数,因为 lambdaOpt 不在测试的 lambda 范围内:
coef(model.test$finalModel, model.test$finalModel$lambdaOpt)
#output
12 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) .
age .
genderX1 .
bmi_p .
m_eduX1 .
m_eduX2 .
m_eduX3 .
p_eduX1 .
p_eduX2 .
p_eduX3 .
f_colorred .
f_coloryellow .
model.test$finalModel$lambdaOpt
#output
0.5
现在,当对此模型进行预测时,仅预测 X0(第一级):
predict(model.test, x)
#output
[1] X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0 X0
Levels: X0 X1
相当奇怪的行为,可能值得报告
关于r - 提取插入符号中 glmnet 模型最佳调整参数的系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079660/
即使我使用相同的 lambda,cv.glmnet() 生成的系数似乎与 glmnet() 生成的系数不同。为什么是这样?它们不应该相同吗? library(glmnet) # Data dimens
有人知道 cv.glmnet (在 R 的 glmnet 中)或 LassoCV (scikit-learn)如何选择在交叉验证中使用的正则化常量(lambda)序列吗?非常感谢! 最佳答案 根据 F
当通过 glmnet 包估计套索模型时,我想知道是否更好:(a)直接从从 cv.glmnet 采购的 cv.fit 对象拉系数/预测/偏差,或 (b) 使用来自 cv.glmnet 的最小 lambd
我正在开展一个项目,该项目将显示一组事件对结果的潜在影响。我正在使用 glmnet() 包,特别是使用泊松功能。这是我的代码: # de <- data imported from sql conne
我运行了 20 倍 cv.glmnet 套索模型以获得 lambda 的“最佳”值。但是,当我尝试重现 glmnet() 的结果时,我收到一条错误消息: Warning messages: 1: fr
正如我们所见,caret::train(..., method = "glmnet") 与交叉验证或 cv.glmnet() 实现都可以找到最小化交叉验证错误的 lambda.min。最终的最佳拟合模
我在 R 中使用 glmnet 运行以下(截断的)代码 # do a lot of things to create the design matrix called x.design > glmne
我有一个函数可以返回 cv.glmnet 模型的 auc 值,虽然不是大多数时候,但它经常在执行 cv.glmnet 函数时返回以下错误: 丢弃错误(y %% rep(1, nc)): 在为函数“dr
在我的训练数据集上使用最小二乘法拟合线性回归模型效果很好。 library(Matrix) library(tm) library(glmnet) library(e1071) library(Spa
在 glmnet 包中使用“mse”和“class”有什么区别? log_x <- model.matrix(response~.,train) log_y <- ifelse(train$respo
我读过 glmnet 可以在没有正则化的情况下使用,即它可以用作常规 glm。我正在写一篇论文并试图避免使用许多不同的包,因此使用 glmnet 进行常规的 glm 逻辑回归拟合会很方便。谁能帮我?
我有一个非常大的矩阵,所以我使用 glmnet 进行回归。 我有一个条件,带有 p 的名称必须具有正系数,带有 n 的名称必须具有负系数。 我怎样才能在 glmnet 中强制这种情况? 下面是一个小例
我有一个有效的 glm 模型。因为我想添加(脊)正则化我想我会切换到 glmnet。出于某种原因,我无法让 glmnet 工作。它似乎总是预测第一类,而不是第二类,这导致精度低且 kappa = 0。
我正在使用glmnet软件包执行LASSO回归。有没有办法让所选的各个变量变得重要?我考虑过对通过coef(...)命令获得的系数进行排名(即距零的距离越大,变量将越重要)。那是一个有效的方法吗? 谢
我尝试使用 glmnet 进行预测,并收到一条非常神秘的错误消息。我之前在使用glmnet时没有遇到过这种情况,并且通过谷歌搜索该错误并没有取得成果。当最后一行未注释时会发生错误。 library(I
我一直在研究一个数据集并使用 glmnet用于线性 LASSO/Ridge 回归。 为了简单起见,我们假设我使用的模型如下: cv.glmnet(train.features, train.respo
在我的数据集中,我有许多连续变量和虚拟变量。对于使用 glmnet 进行分析,我希望对连续变量进行标准化,而不是虚拟变量。 我目前手动执行此操作,方法是首先定义仅具有 [0,1] 值的列的虚拟向量,然
我拟合多项逻辑回归模型,我想获得混淆矩阵以获得准确度 library("glmnet") x=data.matrix(train[-1]) y= data.matrix(train[1]) x_tes
我正在学习使用glmnet和 brnn包。考虑以下代码: library(RODBC) library(brnn) library(glmnet) memory.limit(size = 4000)
我的理解是 glmnet 采用矩阵,其中每一列都是一个解释变量。 我有一个包含约 10 个解释变量的数据框(其中一些是因子) 我怎样才能使用诸如 y~(x1*x2*x3)+(x4*x5)+x6 之类的
我是一名优秀的程序员,十分优秀!