首页 > 解决方案 > sklearn 预测期间的异常:float() 参数必须是字符串或数字,而不是“dict”(错误代码:2)

问题描述

我正在尝试遵循本教程(https://cloud.google.com/ml-engine/docs/deploying-models)。

在这里,我试图预测本地目录中 input_json 的简单模型(泰坦尼克号)的输出。

我被困在进行本地预测的部分,我需要提供一个 input.json。

对于我提供的输入 json,我在 sklearn 预测期间反复收到错误为异常:float() 参数必须是字符串或数字,而不是“dict”(错误代码:2)

我的 input.json 文件包含:

{"Pclass" : 3, "SibSp" : 1, "Parch" : 0, "Sex_female" : 0, "Sex_male" : 1}

此外,我已经从训练模型的输入中删除了所有浮点特征,上述特征是唯一用于相同的特征。

标签: pythonmachine-learninggoogle-cloud-platform

解决方案


Sklearn 不适用于json. 您需要将数据转换为 numpy 数组或 pandas 数据框之类的东西。在这种情况下,熊猫数据框可能更方便。它看起来像这样:

import pandas as pd

# the following line is just to simulate
# pass just your dicts to from_records below
data= [
    {"Pclass" : 3, "SibSp" : 1, "Parch" : 0, "Sex_female" : 0, "Sex_male" : 1},
    {"Pclass" : 3, "SibSp" : 2, "Parch" : 0, "Sex_female" : 1, "Sex_male" : 0},
]

df= pd.DataFrame.from_records(data)

然后传递这个数据框df来训练你的模型。不要忘记传递您的标签。例如,如果它们是上述 json 文档的一部分(例如 key=survived),您可以像这样训练您的模型:

your_model.fit(df[['PClass', 'SibSp', 'Parch', 'Sex_female', 'Sex_male']], df['survived'])

推荐阅读