0

我是使用 scikit 的 Python ML 的新手。我正在研究一个解决方案来创建一个包含三列宠物、所有者和位置的模型。

import pandas
import joblib
from sklearn.tree import DecisionTreeClassifier
from collections import defaultdict
from sklearn import preprocessing 

df = pandas.DataFrame({
    'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 
    'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 
    'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 
                 'New_York']
})

现在,我使用标签编码器对整个数据帧进行编码。

le = preprocessing.LabelEncoder()
df_encoded = df.apply(le.fit_transform)
df_array=df_encoded.values

现在,我将编码数组拆分为输入集(宠物和所有者)和输出集(位置)

IpSet = df_array[:,0:2]
Opset = df_array[:,2:3]

然后,我创建了一个新的决策树分类器模型并拟合输入和输出集。

model = DecisionTreeClassifier()
model.fit(IpSet,Opset)

现在,我正在尝试使用新数据框的模型来预测位置。我正在使用与之前使用的相同的标签编码器。

df_Predict = pandas.DataFrame({
    'pets': ['cat'], 
    'owner': ['Champ']})
df_encoded_Predict = df_Predict.apply(le.fit_transform)
predictions_train = model.predict(df_encoded_Predict)
print(le.inverse_transform(predictions_train)[:1])

有了这个,我期待看到“圣地亚哥”的价值。不确定,为什么我会得到“冠军”作为输出。

有人可以帮我解决这个问题吗?

4

1 回答 1

0

您遵循的逻辑不正确。

    df_encoded = df.apply(le.fit_transform)

在这里,适用于每一列的相同编码器 (le) 和该行执行 le 的末尾只有位置信息。

当您需要使用已安装的编码器时,请使用 .transform() 方法而不是跟随。

       df_encoded_Predict = df_Predict.apply(le.fit_transform)
于 2022-01-19T17:13:50.723 回答