假设我已经使用scikit-learn的SVC
进行了一些文本分类工作。首先,我对语料库进行了向量化,将数据分为测试集和训练集,然后我将标签设置到训练集中。现在我想获得分类的准确率。
从文档中,我读到了以下内容:
>>> 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 peajeEstima-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 eurosimport codecs, re, timefrom itertools import chainfrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.naive_bayes import MultinomialNBtrainfile = '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 NBmnb = MultinomialNB()mnb.fit(trainset, tags)# Tagging the documentscodecs.open(testfile,'r','utf8')testset = word_vectorizer.transform(codecs.open(testfile,'r','utf8'))results = mnb.predict(testset)print results
回答:
希望这对你有帮助。你问到:
问题是我不理解
y_pred = [0, 2, 1, 3]
和y_true = [0, 1, 2, 3]
是什么意思,以及如何在对自己的语料库的测试集进行分类后“获取”或获得这些值。能有人帮我解决这个问题吗?
回答: 如你所知,分类器的作用是将数据分类到不同的类别。在上面的例子中,假设的数据有四个不同的类别,分别用标签0、1、2和3表示。所以,如果我们的数据是关于对单色图像进行颜色分类的,标签可能代表蓝色、红色、黄色和绿色。另一个问题是,上面的例子显示数据中只有四个样本。例如,他们只有四张图片,y_true
显示它们的真实标签(我们称之为groundtruth)。y_pred
显示分类器的预测。现在,如果我们比较这两个列表,如果两者完全相同,我们的准确率就是100%,然而,在这种情况下,你会看到有两个预测的标签与它们的groundtruth不匹配。
现在,在你的示例代码中,你写了:
tags = ['SPAM','HAM','another_class']
这就像我上面解释的那样,首先,这意味着你的数据包含三个不同的类别;其次,这表明你的数据仅包含三个样本(这可能不是你真正想要的)。因此,这个列表的长度应该等于你的训练数据中的样本数量。如果你有进一步的问题,请告诉我。