ks检验正态分布结果_KS检验及其在机器学习中的应用

465667ed6b826355ccad10cff59545a6.png

KS检验及其在机器学习中的应用

什么是KS检验

Kolmogorov–Smirnov 检验,简称KS检验,是统计学中的一种非参数假设检验,用来检测单样本是否服从某一分布,或者两样本是否服从相同分布。在单样本的情况下,我们想检验这个样本是否服从某一分布函数,记是该样本的经验分布函数。我们构造KS统计量:

如下图,经验分布函数与目标分布的累积分布函数的最大差值就是我们要求的KS统计量:

0dbd745683dd4b347aae2a196bbbbdff.png

95%置信度的KS统计量的临界值由给出,如果我们根据样本得到的KS统计量的值小于,那么我们就接收原假设!否则,拒绝原假设。

两样本的KS检验

用同样的思想,我们可以检验「两个样本是否服从同一分布」,此时KS统计量为两样本的经验分布函数的最大差值

a69b4b09a9e276d01a0d20a7a5fcdffb.png这时候,95%置信度的临界值为

「KS 检验只能检验连续型的分布」

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import kstest, ks_2samp
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

如何用Python进行KS检验

Python的scipy.stats模块提供了与KS检验有关的函数

单样本检验

有函数:scipy.stats.kstest(rvs, cdf, args=(), N=20, alternative='two-sided', mode='approx')最重要的两个参数:

  • rvs : str, array or callableIf a string, it should be the name of a distribution in scipy.stats.If an array, it should be a 1-D array of observations of randomvariables.If a callable, it should be a function to generate random variables;it is required to have a keyword argument size.
  • cdf : str or callableIf a string, it should be the name of a distribution in scipy.stats.If rvs is a string then cdf can be False or the same as rvs.If a callable, that callable is used to calculate the cdf.```

Returns:
statistic : float
KS test statistic, either D, D+ or D-.
pvalue : float
One-tailed or two-tailed p-value.
x = np.random.randn(100)
kstest(x, 'norm')
KstestResult(statistic=0.14648390717722642, pvalue=0.024536061749414313)

生成100个标准正态分布随机数,得到KS统计量的值为,因此我们认为该样本服从正态分布。

x = np.random.exponential(size=100)
kstest(x, 'norm')
KstestResult(statistic=0.505410956721057, pvalue=3.4967106846361894e-24)
kstest(x, 'expon')
KstestResult(statistic=0.09854002120537766, pvalue=0.2685899206780503)

生成100个指数分布随机数,KS检验拒绝它们服从正态分布的假设,接收了它们服从指数分布的假设。

两样本检验

有函数:scipy.stats.ks_2samp(data1, data2, alternative='two-sided', mode='auto')参数:

  • data1, data2 : sequence of 1-D ndarraystwo arrays of sample observations assumed to be drawn from a continuousdistribution, sample sizes can be different`

Returns
statistic : float
KS statistic
pvalue : float
two-tailed p-value
x = np.random.randn(100)
y = np.random.randn(50)
ks_2samp(x, y)
Ks_2sampResult(statistic=0.11, pvalue=0.804177768619009)

,因此我们接收原假设,认为x,y服从相同分布。

x = np.random.randn(100)
y = np.random.exponential(size=50)
ks_2samp(x, y)
Ks_2sampResult(statistic=0.59, pvalue=3.444644569583488e-11)

拒绝x,y服从相同分布的假设。

KS检验在机器学习中的应用

应用一:判断特征在训练集和测试集上分布是不是相同

特征迁移是在机器学习任务中经常碰到的情况,「线上数据的分布跟离线数据的分布情况不一致」,这就导致模型的泛化能力不足。而我们去判断两份数据的分布是不是相同的一个工具就是KS检验!

X, y = datasets.make_classification(n_samples=10000, n_features=5,
                                    n_informative=2, n_redundant=2, random_state=2020)
X_train, X_test, y_train, y_test = \
    train_test_split(X, y, test_size=0.4, random_state=2020)
for i in range(5):
    print(ks_2samp(X_train[:, i], X_test[:, i]))
Ks_2sampResult(statistic=0.013083333333333334, pvalue=1.0)
Ks_2sampResult(statistic=0.013083333333333334, pvalue=1.0)
Ks_2sampResult(statistic=0.008916666666666666, pvalue=1.0)
Ks_2sampResult(statistic=0.012916666666666667, pvalue=1.0)
Ks_2sampResult(statistic=0.013583333333333333, pvalue=1.0)

随机生成了一个有5个特征,包含10000组数据的数据集,划分训练集和测试集后,对比每个特征上测试集和训练集的分布。这里每一个特征都通过了KS检验(这里显然是可以通过的hhh)

应用二:判断二分类模型能否将正负样本很好的分开

在信用评分领域,会使用KS统计量衡量二分类模型分类正负样本的能力。在测试集上,将模型对y_true=1的样本的输出概率值作为data1,对y_true=0的样本的输出概率值作为data2,计算两个分布的KS统计量。我们用 lr 拿上面的数据做个例子。画出测试集上正负样本的预测概率值的分布情况。

lr = LogisticRegression(solver='liblinear')
lr.fit(X_train, y_train)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class='auto', n_jobs=None, penalty='l2',
random_state=None, solver='liblinear', tol=0.0001, verbose=0,
warm_start=False)
data1 = np.sort(lr.predict_proba(X_test[y_test==1])[:, 1])
data2 = np.sort(lr.predict_proba(X_test[y_test==1])[:, 0])
plt.figure(figsize=(8, 4))
last, i = 0, 0
while i     plt.plot([last, data1[i]], [i/len(data1), i/len(data1)], 'k')
    if i         last = data1[i]
    i += 1

last, i = 0, 0
while i     plt.plot([last, data2[i]], [i/len(data2), i/len(data2)], 'r')
    if i         last = data2[i]
    i += 1
de201483d0b293b0ec4fa549f0e8492e.png

这两条曲线的最大差值就是我们要求的KS统计量。这个差值越大,说明模型对这个正负样本的区别能力越强。

ks_2samp(data1, data2)
Ks_2sampResult(statistic=0.9219219219219219, pvalue=0.0)

这里KS统计量甚至超过了0.9,一般来说,KS统计量超过0.6,就说明模型的分类能力比较强了。

赞 赏 作 者

a8831ce69c2aa6760172f2d84dc55364.png

081e590e34b8f309e1de2a1261940686.gif

推荐阅读:

2020Python招聘内推渠道开启啦!

老司机教你5分钟读懂Python装饰器

用Python实现粒子群算法

抄底美股?用Python分析美股实际收益率

5a2222f316a16ac0951501a547cadd34.gif

▼点击成为社区会员   喜欢就点个在看吧c9d209e998e3b84cad7a09f57c5c924d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562136.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 数据怎么实时同步到 MySQL | 亲测干货分享建议收藏

摘要: 这段时间负责一个老项目开发的数据库管理工作,这个项目中开发库与测试数据库分离,其中有些系统表数据与基础资料数据经常需要进行同步,相信很多 DBA 同学经常会遇到要从一个数据库实时同步到另一个数据库的问题,…

计算机语言与硬件相关,搞懂程序语言与计算机硬件的关系

IT行业程序开发使用到了很多种高级语言比如Java,C,Python,JavaScript,也有个别领域用到了低级语言即汇编语言,这些都是程序语言,程序语言就是人类能够理解的语言,计算机硬件也有语言即机器指令,这些机器指令只有机器能够理解。下面我整理了下…

rg1 蓝光危害rg0_蓝光危害IEC 62778 测试什么

EN IEC62778蓝光危害标准检测哪里可以做,什么产品要做EN IEC62778标准蓝光危害检测 优耐检测专业EN IEC62778蓝光危害标准检测实验室。二、IECTR 62778内容概要及其应用在IEC 60598-1第8版中标记和结构要求中增加的蓝光危害的相关要求中,在引出一些新的概…

HTML+CSS+JS 实现 ❤️全屏图片手风琴效果❤️

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

windows7计算机管理,win7系统打开计算机管理(compmgmt.msc)的操作方法

今天和大家分享一下关于对win7系统打开计算机管理(compmgmt.msc)设置的方法,在使用win7系统的过程中经常不知道如何去对win7系统打开计算机管理(compmgmt.msc)进行设置,有什么好的办法去设置win7系统打开计算机管理(compmgmt.msc)呢?在这里小…

HTML+CSS+JS实现3D爱心跳动特效

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李阳勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

自带容器_什么是衬胶容器罐以及质量标准?

什么是衬胶容器罐?衬胶容器罐就是防腐衬胶罐。预硫化丁基橡胶硬质板是新开发出来的新的防腐衬胶罐衬里材料,这种材料主要是丁基橡胶和专用粘合剂经过轧压硫化制成的预硫化橡胶板。并且这种材料一般厂家都会提供专用的粘合剂,在衬胶检修处理缺…

HTML+CSS+JS实现 ❤️ 宇宙星球旋转动画特效❤️

代码目录: 主要代码实现: css样式: /*** date 2021/1/20 16:10*//* 取消默认间距 */* {margin: 0;padding: 0; }a {text-decoration: none;color: #fff;outline: none }.container {width: 100%;height: 100%;background: url(../img/allS…

java制作扫雷游戏中埋雷的难点_月薪30K程序员花了一个小时,用c++做出经典扫雷游戏 !...

上次发过一个俄罗斯方块的游戏源码,由于是通过Easy X实现的,但是很多和我一样的新手,一开始不知道Easy X是什么,到时源码拿过去之后,运行报错,我这次发的扫雷,也是通过Easy X实现,Ea…

HTML+CSS+JS实现 ❤️ 团队人物图片蜂巢布局❤️

代码目录: 主要代码实现: css样式: html, body {height: 100%;margin: auto;--wrp: 800px;width: var(--wrp); }body {background: center/1.6% #f5f5f5 url(data:image/svgxml,%3Csvg xmlns"http://www.w3.org/2000/svg" width&q…

设置中文环境_我花几年时间找到的学习中文好方法,值得你一看

最近挺多朋友问关于我家小C是如何学习中文汉字的,其实我也一直挺想写这方面的内容的,但真的是很纠结。说起这个过程,就是一把眼泪一把鼻涕的辛酸,因为对于海外党来说,学中文真的是太艰辛了!在孩子学习中文过…

重装系统无法在计算机上运行,开机无法进入系统?重装系统开机不能进入系统怎么办...

电脑卡顿、运行缓慢、蓝屏崩溃,在电脑出现这些问题的时候,我们都会选择重装系统来解决这些问题。然而在重装系统过程中,有时候出现意外,导致重装系统后进不了系统。重装系统开机进不了系统,我们应该怎么办呢&#xff1…

HTML+CSS+JS实现 ❤️ 粒子倒计时特效❤️

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

恒企自考_致自考生:想自考的人千千万万,遇到的困难却千篇一律

今天我们就一起来聊聊,自考路上,都有哪些困难,以及要如何解决!先看一下,已经在路上的考生们他们觉的自考难在哪里?:从上图来看,总的来说就是“记忆力不行”“自律能力差”“没法安静…

HTML+CSS+JS实现 ❤️ 科技感的数字时钟特效❤️

代码目录: 主要代码实现: css样式 : charset "utf-8"; import url("https://fonts.googleapis.com/css?familyShareTechMono"); html, body {height: 100%; }body {background: #0f3854;background: radial-gradient(ellipse at c…

HTML+CSS+JS实现 ❤️ 卡西欧手表图形特效❤️

代码目录: 主要代码实现: css样式: import url(https://fonts.googleapis.com/css2?familyGidugu&familyMichroma&displayswap); font-face {font-family: "DSEG7 Classic";src: url(https://manzdev.github.io/twitch-c…

HTML+CSS+JS实现 ❤️ 立方体旋转图片切换特效❤️

效果演示: 代码目录: 主要代码实现: css样式: /*Full-page view:https://codepen.io/GeorgePark/full/gegavO/*/import url(https://fonts.googleapis.com/css?familyMontserrat:500); :root {/* Base font size */font-size: 1…

湖北大学计算机考研怎么样,湖北大学研究生好考吗 复试难吗

考取湖北大学的研究生比较容易。考研难易主要看招生单位所处的地域、名气、排名等,因为报考生源不同。一般来说发达地区特别是大城市的重点大学都难考,而非重点大学则相对好考。湖北大学是非211高校,所在城市位于湖北。湖北大学研究生好考吗1…

区分错误类型_牛鹭学院:Bug类型解析及其常见实例介绍

软件测试中,bug的类型有很多种,比如:代码错误、界面优化、设计缺陷、需求补充和用户体验等;一般情况下,需求补充和设计缺陷比较好区分,但是代码错误、界面优化和用户体验区分不是很明显;下面我们…

HTML+CSS+JS实现 ❤️酷炫的时光隧道旅行动特效❤️

效果演示: 代码目录: 主要代码实现: css样式: html, body {width: 100%;height: 100%;overflow: hidden; }body {background: #000;text-align: center; }body::before {content: "";display: inline-block;height: 10…