在 sklearn 中访问从 ElasticNetCV 获得的正则化路径
Posted
技术标签:
【中文标题】在 sklearn 中访问从 ElasticNetCV 获得的正则化路径【英文标题】:Access the regularization paths obtained from ElasticNetCV in sklearn 【发布时间】:2018-04-01 14:01:54 【问题描述】:我想得到这些地块: http://scikit-learn.org/stable/auto_examples/linear_model/plot_lasso_coordinate_descent_path.html
来自我已经训练过的弹性网。 这个例子确实
from sklearn.linear_model import lasso_path, enet_path
from sklearn import datasets
diabetes = datasets.load_diabetes()
X = diabetes.data
print("Computing regularization path using the elastic net...")
alphas_enet, coefs_enet, _ = enet_path(
X, y, eps=eps, l1_ratio=0.8, fit_intercept=False)
这基本上需要从X,y
重新计算整个模型。
不幸的是,我没有X,y
。
在训练中我使用了sklearn.linear_model.ElasticNetCV
,它返回:
coef_ : array, shape (n_features,) | (n_targets, n_features)
parameter vector (w in the cost function formula)
mse_path_ : array, shape (n_l1_ratio, n_alpha, n_folds)
Mean square error for the test set on each fold, varying l1_ratio and alpha.
虽然我需要改变 l1_ratio 和 alpha 的参数向量。
这可以在不重新计算的情况下完成吗?这将是极大的浪费时间,因为这些 coef_paths 实际上已经计算出来了
【问题讨论】:
【参考方案1】:简答
一旦合适就不行了。
长答案
如果您查看ElasticNetCV
的源代码,您将看到在 fit 方法中,该类正在调用 enet_path
,但将 alphas
设置为在 ElasticNet
中初始化的 alpha 值(默认为 1.0 ) 由ElasticNetCV
中的 alphas 值设置,最终将成为单个值。因此,无需计算允许您创建路径图的默认 100 个 alpha 值的系数,您只需为您在 CV 中设置的每个 alpha 值获取一个。话虽如此,您可以初始化 CV 中的 alpha 以模仿 enet_path
中的 100 默认值,然后组合每个折叠的系数,但这将是相当长的运行时间。正如您提到的,您已经适合 CV,这不是一个选择。
【讨论】:
好的。感谢您的回答。我希望我错过了一些未记录的功能。在我的情况下,EN 已经适合超过 100 个默认 alpha 值,因此在 CV 中设置的值确实足以重现图表。我认为这是一个设计错误,因为已经为每个折叠和每个 alpha 计算了系数,但它们没有存储/返回给调用者 总之,我必须找回 X,y 并重新训练以上是关于在 sklearn 中访问从 ElasticNetCV 获得的正则化路径的主要内容,如果未能解决你的问题,请参考以下文章
Python使用sklearn构建ElasticNet回归模型并指定样本权重:即构建带样本权重(sample_weight)的回归模型
Lasso_ElasticNet_PolynomialFeatures算法介绍---人工智能工作笔记0032
Python 3:NameError:未定义名称“sklearn”