2016-07-26 27 views
2

Ich verwende scikit-learn um einen einfachen überwachten Lernalgorithmus zu implementieren. Im Wesentlichen folge ich dem Tutorial here (aber mit meinen eigenen Daten).SVC (Support Vector Classification) mit kategorialen (String) Daten als Label

Ich versuche, um das Modell zu passen:

clf = svm.SVC(gamma=0.001, C=100.) 
clf.fit(features_training,labels_training) 

Aber in der zweiten Zeile, erhalte ich eine Fehlermeldung: ValueError: could not convert string to float: 'A'

Der Fehler wird erwartet, weil label_training String-Werte enthält, die drei verschiedenen Kategorien darstellen, wie zum als A, B, C.

Die Frage ist also: Wie verwende ich SVC (Support-Vektor-Klassifikation), wenn die markierten Datenkategorien in Form von Zeichenkette darstellen. Eine intuitive Lösung für mich scheint einfach jede Zeichenfolge in eine Zahl zu konvertieren. Zum Beispiel A = 0, B = 1 usw. Aber ist das wirklich die beste Lösung?

Antwort

2

Werfen Sie einen Blick auf http://scikit-learn.org/stable/modules/preprocessing.html#encoding-categorical-featuressection 4.3.4 Encoding categorical features.

Insbesondere sehen die OneHotEncoder verwenden. Dadurch werden kategorische Werte in ein Format konvertiert, das von SVMs verwendet werden kann.

+1

Sie sollten zumindest direkt mit dem Abschnitt verlinken und den OneHotEncoder erwähnen. –

+0

Aber wie kann Ihnen das Hotencoding helfen, wenn Sie versuchen, eine neue Farbe vorherzusagen? Vielleicht musst du in deinem Fall das Modell umschulen. Hast du irgendeine Lösung? – gtzinos

0

können Sie diesen Code versuchen:

from sklearn import svm 
X = [[0, 0], [1, 1],[2,3]] 
y = ['A', 'B','C'] 
clf = svm.SVC(gamma=0.001, C=100.) 
clf.fit(X, y) 
clf.predict([[2,3]]) 

Ausgang: Array ([ 'C'], dtype = '| S1')

Sie sollten die abhängige Variable nehmen (y) als 'Liste'.