Kolmogorov-Smirnov KS 定义 python实现 KS值的正负_kolmogorov-smirnov python-程序员宅基地

技术标签: python  机器学习  kolmogorov-smirnov  TPR  ks  FPR  数学  

定义

TP: True Postive 预测正类,实际也是正类
FP:False Positive 预测正类,实际是负类
TN:True Negtive 预测负类,实际也是负类
FN:False Negtive 预测负类,实际是正类

TPR:TP / (TP+FN) 所有正例中有多少个正例被分出来。
FPR: FP / (TN+FP) 所有负例中有多少例子被分为正例。

模型预测的结果通常是一个概率值,概率值越大说明这个样本是正例的可能性越大,我们需要一个阈值(threshold)来定义多大的概率以上才是正例,通常这个值设为0.5,表示概率值大于0.5表示这个样本是正例,小于0.5表示这个样本是负例。

TPR曲线:横轴是阈值,纵轴是TPR,通过将阈值从1.0->0来画出很多个TPR的点,连起来得到TPR曲线。
FPR曲线:横轴是阈值,纵轴是FPR,通过将阈值从1.0->0来画出很多歌FPR的点,连起来得到FPR曲线。

KS值:TPR曲线和FPR曲线相距最远的距离值(同一个阈值的TPR和FPR的差值)

如图:
KS图

代码实现

from sklearn.metrics import roc_curve
import numpy as np

def ks(y_true, y_score):
    fpr, tpr, _ = roc_curve(y_true, y_score)

    diff = np.subtract(tpr, fpr)

    mins, maxs = diff.min(), diff.max()

    return mins if abs(mins) > abs(maxs) else maxs

按照数学的定义,距离是一个绝对值,在二分类问题的结果当中,一个不稳定的分类器可能导致TPR和FPR相交。

  1. 如果按照两条线距离的绝对值,那么绝对值最大的地方可能是模型反向预测的地方。
  2. 如果按照max(TPR-FPR),我们得到的结果时正向预测的最大值的点,但是无法得到模型区分能力最强的点。
  3. 如果取(TPR-FPR)的最小值和最大值,然后返回这两个值绝对值最大的那个原始值,例如2和-4返回-4,这样既可以知道两条曲线最大的距离是多少,也可以通过符号判断出此处模型是否已经反向预测。

我的代码是第三种,这种情况其实在真实场景中很小概率出现,但是从指标的意义上来说我觉得第三种是最贴近实际生产环境的。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cFarmerReally/article/details/102919605

智能推荐

【bzoj1086】[SCOI2005]王室联邦-程序员宅基地

“余”人国的国王想重新编制他的国家。他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理。他的国家有n个城市,编号为1..n。一些城市之间有道路相连,任意两个不同的城市之间有且仅有一条直接或间接的道路。为了防止管理太过分散,每个省至少要有B个城市,为了能有效的管理,每个省最多只有3B个城市。每个省必须有一个省会,这个省会可以位于省内,也可以在该省外。【bzoj1086】[SCOI2005]王室联邦

vscode配置c/c++-程序员宅基地

c_cpp_properties.json:{ "configurations": [ { "name": "MinGW64", "intelliSenseMode": "gcc-x64", "compilerPath": "C:\\Program Files\\mingw64\\bin\\g++.exe",//改路径 "includePath": [ "

接收灵敏度-程序员宅基地

接收灵敏度是检验基站接收机接收微弱信号的能力,它是制约基站上行作用距离的决定性技术指标,也是RCR STD-28协议中,空中接口标准要求测试的技术指标之一。合理地确定接收灵敏度直接地决定了大基站射频收发信机的性能及其可实现性。它是对CSL系统的接收系统总体性能的定量衡量。接收灵敏度是指在确保误比特率(BER)不超过某一特定值的情况下,在用户终端天线端口测得的最小接收功率,这里BER通常取为0.01_接收灵敏度

springboot项目修改启动端口-程序员宅基地

本文转载自:http://blog.csdn.net/ljj821061514/article/details/56284303测试使用了一下springboot,挺好用的,可以不用配置那些所谓的xml繁琐的配置文件,方便快速搭建项目。但是,当我们有多个springboot项目时,可能就会出现80端口别占用,导致其他项目无法使用,这时候就得要修改项目中的启动端口

oracle 11g 从11.2.0.3.0升级到11.2.0.3.6操作步骤(一)_kkp2btop-程序员宅基地

oracle 11g 从11.2.0.3.0升级到11.2.0.3.6操作步骤操作步骤如下:oracle@oracle-R2:/opt/oracle/datasoft/16056266> opatch applyOracle Interim Patch Installer version 11.2.0.3.4Copyright (c) 2012, Oracle Corporatio_kkp2btop

zend optimizer php5.5,PHP5.3以上版本安装ZendOptimizer扩展_扎伊德的博客-程序员宅基地

现在很多PHP程序都需要ZendOptimizer环境,但是ZendOptimizer在PHP5.2之后已经被支持,那怎么办,Zend也不会这么做,原来PHP5.3开始ZendOptimizer正式改为Zend Guard Loader。Zend Guard Loader的发布,而且Zend Optimizer不会再更新,并且由于差异很大使用Zend Guard加密代码时将提示你是否使用php5....

随便推点

COBOL基础知识_cobol using-程序员宅基地

本文内容源于对IBM英文文档的理解与归纳,不保证其准确性。仅用于自学,转载请注明出处。-----------------------------------------------------------------------------------------------1.编码格式第1~6列为序号区,用于表示行号。行号不是必须的,也不必是顺序的,甚至可以是本机字符集中的任意字_cobol using

SaaS模式的阿里客户关系管理系统_sass 系统 阿里-程序员宅基地

一转眼三个半月就过去了,开展的SaaS模式的客户关系管理系统已经接近尾声了,在本次项目中,参与人数一共有5个人,所用到的技术Spring,SpringMVC,Mybatis,layui,Lucene,velocity,shiro等在本次项目中我所负责的是订单管理模块和合同管理模块,这两个模块属于高级业务。整个业务的流程就是客户有意向购买本公司的产品以后,公司会和客户签订一个定金合同,在定金管理页..._sass 系统 阿里

论文笔记:IOUnet-程序员宅基地

作者指出,目前主流的目标检测网络都由两步完成:目标分类和目标定位。首先从背景中找出前景的object proposal并将其分配上合适的分类标签,然后通过最大化IOU或者其他检测结果和ground truth之间的度量标准来进行对定位目标的系数回归。最后多余的bounding box会通过NMS去除。分类和定位在这样的检测流水线上被不同的处理,每种分类标签是proposal的“classifi..._iounet

Linux下更改文件权限_linux 将文件file1的权限依次修改为以下3种。对于每种权限,分别切换到zys、jyf和z-程序员宅基地

目录查看文件权限修改文件权限查看文件权限查看文件权限可以通过ls -l命令查看,如下所示:如果只想查看某一个文件的权限,可以使用grep,如下所示:可以发现,每一个文件的第一个字段都是由r、w、x等10个字符构成,这10个字符所组成的字符串反映了文件的权限。在linux下,文件权限分为三种:可读权限(read)、可写权限(write)以及可执行权限(execut..._linux 将文件file1的权限依次修改为以下3种。对于每种权限,分别切换到zys、jyf和z

CentOS7.0安装Ceph(jewel)及以上版本-程序员宅基地

背景  由于docker的Ceph插件rexray对Ceph版本有一定的要求,当Ceph版本为hammer (0.94.10)时,rexray无法成功创建rbd设备。CentOS 7及以上版本,默认安装的就是hammer版本,因此,我们需要安装更高的jewel版本。Ceph的版本可参见。安装  为了安装速度,我们可以选用国内源。通常大家使用的国内源包括:  网易 http://mirr..._rexray 国内源

java读txt文件-程序员宅基地

[code="java"]/* 来于互联网  * 读取char  */  private String readtxt() throws IOException{  BufferedReader br=new BufferedReader(new FileReader("d:/sql.txt"));  String str="";  Stri...

推荐文章

热门文章

相关标签