2016-06-12 57 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

相关问题