2016-06-12 55 views
0

我正在嘗試對我的文章執行Leave-one-out簡歷,但是當我運行該過程時,我獲得了100%的準確性,我無法弄清楚我錯過了什麼。這是我的代碼:給我100%的分數,我在這裏錯過了什麼?

import sklearn 
from sklearn.datasets import load_files 
import numpy as np 
from sklearn.cross_validation import cross_val_score, LeaveOneOut 
from scipy.stats import sem 
from sklearn.naive_bayes import MultinomialNB 

bunch = load_files('corpus', shuffle = False) 

X = bunch.data 
y = bunch.target 

from sklearn.feature_extraction.text import CountVectorizer 
count_vect = CountVectorizer(stop_words = 'english') 
X_counts = count_vect.fit_transform(X) 

from sklearn.feature_extraction.text import TfidfTransformer 
tfidf_transformer = TfidfTransformer() 
X_tfidf = tfidf_transformer.fit_transform(X_counts) 

estimator = MultinomialNB().fit(X_tfidf, y) 
cv = LeaveOneOut(26) 
scores = cross_val_score(estimator, X_tfidf, y, cv = cv) 
print scores 
print ("Mean score: {0:.3f} (+/-{1:.3f})").format(np.mean(scores), sem(scores)) 

而且我得到了與輸入數據相同的分類,這有點奇怪。我的結果:

[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] 
Mean score: 0.577 (+/-0.099) 

我的輸入數據分類:

([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) 

我不明白的地方我的LOO CV失敗。 :S

幫助將不勝感激。

回答

0

從最後一行打印出來的LOOCV 0.577是不是您的準確性分數?

cross_val_score函數返回CV每次摺疊得分數(默認精度)。您打印的數組scores是準確性分數而不是預測。

+0

嘿,這是什麼讓我感到困惑,產生的準確性是0.577,但預測輸出是相同的黃金標準,所以所有的文章根據陣列輸出正確分類。也許我不明白什麼。 – user3118533

+0

您打印的數組不代表標籤,而是準確度。 數組中的每個元素都是LOOCV每次迭代的準確性分數。您應該使用這些值的平均值來計算總體預測精度爲0.577 – anilbey

相關問題