2015-11-04 58 views
1

我在sklearn中使用了混淆矩陣。每行是哪個標籤在混淆矩陣中python

我的問題是,我無法理解每一行是哪個標籤!我的標籤是[0, 1, 2, 3, 4, 5]

我想知道如果第一行是標籤0,第二行是標籤1等?

爲了確保,我試過這個代碼,我認爲通過標籤的順序來製作混淆矩陣。但是我得到了一個錯誤。

cfr = RandomForestClassifier(n_estimators = 80, n_jobs = 5) 
cfr.fit(X1, y1) 
predictedY2 = cfr.predict(X2) 
shape = np.array([0, 1, 2, 3, 4, 5]) 
acc1 = cfr.score(X2, y2,shape) 

錯誤是:

acc1 = cfr.score(X2, y2,shape) 
TypeError: score() takes exactly 3 arguments (4 given)` 
+0

「crf.score」的文檔是什麼? – hpaulj

+0

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.score – Talia

+0

4個參數是自我和3個明確的。我會嘗試在最後使用關鍵字。並沒有檢查版本。關鍵字參數可能是最近的增加。我沒有這個包,所以無法檢查我自己。儘管我可以探索github代碼。 – hpaulj

回答

0

score給出了分類器的精確度,即每數的實例數正確地預測。你正在尋找的是predict函數,該函數產生爲每個輸入預測的類別。檢查出這個例子:

import numpy as np 
from sklearn.ensemble import RandomForestClassifier as RFC 
from sklearn.metrics import confusion_matrix 
from sklearn.datasets import make_classification 

# Add a random state to the various functions so we all have the same output. 
rng = np.random.RandomState(1234) 

# Make dataset 
X,Y = make_classification(n_samples=1000, n_classes=6, n_features=20, n_informative=15, random_state=rng) 
# take random 75% of data as training, leaving rest for test 
train_inds = rng.rand(1000) < 0.75 

# create and train the classifier 
rfc = RFC(n_estimators=80, random_state=rng) 
rfc.fit(X[train_inds], Y[train_inds]) 

# O is the predicted class for each input on the test data 
O = rfc.predict(X[~train_inds]) 

print "Test accuracy: %.2f%%\n" % (rfc.score(X[~train_inds],Y[~train_inds])*100) 

print "Confusion matrix:" 
print confusion_matrix(Y[~train_inds], O) 

此打印:

Test accuracy: 57.92% 

Confusion matrix: 
[[24 4 3 1 1 6] 
[ 5 22 4 4 1 1] 
[ 5 2 18 5 3 2] 
[ 2 4 2 29 1 4] 
[ 3 1 3 2 28 3] 
[10 4 4 3 8 18]] 

confusion_matrix文檔,混淆矩陣的i,j組分是已知i類的但分類爲對象的數目j。因此,在上面,正確分類的對象在對角線上,但是如果您看第3行第0列,則看起來像兩個「第3類」對象被錯誤分類爲「第0類」對象。

希望這會有所幫助!