【问题标题】:Measure the uniformity of distribution of points in a 2D square测量二维正方形中点分布的均匀性
【发布时间】:2012-10-22 05:14:54
【问题描述】:

我目前遇到了这个问题:我有一个 2D 正方形,里面有一组点,比如 1000 个点。我需要一种方法来查看正方形内的点分布是否分散(或或多或少均匀分布),或者它们倾向于聚集在正方形内的某个点区域。

需要一种数学/统计(非编程)方法来确定这一点。我用谷歌搜索,找到了适合度数,Kolmogorov 之类的东西……只是想知道是否还有其他方法可以实现这一目标。课堂论文需要这个。

所以:输入:一个 2D 正方形和 1000 个点。 输出:是/否(是 = 均匀分布,否 = 在某些地方聚集)。

任何想法将不胜感激。 谢谢

【问题讨论】:

标签: statistics distribution uniform


【解决方案1】:

如果您的点是独立的,您可以单独检查每个维度的分布。 Kolmogorov-Smirnov 测试(测量 2 个分布之间的距离)是一个很好的测试。首先让我们生成并绘制一些高斯分布点,以便您了解如何使用 KS 检验(统计量)来检测非均匀分布。

>>> import numpy as np
>>> from matplotlib.pyplot import plt
>>> X = np.random.gauss(1000, 2)  # 1000 2-D points, normally distributed
>>> from sklearn.preprocessing import MinMaxScaler
>>> scaler = MinMaxScaler()
>>> X = scaler.fit_transform(X)  # fit to default uniform dist range 0-1
>>> X
array([[ 0.46169481,  0.7444449 ],
       [ 0.49408692,  0.5809512 ],
       ..., 
       [ 0.60877526,  0.59758908]])
>>> plt.scatter(*list(X))

>>> from scipy import stats
>>> from sklearn.preprocessing import StandardScaler, MinMaxScaler
>>> stats.kstest(MinMaxScaler().fit_transform(X[:,0]), 'uniform')
KstestResult(statistic=0.24738043186386116, pvalue=0.0)

低 p 值和高 KS 统计量(与均匀分布的距离)几乎可以肯定不是来自 0 和 1 之间的均匀分布

>>> stats.kstest(StandardScaler().fit_transform(X[:,0]), 'norm')
KstestResult(statistic=0.028970945967462303, pvalue=0.36613946547024456)

但由于 p 值高且 KS 距离低,它们可能确实来自均值为 0 和标准差为 1 的正态分布。

然后你只需重复第二维 (Y) 的 KS 测试

【讨论】:

  • 我偶然发现了这一点,并想评论一下,对于任何可能正在寻找这样的测试的人来说,单独测试多个假设是一个坏主意。见stat.berkeley.edu/~mgoldman/Section0402.pdf。理想情况下,您应该使用同时测试所有维度的 KS 测试,因为您正在处理 联合 概率分布。
  • @komodovaran 确实如此。我的简单化方法只有在你确定你的维度是完全独立的时候才是准确的,正如开头的警告中提到的那样。您的变量(维度)依赖(联合)的程度将决定该分析作为统计测量的不准确程度。因此,对于近似自变量,它是近似的统计量度。你的方法更准确。
猜你喜欢
  • 1970-01-01
  • 2019-02-21
  • 2020-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
相关资源
最近更新 更多