我正在使用 scikit learn 进行岭回归,并对惩罚参数做了一些测试。
我的问题似乎并不取决于我的代码,但对于 scikit ridge 方法可能更普遍 - 因为我只是使用以下方法对某些数据实现了基本的
ridge
回归:
# [m,y are previously defined from the data I am using.]
alphas=[1e-7,1e-6,1e-5,1e-4,1e-3, 1e-2, 1e-1,0.5, 1]
for alpha in alphas:
model=sklearn.linear_model.Ridge(alpha, positive=true)
model.fit(m,y);
r_sq = model.score(m,y);
我存储每次运行的结果,并且我对不同惩罚值的结果
R2
感兴趣。
问题:无论惩罚参数如何,我都会获得完全相同的
R2
。我获得不同拟合和不同回归权重的唯一 alpha
值是 alpha=100
和 alpha=10^-12
。
我期望
alpha
值 100
将所有系数绘制为 0 - 事实并非如此。
使用
lasso
进行同样的操作,我得到了我所期望的结果:对于惩罚参数的高值,我获得所有回归权重 0。
有谁知道
ridge
R2
里面会发生什么?我在一篇博文中读到,我丢失了惩罚参数除以样本数,但在 scikit 方法中找不到这个。
提前谢谢您!
在 for 循环中你总是覆盖最后的结果?
您必须以某种方式附加结果:
r_sq = []
# [m,y are previously defined from the data I am using.]
alphas=[1e-7,1e-6,1e-5,1e-4,1e-3, 1e-2, 1e-1,0.5, 1]
for alpha in alphas:
model=sklearn.linear_model.Ridge(alpha, positive=true)
model.fit(m,y);
r_sq_result = model.score(m,y)
r_sq = r_sq.append(r_sq_result)