我正在尝试构建一个模型,根据具有“消息”、“尾巴”和“手指”特征的数据来预测“物种”,并标记“物种”(请参阅下面的 data.csv 的前几行):
留言 | 手指 | 尾巴 | 种类 |
---|---|---|---|
pluvia 乔木 aquos | 4 | 不 | 水瓶座 |
cosmix xeno nebuz odbitaz | 5 | 是的 | 佐布拉克斯 |
solarix glixx novum galaxum 类星体 | 5 | 是的 | 佐布拉克斯 |
乔木昆虫 pesros ekos dootix nimbus | 2 | 是的 | 弗洛里安 |
我的代码是:
import warnings
warnings.simplefilter("ignore")
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
df = pd.read_csv("data.csv")
X = np.asarray(df[["message", "fingers", "tail"]])
X = [str (item) for item in X]
y = df["species"]
le = LabelEncoder()
y = le.fit_transform(y)
cv = CountVectorizer()
X = cv.fit_transform(X).toarray()
model = MultinomialNB()
model.fit(X, y)
test_data = pd.read_csv('test.csv')
test_data_array = np.asarray(df[["message", "fingers", "tail"]])
test_data_array = [str (item) for item in test_data_array]
test_data_array = cv.fit_transform(test_data_array).toarray()
y_prediction = model.predict(test_data_array)
y_prediction = le.inverse_transform(y_prediction)
print(y_prediction)
我按照this教程进行了相同的操作。
问题是,当我尝试运行它时,它只是逐字输出原始训练数据的物种列,除了一些差异(有 493 个结果,而测试数据由 299 个条目组成,训练数据包含 500 个条目)。它实际上并不预测测试数据的任何内容。我不明白为什么代码不起作用。有人可以帮忙吗?
问题是您将测试数据读入
test_data
,但随后使用包含训练数据的原始 DataFrame df
来制作测试集。
更改此行:
test_data_array = np.asarray(df[["message", "fingers", "tail"]])
致:
test_data_array = np.asarray(test_data[["message", "fingers", "tail"]])
你应该有正确数量的预测。
记得还要将
y_prediction
与 test_data['species']
进行比较。