2016-11-05 2 views
1

Ich implementiere ein SVM-Klassifizierungsproblem mit LIBSVM in Python. Ich habe ein numpy Array bestehend aus 1.0 und -1.0 namens train_labels und die entsprechenden Features in einem anderen numpy Array namens train_data. Da LIBSVM keine numpigen Arrays akzeptiert, wandle ich sie mithilfe des unten stehenden Codes in Listen um.Warum fragt LIBSVM in Python nach Gleitwerten?

train_labels = train_labels.tolist() 
train_data = train_data.tolist() 

Allerdings, wenn ich sie setzen auf svm_problem wie:

prob = svm_problem(train_labels,train_data) 

Ich erhalte dann Fehler

File "C:\Anaconda\lib\site-packages\svm.py", line 109, in __init__ 
    for i, yi in enumerate(y): self.y[i] = yi 
TypeError: a float is required 

ich schon versucht, sie konvertieren mit train_labels = train_labels.astype(np.float) zu schweben vor der Konvertierung um aufzulisten aber ich bekomme immer noch den gleichen Fehler.

Die Verwendung der tolist() - Methode zum Konvertieren von numpy-Arrays in Listen vor dem Einfügen in LIBSVM-Befehle funktioniert, wenn ich sie in der Konsole ausprobiert habe.

Weiß jemand, warum ich diesen Fehler bekomme? Und wie kann ich es lösen?

+0

Übrigens benutze ich LIBSVM 3.21 – noobiejp

Antwort

0

Jungs! Nach etwas mehr Leerlauf in meinem Code habe ich festgestellt, was falsch ist.

Die Zeile train_labels = train_labels.tolist() konvertiert mein Array in eine Liste von Listen mit einem Element in der Unterliste. Ich denke, das liegt daran, dass train_labels ein n x 1-Array ist, mit dem zu beginnen ist (es wird von einer CSV-Datei gelesen).

Also muss ich es zuerst umformen, bevor Sie in die Liste konvertieren. Und es funktioniert.

train_labels = train_labels.reshape(N_train).tolist() 

Ich hoffe, dass es in Ordnung ist immer noch hier, um diese Frage zu stellen für diejenigen, beginnend LIBSVM in Zukunft zu verwenden.

Danke!