1. 问题

运筹模拟的时候,我们通常会给定,某事件服从正态分布/指数分布之类。问题是,我们通常只能观察到样本数据,没有办法观察到其具体服从的分布。所谓服从什么分布,是需要我们从样本数据推测的。

那么问题来了,怎样从数据推测出其所服从的分布(goodness of fit)呢?

2. 分析

市面上有一些专业的统计软件,可以做到从数据到分布的推测。比如Stat::Fit。但289美元的价格可着实不低。所以我们需要另想办法。

常见分布匹配的方法有很多,比如

  • Bayesian information criterion
  • Kolmogorov–Smirnov test
  • Cramér–von Mises criterion
  • Anderson–Darling test
  • Shapiro–Wilk test
  • Chi-squared test

我们以 KS 测试为例。KS 具体理论很多书籍都有详细解释,这里不再重复。有兴趣的朋友可以关注后回复 ks 获取相关资料。

Scipy 的统计模块 stats,可以做 ks 测试。但有个问题是,分布参数需要我们提供。比如指数分布,其概率密度函数为

f(x,λ)=λe−λxf(x, \lambda) = \lambda e^{{-\lambda x}} f(x,λ)=λe−λx

这里的 λ\lambdaλ 就需要我们自己提供。好在scipy里面有现成的方法可以从数据估算参数,就是用分布函数的fit方法。

于是,我们可以用 fit() 从数据里面先估出分布的参数,然后再用ks test测试其是否满足分布,就可以得出数据到底服从什么分布了。

举个例子。现有一家水煮鱼饭馆,观察到了顾客到来的时间间隔见 data.txt,老板想知道它服从什么分布。

import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as pltdata = np.loadtxt('data.txt', delimiter=',', encoding='utf8')dists = {'norm': stats.norm, 'lognorm': stats.lognorm, 'expon': stats.expon}
for d in dists:paras = dists[d].fit(data)test = stats.kstest(data, dists[d].cdf, paras)print('{:1}\tpvalue:{:2}'.format(d, test[-1]))

可以得出结果

norm pvalue:0.18025230160179895
lognorm pvalue:0.703843693432498
expon   pvalue:0.705389895669437

可见,这个最可能服从指数分布,其 loc = 0.1076scale = 5.56

打印其结果如下

x = np.arange(0, 20, 0.01)paras = stats.norm.fit(data)
ynorm = stats.norm.pdf(x, paras[0], paras[1])paras = stats.lognorm.fit(data)
ylognorm = stats.lognorm.pdf(x, paras[0], paras[1], paras[2])paras = stats.expon.fit(data)
yexpon = stats.expon.pdf(x, paras[0], paras[1])fig, ax = plt.subplots()ax.plot(x, ynorm, label='norm')
ax.plot(x, ylognorm, label='lognorm')
ax.plot(x, yexpon, label='expon')ax.legend()

结果为

3. 扩展

今天我们大致讨论了如何用 scipy 模块判断样本数据所服从的分布。通过上面的例子我们可以看到,在 70% 左右的置信度上,数据既可能服从指数分布,也可能服从对数正态分布。

其实这也正常。理论分布是我们用来解释世界的一种手段,我们的真是世界到底服从什么分布,从样本是无法确定的。就像上面的图形,expon 和 lognorm 长得也真挺像。

另外,所谓一力降十会,咱有了一个 Python,就可以看淡世间所有繁华。就像有了刘亦菲,还要什么杨幂和阿娇?

4. 交流

独学而无友则孤陋寡闻。现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。

大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。

5. 延伸阅读

  1. Numpy 中如何对矩阵的特征对排序
  2. Python 中怎样合并数据
  3. NumPy 运算规则总结

6. 参考文献

  1. W. McKinney, Python for Data Analysis. Beijing: O’Reilly, 2017.
  2. J. VanderPlas, Python Data Science Handbook. Beijing: O’Reilly, 2016.

如何通过样本数据推断其分布相关推荐

  1. 变分自编码器-推断输入分布的有向概率模型

    变分自编码器-推断输入分布的有向概率模型 0.摘要 本文主要分析一种用于生成新样本数据的有向概率模型--变分自编码器.总结相关的数学知识和方法,并对模型进行详细的分析与推导.用PyTorch深度学习框 ...

  2. 人工智能-数学基础-数据科学必备分布

    正态分布 import numpy as np import scipy.stats as stats #在scipy中把各种分布的函数拿到手 import matplotlib.pyplot as ...

  3. SPSS处理单样本、多样本数据方法

    文章目录 数据分析常用概念 卡方检验 单样本K-S检验 两独立样本的非参数检验 多个独立样本的非参数检验 两配对样本检验 多匹配样本的非参数检验 数据分析常用概念 偏度:分布不对称性测量.正态分布是对 ...

  4. 基于推断统计学,把握问题核心洞悉数据模式与趋势

    Hi,各位看官老爷们好~,在前两篇<数据分析-初识数据埋点(一)>.<数据分析-初识数据埋点(二)>中已经对实战应用中的数据埋点的基础认知.基本分类.定义规范.流程以及详细的应 ...

  5. [数据分析方法论]数据分析篇|基于推断统计学,把握问题核心洞悉数据

    经过产品经理详细且周密的埋点准备工作以及产品线上各个环节童鞋的齐心协力,需求以及埋点方案终于上线啦.部分看官认为上线了即代表大头的活都完成了,实际上,上线后才是埋点刚刚开始收集数据的开端,这才刚刚开始 ...

  6. 变分推断 (Variational Inference) 解析

    前言 如果你对这篇文章感兴趣,可以点击「[访客必读 - 指引页]一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接. 变分推断 在贝叶斯方法中,针对含有隐变量的学习和推理,通常有两类方式,其一 ...

  7. 假设检验_python 重点

    在统计学中,存在着数百种假设检验.而在数据分析.机器学习项目中,只有一小部分较常使用.本文介绍了17种常用的假设检验,包括适用场景及使用Python API的例子.让我们一起来学习吧! 正态分布检验 ...

  8. 结构化数据不应该被人工智能忘之脑后 !

    来源:Ihab Ilyas 在处理非结构化数据的问题上,人工智能和深度学习方法一直都表现出众且广为人知,无论是在自然语言处理.知识库自动构建,还是图像视频的识别和生成应用中,都有很多成熟案例. 然而对 ...

  9. python评分卡建模-卡方分箱

    今天主要给大家讲讲卡方分箱算法ChiMerge.先给大家介绍一下经常被提到的卡方分布和卡方检验是什么. 一.卡方分布 卡方分布(chi-square distribution, χ2-distribu ...

  10. 卡方 python_Python评分卡建模—卡方分箱

    原标题:Python评分卡建模-卡方分箱 今天主要给大家讲讲卡方分箱算法ChiMerge.先给大家介绍一下经常被提到的卡方分布和卡方检验是什么. 一.卡方分布 卡方分布(chi-square dist ...

最新文章

  1. centos7虚拟机使用docker搭建swoole环境
  2. Button的使用(五):从xml中加载
  3. CVPR 2019 爆款论文作者现场解读:视觉语言导航、运动视频深度预测、6D姿态估计...
  4. linux1.0内核下载,LINUX1.0 内核是系统的心脏 - 下载 - 搜珍网
  5. 解决log4j:WARN Error initializing output writer. log4j:WARN Unsupported encoding?的问题
  6. 多类 SVM 的损失函数及其梯度计算
  7. Vivado封装自定义IP
  8. web测试之性能测试
  9. plsql 查看表结构所有的字段_plsql导出所有表的数据
  10. 中国高铁线路、列车、开通时间数据(2003-2020年)
  11. 计算机30秒自动更换的桌面软件,无需任何软件即可在计算机上的多个桌面墙纸之间自动切换...
  12. 传奇服务器 地图文件,[技术贴]地图配置文件
  13. Android Studio修改工程项目编码,修正运行程序乱码问题
  14. Python爬虫—爬取网易云音乐【热歌榜】歌曲的精彩评论(写入txt文本文件或者MySQL数据库)
  15. 点,线,面,透视(手绘课)
  16. excel自动化的第一个实用例子(宿舍分饭)
  17. 强人工智能和弱人工智能的区别,你知道吗?
  18. 数字信号处理 --- 用离散傅里叶变换(循环卷积)实现线性卷积(个人学习笔记)
  19. 详解Discuz插件开发之自定义页面嵌入点
  20. IGAL九期班学习笔记-汪云海

热门文章

  1. 中国两大网络守护神,为祖国默默付出着,向他们致敬!
  2. 3D立体显示大屏幕拼接视频墙系统解决方案【转】
  3. (附源码)小程序 酒店疫情系统 毕业设计 091931
  4. 【建站笔记】:在wordpress博客文章中插入代码段并高亮显示
  5. Java实现 LeetCode 492 构造矩形
  6. java计算矩形_用Java实现计算矩形的面积与周长
  7. ubantu20.04 ros的安装
  8. 【Python-神经网络】
  9. 搜索引擎 百度 高级搜索
  10. 鸿蒙系统支持双系统吗,双系统同台登出,EMUI11+鸿蒙系统2.0,有大招