用scikit理解accuracy_score - 用我自己的语料库学习?

时间:2014-12-19 01:42:09

标签: python machine-learning nlp scikit-learn

假设我已准备好使用scikit进行一些文本分类,并使用SVC进行学习。首先我将语料库矢量化,我将数据分成测试和训练集,然后我将标签设置到火车组中。现在我想获得分类的准确性。

documentation我读了以下内容:

>>> import numpy as np
>>> from sklearn.metrics import accuracy_score
>>> y_pred = [0, 2, 1, 3]
>>> y_true = [0, 1, 2, 3]
>>> accuracy_score(y_true, y_pred)
0.5
>>> accuracy_score(y_true, y_pred, normalize=False)
2

问题是我不明白什么是:y_pred = [0, 2, 1, 3]y_true = [0, 1, 2, 3]以及我怎样才能达到"或者在我自己的语料库的分类测试集中获得这些值。有人可以帮我解决这个问题吗?

以下举例说明:

trainingdata:

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.

TESTDATA:

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


import codecs, re, time
from itertools import chain

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

trainfile = 'train.txt'
testfile = 'test.txt'

# Vectorizing data.
train = []
word_vectorizer = CountVectorizer(analyzer='word')
trainset = word_vectorizer.fit_transform(codecs.open(trainfile,'r','utf8'))
tags = ['bs','pt','es','sr']

# Training NB
mnb = MultinomialNB()
mnb.fit(trainset, tags)

# Tagging the documents
codecs.open(testfile,'r','utf8')
testset = word_vectorizer.transform(codecs.open(testfile,'r','utf8'))
results = mnb.predict(testset)

print results

2 个答案:

答案 0 :(得分:2)

您的示例中有一个小错误。这一行:

tags = ['SPAM','HAM','another_class']

错了。您的语料库中的每个示例(句子/文档)都应该有一个标记。因此tags不应该是3 trainset

的长度。test_tags

同样适用于测试集。您应该有一个与testset长度相同的变量y_true。这些标记通常是文件中的一个列" test.txt'但你可能会从其他地方得到它。这将是您的testset

当您在测试集上预测时,您将获得与results = mnb.predict(testset) 长度相同的向量:

y_pred

即。测试集中每个示例的标记预测。

这是您的{{1}}。我省略了一些与多类vs单一案例相关的细节(另一个问题的材料),但这应该回答你的问题。

答案 1 :(得分:2)

我希望这会对你有所帮助。你问:

  

问题是我不明白是什么:y_pred = [0,2,1,3]和   y_true = [0,1,2,3]以及我如何“达到”或获得这些值   曾经是我自己的语料库的分类测试集。任何人都可以帮助我   这个问题?。

答案:如您所知,分类器应该将数据分类到不同的类。在上面的例子中,假设数据有四个不同的类,用标签0,1,2和3指定。因此,如果我们的数据是关于在单色图像中对颜色进行分类,标签将代表如下:blue,红色,黄色和绿色。上面的例子显示的另一个问题是数据中只有四个smaples。例如,他们只有四张图片,y_true显示他们的真实标签(或者我们称之为groundtruth)。 y_pred显示分类器的预测。现在,如果我们比较两个列表是否相同,我们的准确度为100%,但是,在这种情况下,您会看到两个标签预测的标签与他们的地面真实不符。

现在,在您的示例代码中,您写了:

tags = ['SPAM','HAM','another_class']

就像我上面解释的那样,首先意味着你的数据由3个不同的类组成;而且,它表明您的数据仅包含3个样本(可能不是您真正想要的样本)。因此,此列表的长度应等于训练数据中的样本数。如果您有其他问题,请告诉我。