如何部署多特征训练的机器学习模型,解决predict()多特征预测异常问题
解决sklearn模型predict()多特征单样本预测问题
嘿,我太懂你碰到的这个坑了!你用的sklearn模型里,predict()方法对输入格式是有要求的——它需要的是二维数组,哪怕你只有一个待预测的样本也得遵循这个规则。
你之前直接传[46.8,11,7,0.686563,6.540829e-08,1.133174e-09]这种一维列表,模型会误以为这是6个单特征的样本,而不是1个拥有6个特征的样本,这就和你训练模型时的特征维度不匹配,自然就出问题啦。
给你两种简单的解决办法:
1. 单样本预测(你的场景)
把输入数据再嵌套一层括号,转成二维列表就行,代码改成这样:
from sklearn.externals import joblib model = joblib.load('SVM_LINEAR') # 给输入套一层括号,变成二维结构 input_data = [[46.8,11,7,0.686563,6.540829e-08,1.133174e-09]] pred_result = model.predict(input_data) print(pred_result)
2. 多样本预测(提前给你备着)
要是以后需要一次性预测多个样本,只要把每个样本都放在一个子列表里,整体组成一个二维列表就好:
from sklearn.externals import joblib model = joblib.load('SVM_LINEAR') # 每个子列表对应一个待预测的多特征样本 input_data = [ [46.8,11,7,0.686563,6.540829e-08,1.133174e-09], [32.1,9,6,0.712,5.8e-08,1.0e-09] ] pred_results = model.predict(input_data) print(pred_results)
本质上就是sklearn的API要求输入特征矩阵的形状是(样本数量, 特征数量),咱们把输入调整成符合这个形状的结构,模型就能正常工作啦~
内容的提问来源于stack exchange,提问作者Jayasuriya Perera
相关产品推荐
相关产品推荐

