数据集中机器学习模型的预测模式



我正在尝试对文本进行情感分析。我有909个电子邮件中常用的短语,我根据它们在孤立的情况下的愤怒程度给它们打了10分。

现在,我将这个.csv文件上传到Jupyter Notebook,并在其中导入以下模块:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer

现在,我将这两列定义为"短语"one_answers"愤怒":

df=pd.read_csv('Book14.csv', names=['Phrase', 'Anger'])
df_x = df['Phrase']
df_y = df['Anger']

随后,我将这些数据拆分为20%用于测试,80%用于训练:

x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, test_size=0.2, random_state=4)

现在,我使用TfidfVectorizer将x_train中的单词转换为数值数据:

tfidfvectorizer = TfidfVectorizer(analyzer='word', stop_words='en')
x_traincv = tfidfvectorizer.fit_transform(x_train.astype('U'))

现在,我将x_traincv转换为数组:

a = x_traincv.toarray()

我还将x_testcv转换为数值数组:

x_testcv=tfidfvectorizer.fit_transform(x_test)
x_testcv = x_testcv.toarray()

现在我有

mnb = MultinomialNB()
b=np.array(y_test)
error_score = 0
b=np.array(y_test)
for i in range(len(x_test)):
mnb.fit(x_testcv,y_test)
testmessage=x_test.iloc[i]
predictions = mnb.predict(x_testcv[i].reshape(1,-1))
error_score = error_score + (predictions-int(b[i]))**2
print(testmessage)
print(predictions)
print(error_score/len(x_test))

然而,我得到的结果的一个例子是:

带回来[0]这是非常感激时[0]提前道歉[0]你能不能[0]到时见[0]我希望这封邮件能找到你。[0]提前感谢[0]我很遗憾地通知你[0]你完全正确[0]我深感遗憾[0]射穿我[0]我很期待[0]我已经说过了[0]你好[0]我们希望所有的学生[0]如果还不算太晚的话[0]

,这种情况会大量重复,即使是那些明显非常愤怒的短语。当我从.csv文件中删除所有包含"0"的数据时,现在的模态值(10)是我的句子的唯一预测。

为什么会发生这种情况?这是某种最小化错误的奇怪方法吗?我的代码中有任何固有的缺陷吗?我应该采取不同的方法吗?

两件事,你正在用测试集拟合多项式nb。在你的循环中你有mnb.fit(x_testcv,y_test)但是你应该输入mnb.fit(x_traincv,y_train)

第二,在执行预处理时,你应该只在训练数据上调用fit_transform,而在测试数据上,你应该只调用transform方法。

最新更新