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)
当我只使用拉索()来适应相同的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矩阵。
与一些文档字符串中所写的相反,普通的lasso估计量,例如您正在使用的估计量,不支持多个目标。
错误消息告诉您使用MultiTaskLasso
,这是一种组套索,它强制对每个目标提供相同的稀疏支持。如果这是你需要的,那就继续使用它。如果不是,到目前为止,除了在目标之间循环之外,没有其他有用的方法,你可以使用sklearn.externals.joblib
尴尬地并行化。
(如果你想为独立目标提供多目标支持,那么github上的pull请求将非常受欢迎。)