2017-04-04 3 views
0

Ich versuche ein maschinelles Lernmodell mit dem Iris-Datensatz zu erstellen (indem ich Tutorial beobachte, Anfänger zu maschinellem Lernen und Data Science)), bisher habe ich es mit Random Forest Sichter, aber jetzt möchte ich meine Prognosen gegen individuelle Eingabe überprüfen, sieht mein Haupt-Code für die Klassifizierung wie folgt aus:JSONDecodeError: Erwarteter Wert: Zeile 1 Spalte 1 (char 0) auf Iris-Datensatz

X= iris.data 
y= iris.target 
X_train, X_test, y_train, y_test = train_test_split(X,y) 
rfc = RandomForestClassifier(n_estimators=100, n_jobs=2) 
rfc.fit(X_train, y_train) 
print ("Accuracy = %0.2f" % accuracy_score(y_test, rfc.predict(X_test))) 
print (classification_report(y_test, rfc.predict(X_test))) 
pickle.dump(rfc, open("iris_rfc1.pkl", "wb")) 
my_random_forest = pickle.load(open("iris_rfc1.pkl","rb")) 
url= "http://localhost:9000/api" 
data = json.dumps({'sl':5.8,'sw':4,'pl':2,'pw':9}) 
r = requests.post(url, data) 

print (r.json()) 

die Flasche Datei-I-Verbindung herzustellen verwenden:

Aber wenn ich das Programm ausführen bekomme ich Fehler "JSOND ecodeError: Erwartung Wert: Zeile 1, Spalte 1 (char 0)“

Weitere Details: Ich Jupyter Notebook bin mit für die Herstellung von Vorhersage- und Atom für die Kolben-Datei erstellen, Pyhton Version 3

Antwort

0

Das Ergebnis wird durch die gelieferte Mit der Funktion make_predict() tritt der Fehler auf.

JSON (Java Script Object Notation) kann nur eine begrenzte Anzahl von group Datentypen darstellen/serialisieren, und Numpy-Objekte gehören nicht zu dieser Gruppe.

Betrachtet man die Fehlermeldung, muss die Zahl 0 die vom Random Forest Classifier generierte Vorhersage sein und RFCs nur auf Numpy-Arrays. Auch ihre Ausgaben haben denselben Datentyp. Die .json() -Methode kann ein numpy Objekt nicht serialisieren.

>>>a = rfc.predict(np.array([1,2,3,4]).reshape(1,-1)) 
>>>a, type(a) 
(array([1]), numpy.ndarray) 

>>>b = a[0] 
>>>b, type(b) 
(1, numpy.int32) 

>>>c = np.asscalar(b) 
>>>c, type(c) 
(1, int) 

Die y_hat ist ein numpy Array, das erste Element der y_hat (Ausgangsgröße) ist von dem Typ np.int32. Mit der Methode np.asscalar() kann es als int interpretiert werden, json() kann es identifizieren.

Verwandte Themen