【问题标题】:Access the regularization paths obtained from ElasticNetCV in sklearn在 sklearn 中访问从 ElasticNetCV 获得的正则化路径
【发布时间】: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 实际上已经计算出来了

【问题讨论】:

    标签: python scikit-learn linear-regression lasso-regression


    【解决方案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 并重新训练
    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多