JSONDecodeError:期望值:Iris数据集上的第1行第1列(char 0)

时间:2017-04-04 08:45:36

标签: python flask data-science

我正在尝试使用Iris数据集创建机器学习模型(通过观看教程,完成机器学习和数据科学的新手来实现),到目前为止我已经使用随机森林分类器对其进行了分类,但现在我希望检查我对自定义输入的预测,我的主要分类代码如下:

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())

我用来建立连接的Flask文件:

my_random_forest = pickle.load(open('iris_rfc1.pkl','rb'))
app = Flask(__name__)

@app.route('/api', methods=['POST'])
def make_predict():
    data = request.get_json(force = True)
    predict_request = [data['sl'],data['sw'], data['pl'], data['pw']]
    predict_request = np.array(predict_request)
    y_hat = my_random_forest.predict(predict_request)
    output = [y_hat[0]]
    return jsonify(results = output)

if __name__ == '__main__':
    app.run(port=9000, debug = True)

但是当我运行程序时,我收到错误“JSONDecodeError:Expecting value:line 1 column 1(char 0)”

其他细节:我正在使用Jupyter Notebook进行预测,使用原子创建烧瓶文件,Pyhton Version 3

1 个答案:

答案 0 :(得分:0)

函数make_predict()传递的结果是发生错误的地方。

JSON(Java脚本对象表示法)只能表示/序列化有限的group数据类型,而Numpy对象不属于该组。

查看错误消息,数字0必须是随机森林分类器生成的预测,而RFC只能在Numpy数组上运行。它们的输出也是相同的数据类型。 .json()方法不知道如何序列化numpy对象。

>>>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)

y_hat是一个numpy数组,y_hat(输出变量)的第一个元素是np.int32类型。使用np.asscalar()方法将其转换为int,json()将能够识别它。