弹性净回归(前列腺数据)
Elastic Net Regression (Prostate Data)
在最初的 Elastic 网络论文中,Zou 和 Hastie (2005) 检查了前列腺癌数据以进行比较。我想使用 R
中的 glmnet
包重新生成结果。如论文中所述,响应为 lpsa
。训练集和测试集由数据中的变量 train
给出。我假设 alpha = 0.26
(如论文中所述)并使用交叉验证来估计 lambda
。但是我无法得到与论文中给出的相似的均方误差(0.381)。我的错误在哪里?
我使用的代码如下。
library(ElemStatLearn)
library(glmnet)
x = model.matrix(lpsa ~ .-train, data = prostate)[, -1]
y = prostate$lpsa
#
trainlab = which(prostate$train=="TRUE")
testlab = which(prostate$train=="FALSE")
y.test = y[testlab]
alph=0.26
en.mod = glmnet(x[trainlab, ], y[trainlab], alpha = alph)
set.seed(1)
cv.out = cv.glmnet(x[trainlab, ], y[trainlab], alpha = alph)
bestlambda=cv.out$lambda.min
en.pred = predict(en.mod, s=bestlambda, newx = x[testlab, ])
MSE.en = mean((en.pred-y.test)^2)
MSE.en
[1] 0.5043356
根据 paper,他们使用了一种称为 LARS-EN 的算法,因此您可能有兴趣签入名为 elasticnet
的程序包,因为它实现了该算法。
在最初的 Elastic 网络论文中,Zou 和 Hastie (2005) 检查了前列腺癌数据以进行比较。我想使用 R
中的 glmnet
包重新生成结果。如论文中所述,响应为 lpsa
。训练集和测试集由数据中的变量 train
给出。我假设 alpha = 0.26
(如论文中所述)并使用交叉验证来估计 lambda
。但是我无法得到与论文中给出的相似的均方误差(0.381)。我的错误在哪里?
我使用的代码如下。
library(ElemStatLearn)
library(glmnet)
x = model.matrix(lpsa ~ .-train, data = prostate)[, -1]
y = prostate$lpsa
#
trainlab = which(prostate$train=="TRUE")
testlab = which(prostate$train=="FALSE")
y.test = y[testlab]
alph=0.26
en.mod = glmnet(x[trainlab, ], y[trainlab], alpha = alph)
set.seed(1)
cv.out = cv.glmnet(x[trainlab, ], y[trainlab], alpha = alph)
bestlambda=cv.out$lambda.min
en.pred = predict(en.mod, s=bestlambda, newx = x[testlab, ])
MSE.en = mean((en.pred-y.test)^2)
MSE.en
[1] 0.5043356
根据 paper,他们使用了一种称为 LARS-EN 的算法,因此您可能有兴趣签入名为 elasticnet
的程序包,因为它实现了该算法。