在 sklearn 中访问从 ElasticNetCV 获得的正则化路径

Access the regularization paths obtained from ElasticNetCV in sklearn

我想得到这些地块: 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 其中 returns:

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 实际上已经计算出来了

简答

一次都不合适。

长答案

如果您查看 ElasticNetCV, you will see that within the fit method the class is calling enet_path 的源代码,但将 alphas 设置为在 ElasticNet 中初始化的 alpha 值(默认 1.0),该值由ElasticNetCV 中的 alpha 最终将成为单个值。因此,您无需计算允许您创建路径图的默认 100 个 alpha 值的系数,您只需获得您在 CV 中设置的每个 alpha 值的系数。也就是说,您可以初始化 CV 中的 alpha 以模仿 enet_path 中的 100 默认值,然后组合每个折叠的系数,但这会相当长 运行。正如您提到的,您已经适合 CV,这不是一个选项。