sklearn,LassoCV()和ElasticCV()坏了吗?

时间:2014-10-18 21:51:26

标签: python scikit-learn regression linear-regression

sklearn提供用于回归估计的LASSO方法。但是,当我尝试用一​​个矩阵拟合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()对具有相同的情况,前者()建议使用multitask-ElasticCV(),后者适用于2d矩阵。

1 个答案:

答案 0 :(得分:3)

与某些文档字符串中的内容相反,正常的套索估算器(例如您使用的那个)不支持多个目标。

错误消息告诉您使用MultiTaskLasso这是一种群组套索,它会强制为每个目标提供相同的稀疏支持。如果这是您所需要的,请继续使用它。如果没有,截至目前,除了循环目标之外没有其他有用的方法,您可以使用sklearn.externals.joblib进行令人尴尬的并行化。

(如果您想为独立目标提供多目标支持,那么github上的pull请求将非常受欢迎。)