测量2D平方中点的分布均匀性

时间:2012-10-22 05:14:54

标签: statistics distribution uniform

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

需要数学/统计(非编程)方法来确定这一点。我用Google搜索,找到了合适的东西,Kolmogorov ......并且想知道是否还有其他方法可以实现这一目标。这需要用于课堂论文。

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

任何想法都会受到赞赏。 谢谢

1 个答案:

答案 0 :(得分:2)

如果您的积分是独立的,您可以单独检查每个维度的分布。 Kalmagorov-Smirnov测试(两个分布之间距离的度量)是一个很好的测试。首先让我们生成并绘制一些高斯分布点,以便您可以看到如何使用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))

2D Gaussian Scatter Plot

>>> 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)

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

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