簡體   English   中英

用scikit理解accuracy_score - 用我自己的語料庫學習?

[英]Understanding accuracy_score with scikit-learn with my own corpus?

假設我已准備好用scikit進行一些文本分類學習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]我怎樣才能“達到”或獲得這些值一旦我分類我的測試集自己的語料庫。 有人可以幫我解決這個問題嗎?

讓我們舉個例子如下:

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.

測試數據:

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 = ['SPAM','HAM','another_class']

是錯的。 您的語料庫中的每個示例(句子/文檔)都應該有一個標記。 所以tags不應該是3,而是trainset的長度。

這同樣適用於測試集。 你應該有一個變量test_tags ,其長度與testset相同。 這些標記通常是文件'test.txt'中的一列,但您可以從其他地方獲取它。 這將是你的y_true

當您在測試集上預測時,您將獲得與testset相同長度的向量:

results = mnb.predict(testset)

即測試集中每個示例的標記預測。

這是你的y_pred 我省略了一些與多類vs單類案例相關的細節(另一個問題的材料),但這應該回答你的問題。

我希望這會對你有所幫助。 您詢問:

問題是我不明白是什么: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個樣本(可能不是您真正想要的樣本)。 因此,此列表的長度應等於訓練數據中的樣本數。 如果您有其他問題,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM