一、简介

前面的文章中通过假设对比来检验样本是否服从泊松分布。得出的结论是总体分布不服从泊松分布,那么如何找到与总体分布最接近的分布呢?不可能一个个分布去验证。这里便可以用到 fitter 这个库。

fitter 是一个小型的第三方库,提供了一个简单的类来拟合数据的分布,亦即找出与样本最接近的理想的分布。

二、安装

首先安装 fitter,通过 pip install fitter 安装时(v1.3.0),可能会产生报错如下图。根据报错信息(蓝色框部分)可以知道是由于编码问题导致读取文档时出错。因此可以通过在 setup.py 的代码中指定编码来解决。首先通过在浏览器打开下图中的链接,即可下载该库的压缩包到本地。然后将其解压,更改 setup.py 中报错的代码为:long_description = open("README.rst", encoding="utf-8").read(),。最后可以直接在该目录下运行 setup.py 完成安装:python setup.py buildpython setup.py install

三、测试

还是前面的文章中用到的订单数据,这里先简单的进行分组聚合计算用户购买次数,然后使用 fitter 拟合总体的分布。

import pandas as pd
from scipy import stats
from fitter import Fitterdf = pd.read_csv('orders.csv')
rv = df.groupby('customerId').count().values.reshape(len(df.customerId.unique()), )
f = Fitter(rv)
f.fit()     # 这里会运行相当长的一段时间,默认拟合 stats 子模块中所有的分布类型
f.summary()
In [4]: f.summary()
Out[4]:sumsquare_error          aic          bic  kl_div
mielke            0.059989  1175.240085 -7278.518586     inf
burr              0.059989  1175.241738 -7278.518411     inf
burr12            0.060060  1219.259660 -7277.604984     inf
f                 0.060206  1238.451482 -7275.721995     inf
betaprime         0.060206  1238.451445 -7275.721993     inf

上面结果的 aicbic 分别是修正信息标准和贝叶斯信息标准,信息标准(Information criterion)是用于模型选择的一个指标,比较两个模型时,信息标准越低越好。而 kl_div(Kullback Leibler Divergence)为相对熵或称信息散度,相对熵表示使用理论分布拟合真实分布时产生的信息损耗。查看文档中的源码可以看到这几个值在 Fitter._fit_single_distribution 这个类方法中定义和计算。

为了减少运行时间,下面只测试 10 个常见的分布类型。结果耗时大大缩短,但是结果也不如前者更准确。

import fitter
f = Fitter(data, distributions=fitter.get_common_distributions())
f.fit()
f.summary()
In [10]: f.summary()
Out[10]:sumsquare_error          aic          bic  kl_div
lognorm          0.060282  1220.340678 -7281.397879     inf
chi2             0.060321  1315.115666 -7280.908214     inf
gamma            0.060321  1315.107754 -7280.907903     inf
rayleigh         0.063585  1774.082387 -7246.870226     inf
cauchy           0.065384  1147.192894 -7225.327891     inf

最终得到的结果是,购买次数的分布最接近于 mielke 分布(但是实际上,根据上述对拟合指标的分析,拟合效果是很差的,所以这里仅仅作为一种参考)。总的来说,在实际问题中,随机变量的分布是比理论模型复杂得多的,并且可能是一直在变动而没有一个固定的分布的。因此除了需要更多的数据,还需要控制各种变量才能得到一个确定的总体的总体分布(忽然想起不久前看新闻说某学校要求控制学生的分数服从正态分布,想想这应该挺难的吧,哈哈)。

相关阅读 | Medium

使用 fitter 拟合数据分布相关推荐

  1. 微观平台_不再受到微观管理

    微观平台 Organisations spend vast amounts of time and resources on hiring smart, talented and self-motiv ...

  2. Python——fitter包:拟合样本数据的分布

    Python--fitter包:拟合样本数据的分布 安装fitter 使用样例 fitter.Fitter()介绍 安装fitter pip install fitter 使用样例 # 数据生成 fr ...

  3. Python Fitter 判断数据样本的分布函数拟合

    Python fitter包:拟合数据样本的分布 安装fitter Fitter方法参数详解 HistFit类:适合密度函数本身 Python拟合数据样本的分布 github项目:https://gi ...

  4. python拟合统计分布_利用 Python Fitter 判断数据样本符合那种分布函数

    # Python拟合数据样本的分布 # 安装fitter # pip install fitter # 生成一段模拟数据 from scipy import stats import numpy as ...

  5. Python fitter包:拟合数据样本的分布

    Python fitter包:拟合样本数据的分布 安装fitter 生成一段模拟数据 利用fitter拟合数据样本的分布 方法详解 Fitter方法 Fitter返回 参考 安装fitter pip ...

  6. Python拟合数据样本的分布

    安装fitter pip install fitter 生成一段模拟数据 from scipy import stats import numpy as np # N(0,2)+N(0,10) dat ...

  7. GAN作用——在我做安全的看来,就是做数据拟合、数据增强

    from:https://www.zhihu.com/question/56171002/answer/155777359 GAN的作用,也就是为什么GAN会火了(有部分原因可能是因为Lecun的赞赏 ...

  8. 重复事件(表现形态:活跃、留存、复购)建模(生存分析)的案例学习笔记

    医学中,重复事件较多,那么放在一些大场景中就会有,用户重复点击/浏览(留存),重复购买(复购)这些场景. 最近也看到一些类似的case就简单整理一下: 笔者之前生存分析的文章: 生存分析--泊松回归( ...

  9. 每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 随着深度学习.强化学习.知识图谱.AutoML 等 AI 技术出现更多突破,推荐系统领域的企业和开发者开始将这些技术与传统推荐算法 ...

最新文章

  1. java 中sun.net.ftp_开发FTP不要使用sun.net.ftp.ftpClient
  2. MATLAB读取文件夹及其所有子文件夹内的图像
  3. 【2016年第5期】大数据人才培养的基础条件初探
  4. 余弦相似度/卷积核之间的成对余弦相似性
  5. vi/Vim的快速使用
  6. SpringBoot学习总结(个人笔记)
  7. 【java学习之路】(java SE篇)008.集合
  8. 哈希存储:字符串存储、数字存储
  9. github上这个项目有点意思,适合有女朋友的程序员
  10. CSDN博客QQ加群、微信
  11. 调用微信接口上传图片总结
  12. PHP实现sha-256哈希算法
  13. 【报告分享】2021小红书投放运营指南书-小红书(附下载)
  14. 神经网络模型结果怎么看,神经网络模型怎么评估
  15. 使用ajax发送数组请求,Ajax请求传递数组参数
  16. 深度剖析互联网金融的系统逻辑
  17. 最简单的基于FFmpeg的解码器
  18. 【心电信号】基于matlab小波阙值心电信号去噪【含Matlab源码 2188期】
  19. wangEditor富文本编辑器获取html内容
  20. VulnHub靶场之FirstBlood:1

热门文章

  1. SI信号仿真及软件 HyperLynx
  2. 手把手教你申请计算机软件著作权(2)—— 生成代码文件身份证明
  3. 想要下载的编程软件太难找?部分软件官网介绍
  4. MySQL Error:1677
  5. ubuntu开机启动项
  6. 一个简单音乐播放器的java实现(一)
  7. 网易视频云首推多路互动直播,引领直播新时代
  8. 河南山东商会刘继臣 全国工商联·万祥军:商协社团儒商大会
  9. Error:1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL
  10. H5开发使用 “navigationStyle“: “custom“,但是最外层的title标题显示不正确