sklearn、LassoCV() 和 ElasticCV() 坏了?

Posted

技术标签:

【中文标题】sklearn、LassoCV() 和 ElasticCV() 坏了?【英文标题】:sklearn, LassoCV() and ElasticCV() broken? 【发布时间】:2014-12-14 05:03:54 【问题描述】:

sklearn 提供 LASSO 方法进行回归估计。但是,当我尝试用 y 矩阵拟合 LassoCV(X,y) 时,它会引发错误。请参阅下面的屏幕截图及其文档的链接。我使用的sklearn版本是0.15.2。

http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LassoCV.html#sklearn.linear_model.LassoCV

它的文档说 y 可以是一个 ndarray:

y : array-like, shape (n_samples,) or (n_samples, n_targets)

当我只使用 Lasso() 来拟合相同的 X 和 y 时,它工作正常。所以我想知道 LassoCV() 是坏了还是我需要做其他事情?

In [2]:  import numpy as np 
im
In [3]: import sklearn.linear_model

In [4]: from sklearn import linear_model

In [5]: X = np.random.random((10,100))

In [6]: y = np.random.random((50, 100)) 

In [7]: linear_model.Lasso().fit(X,y) 
Out[7]: 
Lasso(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=1000,
   normalize=False, positive=False, precompute='auto', tol=0.0001,
   warm_start=False)

In [8]: linear_model.LassoCV().fit(X,y)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-8-9c8ad3459ac8> in <module>()
----> 1 linear_model.LassoCV().fit(X,y)

/chimerahomes/wenhoujx/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/sklearn/linear_model/coordinate_descent.pyc in fit(self, X, y)
   1006             if y.ndim > 1:
   1007                 raise ValueError("For multi-task outputs, use "
-> 1008                                  "MultiTask%sCV" % (model_str))
   1009         else:
   1010             if sparse.isspmatrix(X):

ValueError: For multi-task outputs, use MultiTaskLassoCV

In [9]: 

似乎 ElasticCV() 和 Elastic() 对的情况相同,前者() 建议使用多任务-ElasticCV(),后者适用于 2d 矩阵。

【问题讨论】:

看起来文档有误,如果您要预测多个目标,则应该使用 MultiTaskLassoCV。 @DV,多任务假设每个任务之间是独立的,这可能不同于将整个 Y 视为一个整体并应用测试。此外,LassoCV() 应该是带有交叉验证的 Lasso() 环绕。这就是为什么我认为图书馆坏了。 【参考方案1】:

与某些文档字符串中写的相反,普通的套索估计器,例如您正在使用的估计器,不支持多个目标。

错误消息告诉您使用MultiTaskLasso,这是一种组套索,它强制对每个目标进行相同的稀疏支持。如果这是您需要的,请继续使用它。如果不是,那么到目前为止,除了遍历目标之外没有其他有用的方法,您可以使用 sklearn.externals.joblib 进行令人尴尬的并行化。

(如果您想为独立目标提供多目标支持,非常欢迎在 github 上提出拉取请求。)

【讨论】:

以上是关于sklearn、LassoCV() 和 ElasticCV() 坏了?的主要内容,如果未能解决你的问题,请参考以下文章

什么都不提供时,LassoCV 中的参数选择如何工作?

我应该使用 LassoCV 还是 GridSearchCV 来找到 Lasso 的最佳 alpha?

scikit-learn 中的 LassoCV 如何分区数据?

scikit-learn 的 LassoCV 的评分指标

python使用lassocv生成影像组学(radiomic)模型的系数表

python可视化lassocv特征筛选之后的特征的相关性分析热力图