我是使用 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])
有了这个,我期待看到“圣地亚哥”的价值。不确定,为什么我会得到“冠军”作为输出。
有人可以帮我解决这个问题吗?