1. 四个概念定义:TP、FP、TN、FN
先看四个概念定义:
- TP,True Positive
- FP,False Positive
- TN,True Negative
- FN,False Negative
如何理解记忆这四个概念定义呢?
举个简单的二元分类问题 例子:
假设,我们要对某一封邮件做出一个判定,判定这封邮件是垃圾邮件、还是这封邮件不是垃圾邮件?
如果判定是垃圾邮件,那就是做出(Positive)的判定;
如果判定不是垃圾邮件,那就做出(Negative)的判定。
True Positive(TP)意思表示做出Positive的判定,而且判定是正确的。因此,TP的数值表示正确的Positive判定的个数。
同理,False Positive(TP)数值表示错误的Positive判定的个数。
依此,True Negative(TN)数值表示正确的Negative判定个数。
False Negative(FN)数值表示错误的Negative判定个数。
代码实现:
import numpy as np
y_true = np.array([0, 1, 1, 0, 1, 0])
y_pred = np.array([1, 1, 1, 0, 0, 1])
#true positive
TP = np.sum(np.logical_and(np.equal(y_true,1),np.equal(y_pred,1)))
print(TP)
#false positive
FP = np.sum(np.logical_and(np.equal(y_true,0),np.equal(y_pred,1)))
print(FP)
#true negative
TN = np.sum(np.logical_and(np.equal(y_true,1),np.equal(y_pred,0)))
print(TN)
#false negative
FN = np.sum(np.logical_and(np.equal(y_true,0),np.equal(y_pred,0)))
print(FN)
2. Precision、Recall、Accuracy、F1 Score(F Score,F Measure)
四个概念定义:
- precision = TP / (TP + FP)
- recall = TP / (TP + FN)
- accuracy = (TP + TN) / (TP + FP + TN + FN)
- F1 Score = 2*P*R/(P+R),其中P和R分别为 precision 和 recall
为什么要有F1 Score?也称F1 Mersure,这是因为通常情况下,precision高的话,recall就会低;precision低的时候,recall往往比较高。为了权衡这种关系(tradeoff),所以有了F值。
当=1时候,也就是我们常说的F1 Score。
代码实现:
#请先安装sklearn、numpy库
from sklearn.metrics import precision_score, recall_score, f1_score
import numpy as np
y_true = np.array([[0, 1, 1],
[0, 1, 0]])
y_pred = np.array([[1, 1, 1],
[0, 0, 1]])
y_true = np.reshape(y_true, [-1])
y_pred = np.reshape(y_pred, [-1])
p = precision_score(y_true, y_pred, average='binary')
r = recall_score(y_true, y_pred, average='binary')
f1score = f1_score(y_true, y_pred, average='binary')
print(p)
print(r)
print(f1score)
在推荐系统里实现precision、recall以及F1 Score:
R(u)表示根据用户在训练集上的行为给用户做出的Top-n推荐列表,
T(u)表示系统向用户推荐标签后,用户实际选择的物品集
def Precision_Recall_F1Score(train,test,N):
hit = 0
n_recall = 0
n_precision = 0
for user in train.keys():
tu = test[user]
rank = Recommend(user,N)
for item ,pui in rank:
if item in tu:
hit += 1
n_recall += len(tu)
n_precision += N
recall = hit / (1.0 * n_recall)
precision = hit / (1.0 * n_precision)
F1 = (2 * precision * recall) / (precision + recall)
return [precision, recall, F1]
其中Recommend()函数为推算算法,本文仅给出使用precision,recall以及F值来作为评测指标的代码实现部分
参考文献:
[1] https://www.cnblogs.com/jiangyi-uestc/p/6044282.html
[2] https://blog.csdn.net/blythe0107/article/details/75003890
[3] 项亮,陈义,王益,推荐系统实践[M]. 河北:人民邮电出版社, 2012:26-43