2014-10-18 8 views
5

sklearn fornisce il metodo LASSO per la stima della regressione. Tuttavia, quando provo ad adattare LassoCV (X, y) con y una matrice, genera un errore. Vedi lo screenshot qui sotto e il link per la loro documentazione. La versione di sklearn che sto usando è 0.15.2.sklearn, LassoCV() e ElasticCV() non funzionano?

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

suo documento dice y può essere un ndarray:

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

Quando uso solo Lasso() per adattare lo stesso X e Y, funziona benissimo. Quindi mi chiedo se il LassoCV() è rotto o devo fare qualcos'altro?

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]: 

sembra che coppia ElasticCV() ed elastica() ha la stessa situazione, ex() suggeriscono di utilizzare multitasking-ElasticCV() e quest'ultimo funziona bene per matrice 2d.

+0

Sembra che la documentazione è sbagliato e si suppone di utilizzare il MultiTaskLassoCV se siete predire più bersagli. –

+0

@DV, il multitask presuppone l'indipendenza tra ciascuna attività, che potrebbe essere diversa dal trattare l'intera Y nel suo insieme e applicare i test. Inoltre, il LassoCV() dovrebbe essere un involucro di Lasso() con convalida incrociata. Questo è il motivo per cui penso che la biblioteca sia rotta. –

risposta

2

Contrariamente a quanto scritto in alcune docstring, i normali stimatori di lazo, come quello in uso, non supportano più destinazioni.

Il messaggio di errore indica che è necessario utilizzare MultiTaskLasso che è un tipo di lasso di gruppo, che forza lo stesso supporto sparse per ogni destinazione. Se questo è quello che ti serve, vai avanti e usalo. Altrimenti, a partire da ora, non c'è altro modo utile che collegarsi ai bersagli, che puoi imbarazzare in parallelo usando sklearn.externals.joblib.

(Se avete voglia di contribuire supporto multi obiettivo per gli obiettivi indipendenti, una richiesta di pull su GitHub sarebbe accolto con molto favore.)