为什么分类器从测试文件预测时有一个额外的标签



在上一篇文章中,我询问了文本分类,我想更好地了解发生了什么以及scikit-learn是如何工作的,假设train.txt

Pošto je EULEX obećao da će obaviti istragu o prošlosedmičnom izbijanju nasilja na sjeveru Kosova, taj incident predstavlja još jedan ispit kapaciteta misije da doprinese jačanju vladavine prava.
De todas as provações que teve de suplantar ao longo da vida, qual foi a mais difícil? O início. Qualquer começo apresenta dificuldades que parecem intransponíveis. Mas tive sempre a minha mãe do meu lado. Foi ela quem me ajudou a encontrar forças para enfrentar as situações mais decepcionantes, negativas, as que me punham mesmo furiosa.
Al parecer, Andrea Guasch pone que una relación a distancia es muy difícil de llevar como excusa. Algo con lo que, por lo visto, Alex Lequio no está nada de acuerdo. ¿O es que más bien ya ha conseguido la fama que andaba buscando?
Vo väčšine golfových rezortov ide o veľký komplex niekoľkých ihrísk blízko pri sebe spojených s hotelmi a ďalšími možnosťami trávenia voľného času – nie vždy sú manželky či deti nadšenými golfistami, a tak potrebujú iný druh vyžitia. Zaujímavé kombinácie ponúkajú aj rakúske, švajčiarske či talianske Alpy, kde sa dá v zime lyžovať a v lete hrať golf pod vysokými alpskými končiarmi.

test.txt

Por ello, ha insistido en que Europa tiene que darle un toque de atención porque Portugal esta incumpliendo la directiva del establecimiento del peaje
Estima-se que o mercado homossexual só na Cidade do México movimente cerca de oito mil milhões de dólares, aproximadamente seis mil milhões de euros

我有这个可以执行语言识别的小脚本:

# -- coding: utf-8 --
import codecs
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
train = []
#We set the classes
tags = ['bos','pt','es','slov']
word_vectorizer = CountVectorizer(analyzer='word')

#vectorize the train and the test files
trainset = word_vectorizer.fit_transform(
    codecs.open('/Users/user/Desktop/train.txt','r','utf8'))
testset = word_vectorizer.transform(
    codecs.open('/Users/user/Desktop/test.txt','r','utf8'))
# We train the algorithm:
mnb = MultinomialNB()
mnb.fit(trainset, tags)
res = mnb.predict(testset)
print res

这是输出:['es' 'pt' 'bos'].输出的问题在于,显然又增加了一个实际上是错误的类(即 bos ) 到分类输出。我想问题在于我如何标记traintest文件,那么,如何标记这两个文件以获得正确的结果?即:['es' 'pt']

到目前为止,我知道这两个文件都需要矢量化,但我不明白这里发生了什么:

mnb = MultinomialNB()
mnb.fit(trainset, tags)
res = mnb.predict(testset)

谁能深入地解释一下剧本上面发生了什么?

您有一个空行,导致test.txt中出现额外的输入

此行逐行读取test.txt,并将每一行更改为您的特征向量:

testset = word_vectorizer.transform(
    codecs.open('/Users/user/Desktop/test.txt','r','utf8'))

额外的空行将导致一个额外的向量,该向量将被最可能的标签标记。在训练数据train.txt中,所有标签都是可能的,因此空行将采用第一个标签。

我在文本分类和Scikit上做了一些工作

mnb = MultinomialNB()        # Multinomial NB is initialized
mnb.fit(trainset, tags)      # Learning is done of the algorithm
res = mnb.predict(testset)   # Prediction is done with the trainset

我不知道为什么你在预测中得到的记录更多。以及什么编解码器什么编解码器模块正在工作。您可以为每个读取的行设置标签,这有点尴尬。

恕我直言,您应该使用停用词,通过使用它们,您将排除很多"垃圾"。
查看更多Scikit文档,互联网上有关于矢量化的资料。

相关内容

  • 没有找到相关文章

最新更新