使用 sklearn 获得相同的精度和召回率 (K-NN) 值

Posted

技术标签:

【中文标题】使用 sklearn 获得相同的精度和召回率 (K-NN) 值【英文标题】:Getting same value for Precision and Recall (K-NN) using sklearn 【发布时间】:2018-01-20 05:02:12 【问题描述】:

更新的问题: 我这样做了,但是我在精度和召回率方面得到了相同的结果,是因为我使用的是average ='binary'

但是当我使用average='macro' 时,我收到以下错误消息:

测试自定义评论 messageC:\Python27\lib\site-packages\sklearn\metrics\classification.py:976: 弃用警告:从 0.18 版开始,二进制输入将不会 在使用平均精度/召回率/F-score 时特别​​处理。请 使用 average='binary' 仅报告积极的班级表现。 '积极的班级表现。',弃用警告)

这是我更新的代码:

path = 'opinions.tsv'
data = pd.read_table(path,header=None,skiprows=1,names=['Sentiment','Review'])
X = data.Review
y = data.Sentiment
#Using CountVectorizer to convert text into tokens/features
vect = CountVectorizer(stop_words='english', ngram_range = (1,1), max_df = .80, min_df = 4)
X_train, X_test, y_train, y_test = train_test_split(X,y,random_state=1, test_size= 0.2)
#Using training data to transform text into counts of features for each message
vect.fit(X_train)
X_train_dtm = vect.transform(X_train) 
X_test_dtm = vect.transform(X_test)




#Accuracy using KNN Model
KNN = KNeighborsClassifier(n_neighbors = 3)
KNN.fit(X_train_dtm, y_train)
y_pred = KNN.predict(X_test_dtm)
print('\nK Nearest Neighbors (NN = 3)')



#Naive Bayes Analysis
tokens_words = vect.get_feature_names()
print '\nAnalysis'
print'Accuracy Score: %f %%'% (metrics.accuracy_score(y_test,y_pred)*100)
print "Precision Score: %f%%" %  precision_score(y_test,y_pred, average='binary')
print "Recall Score: %f%%" %  recall_score(y_test,y_pred, average='binary')

通过使用上面的代码,我得到了相同的精度和召回值。

感谢您回答我的问题,非常感谢。

【问题讨论】:

【参考方案1】:

要计算precisionrecall指标,您应该从sklearn.metrics导入相应的方法。

如文档中所述,它们的参数是真实标签和预测标签的一维数组:

from sklearn.metrics import precision_score
from sklearn.metrics import recall_score

y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]

print('Calculating the metrics...')

recision_score(y_true, y_pred, average='macro')
>>> 0.22

recall_score(y_true, y_pred, average='macro')
>>> 0.33

【讨论】:

感谢您的回答,但我在计算精度和召回率方面仍然存在一些问题,我得到的值相同,您可以看看我更新的问题吗?非常感谢 准确率和召回率指标获得相同的值不是问题。这只是您的数据的一个特点。补充一下,您收到的消息不是错误,它表明您的输入是二进制的,即。 e.零或一,因此您应该使用average='binary' 来计算精度和召回指标。

以上是关于使用 sklearn 获得相同的精度和召回率 (K-NN) 值的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn 获得精确度和召回率

使用sklearn获得精度和召回

Top-k 推荐中的召回率、召回率@k 和精度

如何使用 python 打印精度、召回率、f 分数?

如何使用 PySpark 测量逻辑回归的精度和召回率?

在 Keras 分类神经网络中进行精度交易以获得更好的召回率