机器学习模型预测训练标签本身作为结果

问题描述 投票:0回答:1

我正在尝试构建一个模型,根据具有“消息”、“尾巴”和“手指”特征的数据来预测“物种”,并标记“物种”(请参阅下面的 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 个条目)。它实际上并不预测测试数据的任何内容。我不明白为什么代码不起作用。有人可以帮忙吗?

python machine-learning text-classification naivebayes machine-learning-model
1个回答
0
投票

问题是您将测试数据读入

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']
进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.