基于knn算法求pr曲线和roc曲线

 

目录

1、knn算法基本原理

2、什么是pr曲线

3.pr曲线的绘制

4.什么是roc曲线

5.roc曲线的绘制

6.实现绘制pr曲线、roc曲线

pr曲线python 实现代码:

roc实现代码:


1、knn算法基本原理

knn算法又称k邻近算法。K近邻算法(K-Nearest Neighbors,简称KNN)是一种用于分类和回归的统计方法。KNN 可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一。

knn的基本原理:


k-近邻算法(k-Nearest Neighbour algorithm)的工作原理:给定一个已知标签类别的训练数据集,输入没有标签的新数据后,在训练数据集中找到与新数据最邻近的 k 个实例,如果这 k 个实例的多数属于某个类别,那么新数据就属于这个类别。即由那些离新数据最近的 k 个实例来投票决定新数据归为哪一类。


2、什么是pr曲线

PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。

precision(精准率)和recall(召回率)
上述中介绍了PR曲线的实质代表为precision(精准率)和recall(召回率),但是这二者是什么呢?
首先,我们了解一下混淆矩阵,如下表。

其中TP 表示正确分出正例的数量;FN 表示把正例错分为反例的数量;TN 表示正确分出反例的数量;FP表示把反例错分为正例的数量。
从混淆矩阵可以得出
精准率 precision = TP/(TP + FP)
召回率 recall = TP/(TP +FN)


3.pr曲线的绘制

PR曲线的横坐标为召回率R,纵坐标为查准率P

将预测结果按照预测为正类概率值排序
将阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的P,R值
以P为纵坐标,R为横坐标绘制图像


如何利用PR曲线对比性能:

如果一条曲线完全“包住”另一条曲线,则前者性能优于另一条曲线。
PR曲线发生了交叉时:以PR曲线下的面积作为衡量指标,但这个指标通常难以计算
使用 “平衡点”(Break-Even Point),他是查准率=查全率时的取值,值越大代表效果越优

 

4.什么是roc曲线

ROC的全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,首先是由二战中的电子工程师和雷达工程师发明的,用来侦测战场上的敌军载具(飞机、船舰),也就是信号检测理论。之后很快就被引入了心理学来进行信号的知觉检测。此后被引入机器学习领域,用来评判分类、检测结果的好坏。因此,ROC曲线是非常重要和常见的统计分析方法。

5.roc曲线的绘制

ROC与精度/召回率曲线非常相似,但绘制的不是精度和召回率,而是真正类率(召回率的另一种称呼)和假正类率(FPR)。FPR是被错误分为正类的负类实例比率。它等于1-真负类率(TNR),后者正是被正确分类为负类的负类实例比率,也称为奇异度。因此ROC曲线绘制的是灵敏度和(1-奇异度)的关系。
1.roc曲线上每个点反映着对同- -信号刺激的感受性。
横轴:负正类率(false postive rate FPR)特异度,划分实例中所有负例占所有负例的比例; (1-Specificity)
纵轴:真正类率(true postive rate TPR)灵敏度,Sensitivity(正类覆 盖率)
2、针对一个二分类问题,将实例分成正类(postive)或者负类(negative)。但是实际中分类时,会出现四种情况.
(1)若一个实例是正类并且被预测为正类,即为真正类(True Postive TP)
(2)若一个实例是正类,但是被预测成为负类,即为假负类(False Negative FN)
(3)若一个实例是负类,但是被预测成为正类,即为假正类(False Postive FP)
(4)若一个实例是负类,但是被预测成为负类,即为真负类(True Negative TN)
TP:正确的肯定数目
FN:漏报,没有找到正确匹配的数目
FP:误报,没有的匹配不正确
TN:正确拒绝的非匹配数目
纵轴的计算公式:
(1)真正类率(True Postive Rate)TPR: TPACTP+ FN.代表分类器预测的正类中实际正实例占所有正实例的比例。
(2)负正类率(False Postive Rate)FPR: FP/(FP+TN).代表分类器预测的正类中实际负实例占所有负实例的比例。
(3)真负类率(True Negative Rate)TNR: TN/(FP+ TN),代表分类器预测的负类中实际负实例占所有负实例的比例,TNR= 1-FPR。

6.实现绘制pr曲线、roc曲线

pr曲线python 实现代码:

运用简单数据绘制pr曲线

import matplotlib.pyplot as plt
import numpy as np
 
if __name__=='__main__':
    TP=np.array([5,4,4,3,3,3,3,3,3,3])
    FN=np.array([0,1,1,2,2,2,2,2,2,2])
    FP=np.array([5,2,2,0,0,0,0,0,0,0])
    P=TP/(TP+FP)
    R=TP/(TP+FN)
    plt.plot(R, P)
    plt.xlabel('Recall')
    plt.ylabel('Precision')
    plt.show()

显示结果如下:

roc实现代码:


>>> import numpy as np
>>> from sklearn import metrics
>>> y = np.array([1, 1, 2, 2])
>>> scores = np.array([0.1, 0.4, 0.35, 0.8])

# roc_curve的输入为
# y: 样本标签
# scores: 模型对样本属于正例的概率输出
# pos_label: 标记为正例的标签,本例中标记为2的即为正例
>>> fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)
# 假阳性率
>>> fpr
array([ 0. ,  0.5,  0.5,  1. ])
# 真阳性率
>>> tpr
array([ 0.5,  0.5,  1. ,  1. ])
# 阈值
>>> thresholds
array([ 0.8 ,  0.4 ,  0.35,  0.1 ])

# auc的输入为很简单,就是fpr, tpr值
>>> auc = metrics.auc(fpr, tpr)
>>> auc
0.75

调用完roc_curve以后,我们就齐全了绘制ROC曲线的数据。接下来的事情就很简单了,调用plt即可

import matplotlib.pyplot as plt
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
         lw=lw, label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()

结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值