用scikit了解准确度,用我自己的语料库学习?

2024-04-29 01:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我已经准备好使用scikit learn和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],以及一旦我对自己的语料库的测试集进行分类,我如何才能“达到”或获得这些值。有谁能帮我解决这个问题吗?。

举个例子:

培训数据:

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.

测试数据:

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

Tags: fromimporttrueesas分类desklearn
2条回答

你的例子有一个小错误。台词:

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

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

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

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

results = mnb.predict(testset)

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

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

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

The problem is i dont understand what are: y_pred = [0, 2, 1, 3] and y_true = [0, 1, 2, 3] and how can i "reach" or obtain these values once i Classified test set of my own corpus. Could anybody help me with this issue?.

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

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

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

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

相关问题 更多 >