2016-07-01 42 views
6

Ho un set di dati di training di 8670 prove e ogni prova ha una lunghezza di 125 campioni durante il mio test set composto da 578 prove. Quando applico l'algoritmo SVM da scikit-learn, ottengo risultati piuttosto buoni.ValueError: questo risolutore richiede campioni di almeno 2 classi nei dati, ma i dati contengono solo una classe: 1.0

Tuttavia, quando applico regressione logistica, questo errore si verifica:

"ValueError: This solver needs samples of at least 2 classes in the data, but the data contains only one class: 1.0" .

mia domanda è perché SVM è in grado di fare previsioni, ma di regressione logistica dà questo errore?

Potrebbe essere possibile che qualcosa non sia nel set di dati o solo che la regressione logistica non è stata in grado di classificare perché gli esempi di addestramento sembrano simili?

+1

Inserisci il codice minimo che viene eseguito, inclusi i dati di esempio per generare l'errore. – bakkal

+0

C'è qualcosa che non va nel tuo codice, né SVM né LR funzionano con una singola classe ed entrambi generano lo stesso errore. – lejlot

+0

Mi piacerebbe un upvote sulla mia risposta qui sotto! Se risolvesse il tuo problema! grazie! – Nico

risposta

7

ho letto questo nel seguente problema su un modulo lineare simile: https://github.com/lensacom/sparkit-learn/issues/49

"Purtroppo questo è un bug davvero Sparkit treni modelli lineari di sklearn in parallelo, poi le medie in un passo ridurre C'è almeno.. un blocco, che contiene solo una delle etichette per controllare provare quanto segue:.

train_Z[:, 'y']._rdd.map(lambda x: np.unique(x).size).filter(lambda x: x < 2).count() 

per risolvere Si potrebbe casuale i dati del treno per evitare blocchi con un'etichetta, ma questo è ancora in attesa di una soluzione intelligente ".

MODIFICA: ho trovato una soluzione, l'analisi precedente dell'errore era corretta. Questa sarebbe una soluzione.

a mescolare le matrici nello stesso ordine che ho usato modulo uno scikit-learn utils:

from sklearn.utils import shuffle 
X_shuf, Y_shuf = shuffle(X_transformed, Y) 

Quindi utilizzare questi array mescolate per allenare di nuovo il modello e che funzionerà!

+2

Uomini fantastici! È davvero utile – imazzara