Python glmnet封装设置lambda=0报错及与R参数对齐问题
正确配置方法
- 对齐标准化参数:R的glmnet默认开启特征标准化(
standardize=TRUE),Python的glmnet封装虽然默认也是开启状态,建议显式指定避免版本差异导致的结果不一致 - 构造符合要求的lambda路径:
lambda_path必须是降序排列的数组,需要包含至少2-3个从高到低的非零lambda值过渡到0,避免路径太短导致的拟合精度误差 - 提取lambda=0对应的系数:不要直接调用
model.coef_,该属性默认返回交叉验证最优lambda对应的系数,需要从coef_path_属性中手动提取lambda=0位置的系数
可运行代码示例
import numpy as np from glmnet import ElasticNet # 构造降序排列的lambda路径,包含过渡值到0 lambda_path = np.array([1, 0.1, 0.01, 0.001, 0]) model = ElasticNet( alpha=1, lambda_path=lambda_path, fit_intercept=False, standardize=True # 与R默认配置对齐 ) model.fit(X, Y) # 找到lambda=0在路径中的索引 zero_lambda_idx = np.where(model.lambda_path_ == 0)[0][0] # 提取对应系数,coef_path_形状为 (特征数, lambda值数量) coeff = model.coef_path_[:, zero_lambda_idx]
补充说明
lambda=0且alpha=1的配置本质等价于无正则的线性回归,你可以用sklearn.linear_model.LinearRegression的拟合结果做校验,输入数据一致的情况下结果应该完全匹配。
内容的提问来源于stack exchange,提问作者throwawaydisplayname
相关产品推荐
相关产品推荐

