Python 为什么在情感检测中使用SVM可以获得100%的训练精度?

Python 为什么在情感检测中使用SVM可以获得100%的训练精度?,python,machine-learning,scikit-learn,svm,Python,Machine Learning,Scikit Learn,Svm,我正在尝试创建一个自动情绪检测器,它应该根据目标上下文文本分配情绪(积极、消极、中立等)。但不知怎的,我得到了100%的训练准确率。我想弄明白这一点已经太久了,我觉得我现在错过了一些相当明显的东西。我做错了什么 如果格式不正确,我真的很抱歉。我几天前加入了这个网站,在这混乱的环境中,我很绝望,很匆忙的完成了我的大学最后期限,所以请原谅我 import pandas as pd import os df_train = pd.read_csv("combined-sentiment-judgme

我正在尝试创建一个自动情绪检测器,它应该根据目标上下文文本分配情绪(积极、消极、中立等)。但不知怎的,我得到了100%的训练准确率。我想弄明白这一点已经太久了,我觉得我现在错过了一些相当明显的东西。我做错了什么

如果格式不正确,我真的很抱歉。我几天前加入了这个网站,在这混乱的环境中,我很绝望,很匆忙的完成了我的大学最后期限,所以请原谅我

import pandas as pd
import os

df_train = pd.read_csv("combined-sentiment-judgments.tsv", sep='\t', header=None)
df_train.head()

df_train.shape
结果是:(980,6)

这是我打印的几行文字,情感是用英语写的,但句子是用芬兰语写的:

中立的Kyseinen auto taitaa olla Mursu。尼桑·尼基

中性、阳性、中性、不明确的TällähetkelläLiptonin vihreäsitrushedelmätee

消极的,中立的,消极的,消极的mutta eikös Windows 8 ole ihan paska?恩尼特缪斯

正,混合,中性,混合Tarkoitus olisi ostaa B230英尺koneellinen沃尔沃,k


import sklearn
from sklearn.feature_extraction.text import CountVectorizer

vectorizer=CountVectorizer(max_features=100000,binary=True,ngram_range=(1,1))
feature_matrix=vectorizer.fit_transform(context)
print("shape=",feature_matrix.shape)
结果:形状=(98010861)

结果再次表明:

(78427827)

(19627827)

这就是我得到的:

开发0.08673469387755102


训练1.0

非常高的训练精度可能表明你的标签在你的功能中。而且,OP是初学者,因此他/她可能只是训练数据太多。这意味着模型开始“记忆”数据。这通常是因为设置了较高的学习率。除非你告诉我们测试的准确度是多少(假设你已经分割了你的数据集),否则这无关紧要,那么我们当然可以进行修复……
@jakub
如果我的标签混合在一起,我应该修复什么?
@neel g
你说得很对,我是一个初学者,所以情况很可能就是这样。此外,我在这里发布的是我为此编写的所有代码。这意味着我没有分割数据集?我不知怎的认为我的训练准确度是上述1.0。非常高的训练准确度可能表明你的标签在你的功能中。此外,OP是一个初学者,因此他/她可能只是过度训练数据。这意味着模型开始“记忆”数据。这通常是因为设置了较高的学习率。除非你告诉我们测试的准确度是多少(假设你已经分割了你的数据集),否则这无关紧要,那么我们当然可以进行修复……
@jakub
如果我的标签混合在一起,我应该修复什么?
@neel g
你说得很对,我是一个初学者,所以情况很可能就是这样。此外,我在这里发布的是我为此编写的所有代码。这意味着我没有分割数据集?我不知怎的认为我的训练准确度是上面提到的1.0。

import sklearn
from sklearn.feature_extraction.text import CountVectorizer

vectorizer=CountVectorizer(max_features=100000,binary=True,ngram_range=(1,1))
feature_matrix=vectorizer.fit_transform(context)
print("shape=",feature_matrix.shape)
from sklearn.model_selection import train_test_split

train_texts, dev_texts, train_labels, dev_labels=train_test_split(context,labels,test_size=0.2)
vectorizer=CountVectorizer(max_features=100000,binary=True,ngram_range=(1,2))
feature_matrix_train=vectorizer.fit_transform(train_texts)
feature_matrix_dev=vectorizer.transform(dev_texts)

print(feature_matrix_train.shape)
print(feature_matrix_dev.shape)
import sklearn.svm
classifier=sklearn.svm.LinearSVC(C=0.009,verbose=1)
classifier.fit(feature_matrix_train, train_labels)

print("DEV",classifier.score(feature_matrix_dev, dev_labels))
print("TRAIN",classifier.score(feature_matrix_train, train_labels))