首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scikit理解accuracy_score -使用我自己的语料库学习?

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

Stack Overflow用户
提问于 2014-12-19 09:42:09
回答 2查看 10.7K关注 0票数 3

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

documentation中,我读到了以下内容:

代码语言:javascript
复制
>>> 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],一旦我对自己语料库的测试集进行了分类,我如何才能“达到”或获得这些值。有人能帮我解决这个问题吗?

让我们以下面的例子为例:

训练数据:

代码语言:javascript
复制
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.

测试数据:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-19 11:02:19

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

问题是,我不明白什么是: y_pred = 0,2,1,3和y_true = 0,1,2,3,一旦我对自己的语料库测试集进行分类,我如何“达到”或获得这些值。有人能帮我解决这个问题吗?

回答:正如您所知道的,分类器应该将数据分类到不同的类别。在上面的示例中,假设的数据有四个不同的类,分别用标签0、1、2和3指定。因此,如果我们的数据是关于对单色图像中的颜色进行分类的,则标签将表示如下内容:蓝色、红色、黄色和绿色。上面的例子显示的另一个问题是,数据中只有四个样本。例如,他们只有四张图片,而y_true显示了他们的真实标签(或者我们称之为groundtruth)。y_pred显示了分类器的预测。现在,如果我们比较两个列表是否完全相同,我们有100%的准确率,然而,在这种情况下,你会看到两个标签预测标签与它们的基本事实不匹配。

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

代码语言:javascript
复制
tags = ['SPAM','HAM','another_class']

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

票数 2
EN

Stack Overflow用户

发布于 2014-12-19 10:33:32

在你的例子中有一个小错误。这行代码:

代码语言:javascript
复制
tags = ['SPAM','HAM','another_class']

是错误的。语料库中的每个示例(句子/文档)都应该有一个标签。所以tags不应该是3,而应该是你的trainset的长度。

这同样适用于测试集。您应该有一个与testset长度相同的变量test_tags。这些标签通常是'test.txt‘文件中的一列,但您也可以从其他地方获取它。这将是您的y_true

当您在测试集上进行预测时,您将得到一个与testset长度相同的向量

代码语言:javascript
复制
results = mnb.predict(testset)

即,对测试集中的每个示例进行标签预测。

这是您的y_pred。我省略了一些与多类与单类情况相关的细节(另一个问题的材料),但这应该可以回答您的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27558629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档