我遇到了一个奇怪的情况,其中lambda = 0的lm
和glmnet
在同一数据上产生了不同的结果。
这两个函数的调用类似:
# linear regression
fit <- lm(y ~ X - 1)
# lasso regression with lambda=0
fit <- glmnet::glmnet(X, y, intercept=FALSE, alpha=1, lambda=0)
lm
个已安装对象的摘要:
Call:
lm(formula = working_yj ~ working_xj - 1)
Residuals:
Min 1Q Median 3Q Max
-2.250e-05 -5.275e-06 3.337e-06 7.596e-06 1.897e-05
Coefficients:
Estimate Std. Error t value Pr(>|t|)
working_xjterm_f 1.2001391 0.0003452 3476.547 <2e-16 ***
working_xj 0.0000658 0.0002888 0.228 0.821
working_xj 0.8994978 0.0014870 604.920 <2e-16 ***
和glmnet
拟合的系数:
# fit$beta
3 x 1 sparse Matrix of class "dgCMatrix"
s0
term_f 1.4736546
0.2163814
-0.2560925
您可以从上方看到,两个拟合结果并不相同。 (此回归是更大算法的一部分。就我的整个算法而言,线性回归给出了更好的估计,因为真实系数为c(1.2,0,0.9))
从我的角度来看,在理想情况下,两个拟合应该给出完全相同的系数,因为它们具有相同的目标函数。设计X
的相关矩阵可能会提供一些有关此奇怪结果的线索:
# dim(X) is c(50, 3)
# length*y) is 50
# print(cor(X))
[,1] [,2] [,3]
[1,] 1.0000000 0.9619002 0.994115
[2,] 0.9619002 1.0000000 0.985752
[3,] 0.9941150 0.9857520 1.000000
X
的列是高度相关的,这可能会导致回归问题。但我不知道一切如何发生或如何进一步研究这个问题。