分段均匀单变量密度估计及可视化

shmistogram的Python项目详细描述


生成状态

shmistmogram

shmistmogram是一个更好的直方图。主要区别包括

  • 强调具有独立多项式分布的奇异模态(即点质量)
  • 与直方图相比,用更好的精度和更少的箱子估计密度 按层次将点分组到可变宽度的存储箱中

假设我们模拟从三角形分布(即"群组")绘制的图形, 补充了几个模式点("loners")和一些空值:

frommatplotlibimportpyplotaspltimportnumpyasnpimportshmistogramassh# Simulate a mixture of a uniform distribution mixed with a few point massesnp.random.seed(0)crowd=np.random.triangular(-10,-10,70,size=500)loners=np.array([0]*40+[42]*20)null=np.array([np.nan]*100)data=np.concatenate((crowd,loners,null))fig,axes=plt.subplots(1,2)# Build a standard histogram with matplotlib.pyplot.hist defaultssh.plot.standard_histogram(data[~np.isnan(data)],ax=axes[0],name='mixed data')# Build a shmistogramshm=sh.Shmistogram(data)shm.plot(ax=axes[1],name='mixed data')fig.tight_layout()

 src=

柱状图在一定程度上模糊了点质量,并没有说明丢失的值。 相比之下,shmistmogram使用红色线段来强调点质量,并且 图例栏突出显示群组中数据相对于 点质量与空值的比较。

安装

  • 安装python 3.6+
  • pip安装git+https://github.com/zkurtz/shmistmogram.git\egg=shmistmogram
  • 通过运行demo.py来测试您的安装

详细信息

默认行为

给定一个一维数值数组(或np.nan)值data,shmist程序 shmistmogram.shmistmogram(数据)

  • 计算每个唯一值
  • 将数据拆分为多达3个子集:
    • np.nan
    • "孤独者"是指计数高于 参数loner_min_count。shmistmogram默认情况下动态设置 作为len(data)的对数线性函数。100分, 阈值为8;100000则为18。
    • "人群"是所有剩余的积分。
  • 使用密度估计树对"人群"进行分类。

对结果对象调用plot方法将显示所有组件 单个图形上的分布。

为什么要这么做?

用例1:探索性数据分析

shmistmogram可以比直方图更具信息性,方法是将 连续和离散变化:

  • 不一致舍入任何连续变量都可能导致点质量和相对连续观测值的混合
  • "获得第一张驾照的年龄"似乎有结构模式 法定最低限额(可能因州而异)或其他持续变化

用例2:可伸缩的生成密度估计

在默认设置下,shmistmogram的刻度约为o(n log(n))。 (请参见speed\u testing.ipynb)。 得到的密度模型很容易取样,作为 分段制服 分布和多项式分布。如此简单 估计器工作良好,是cade密度所需的输入之一。 高维估计算法 以及混合连续/分类数据(请参见pydens)。

shmistmogram的自适应bin宽度导致了 复杂的分布没有实质性地增加箱子的数量。 这不是一个新的想法,而且shmistmogram包含多个binning 用户可以选择的方法。见 binning_methods.ipynb了解详细信息。

装箱

默认的装箱算法使用二进制密度估计树 迭代拆分da把它放到更小的箱子里。拆分位置(在bin/leaf中) 最大化偏差的惩罚改善(即样本负对数似然)。 惩罚反映

  • 一个硬的min_data_in_leaf约束。此最小值当前默认为3
  • 对观测较少的垃圾箱的软惩罚

我们选择要分割的箱子作为分割产生最大的箱子 有缺陷的改进。只要偏差改善超过 树叶的数目。这种方法受到Akaike信息准则的启发 (aic),虽然这可能是对我们使用的标准的滥用 它是贪婪迭代过程的一部分,而不是用来比较完全形成的模型。

变宽度装箱算法 贝叶斯块表示法 提供一个替代我们默认的装箱算法。参见演示 一个例子。也见 python巡视 对于贝叶斯块的简单概念介绍。

愿望列表

澄清目标:优化binner (a)可视化目的,例如避免高而窄的垃圾箱,以尽量减少 空白,或者调整平均箱子宽度来讲述一个特定的故事 (b)最小化估计精度的形式度量,例如 越轨预期 (从真实分布中接管未来的观察)。我们应该 提供最有效的分类方法的指导 每一个目标。

为默认方法优化速度。可伸缩性是 这样一个简单模型的动机,但是当前的实现是 远远不是最佳状态。

比较/对比/协调我们的分类方法与文献:

免责声明

这个回购协议很年轻,几乎没有单元测试,应该会有实质性的变化。小心使用。

许可证

这个项目是根据麻省理工学院的许可条款授权的。有关其他详细信息,请参见许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将多个线程中的函数放入单个队列   数组在Java中,如何在不改变整数顺序的情况下找到整数组的顺序?   java控制器属于表示层?   java Apache Ivy和本地Maven repo如何处理使用Maven 3构建的快照   Java可与泛型类型进行比较   java这个表达式在泛型中是什么意思   JavaEclipse和TeamCity插件   java检测构造函数中的final是否为空   java如何在StanfordCoreNLP管道中同时使用词汇化和依赖性解析器?   java在AntUnit控制台日志中显示完整异常堆栈跟踪   lambda如何与Java 8供应商建立连锁关系   如何让GRPC的重试机制在Kubernetes集群中使用grpcjava工作?   如何使用openjdk:7 Docker映像和Gradle包装器避免“EC参数错误”?   java将集合映射扩展为一维映射新的“无法推断函数接口类型”