2012-11-09 8 views
15

Schnelle SVM-Frage für scikit-learn. Wenn Sie eine SVM trainieren, dann ist es so etwas wieNon-Integer-Klassenetiketten Scikit-Learn

from sklearn import svm 
s = svm.SVC() 
s.fit(training_data, labels) 

Gibt es eine Möglichkeit für labels eine Liste eines nicht-numerischen Typ zu sein? Zum Beispiel, wenn ich Vektoren als "Katze" oder "Hund" klassifizieren möchte, ohne eine Art externe Nachschlagetabelle zu haben, die "Katze" und "Hund" in 1 und 2 codiert. Wenn ich versuche, nur eine Liste von Strings übergeben, bekomme ich ...

ValueError: invalid literal for float(): cat

Also, es ist nicht wie nur schiebend Strings in labels sieht funktioniert. Irgendwelche Ideen?

Antwort

9

Die jüngste Version von sklearn ist in der Lage Zeichenfolge als die Etiketten zu verwenden. Zum Beispiel:

from sklearn.svm import SVC 
clf = SVC() 
x = [[1,2,3], [4,5,6]] 
y = ['dog', 'cat'] 
clf.fit(x,y) 

yhat = clf.predict([[1,2,5]]) 
print yhat[0] 
18

Das Übergeben von Strings als Klassen direkt ist auf meinem Todo, aber es wird noch nicht in den SVMs unterstützt. Für den Moment haben wir die LabelEncoder, die die Buchhaltung für Sie tun können.

[Bearbeiten] Dies sollte nun aus der Box [/ edit] arbeitet