2016-07-01 26 views
6

Ich habe einen Trainingsdatensatz von 8670 Studien und jeder Versuch hat eine Länge von 125-mal Proben, während mein Test gesetzt besteht aus 578 Studien. Wenn ich den SVM-Algorithmus von scikit-learn anwende, bekomme ich ziemlich gute Ergebnisse.ValueError: Dieser Löser benötigt Proben von mindestens 2 Klassen in den Daten, aber die Daten enthalten nur eine Klasse: 1.0

Allerdings, wenn ich die logistische Regression anwenden, tritt dieser Fehler auf:

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

Meine Frage ist, warum SVM der Lage ist, die Prognosen zu geben, aber logistische Regression gibt diesen Fehler?

Könnte es sein, dass etwas im Datensatz falsch ist oder nur, dass die logistische Regression nicht klassifiziert werden konnte, weil die Trainingsbeispiele ähnlich aussehen?

+1

Bitte senden Sie minimalen Code, der ausgeführt wird, einschließlich Beispieldaten, um den Fehler zu erzeugen. – bakkal

+0

Es ist etwas falsch mit Ihrem Code, weder SVM noch LR arbeitet mit einer einzigen Klasse und beide werfen den gleichen Fehler. – lejlot

+0

Ich würde gerne eine Antwort auf meine Antwort unten! Wenn es dein Problem gelöst hat! Danke! – Nico

Antwort

7

Ich lese dies in der folgenden Ausgabe auf einem ähnlichen Linearmodul: https://github.com/lensacom/sparkit-learn/issues/49

„Leider dies in der Tat einen Fehler ist Sparkit Züge sklearn die linearen Modelle parallel, dann mittelt sie in einem Schritt reduzieren Es ist zumindest.. ein Block, der nur eines der Etiketten enthält folgende um zu überprüfen, versuchen:..

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

beheben Sie die Zugdaten Randomisierung könnten Blöcke mit einem Etikett zu vermeiden, aber diese noch für eine clevere Lösung warten“

EDIT: Ich fand eine Lösung, die obige Analyse des Fehlers war korrekt. Dies wäre eine Lösung.

Um die Felder in derselben Reihenfolge Mische ich ein Modul utils Scikit-Learn verwendet:

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

Dann diese schlurfte Arrays verwenden Ihr Modell wieder zu trainieren und es wird funktionieren!

+2

Super Männer! Es ist sehr hilfreich – imazzara