使用Azure训练导出的.pkl机器学习模型预测时出现DataException错误
问题根因
报错的核心是输入数据的格式不符合模型要求:
你当前将输入处理成了shape=(1,)的numpy数组,数组内唯一的元素是包含17个特征的字典,模型会把整个字典识别为1个特征,因此触发了「训练特征数17和输入特征数1不匹配」的错误。
从你提供的Azure官方评分脚本可以明确,该模型训练时接收的输入是带对应字段的pandas DataFrame,不需要转成numpy数组。
修正后的代码
import pickle import pandas as pd Pkl_Filename = 'model.pkl' with open(Pkl_Filename, 'rb') as file: Classifier_Model = pickle.load(file) # 直接将特征列表转为DataFrame即可,不需要多余的JSON序列化/反序列化操作 predict_data = pd.DataFrame([{ "Width": 25.99737167, "Length": 171.4788666, "Ratio": 6.596007809, "Perimter": 394.9524765, "Area": 4458, "Angle": 14.5224762, "R": 127, "G": 126, "B": 129, "H": 130, "S": 6, "V": 129, "H1": 130, "L1": 128, "S1": 3, "# Of Points": 36, "Epsilon": 2 }]) # 直接传入DataFrame进行预测 result = Classifier_Model.predict(predict_data) print(result)
注意事项
- 确保DataFrame的列名和训练时的特征名完全一致,列的顺序不需要和训练时对齐,pandas会自动匹配列名。
- 如果后续需要使用JSON格式传参,只需要把JSON解析后的
data字段列表直接传入pd.DataFrame()即可,不要转成numpy数组。
内容的提问来源于stack exchange,提问作者Crazy
相关产品推荐
相关产品推荐

