2012-10-22 154 views
1

我目前遇到這個問題:我有一個二維正方形,並有一組點,例如1000點。我需要一種方法來查看廣場內點的分佈是否分散(或多或少均勻分佈)或者他們傾向於聚集在廣場內的一些點區域中。測量2D平方中點的分佈均勻性

需要一個數學/統計(而不是編程)的方式來確定這一點。我搜索了一下,發現了合適的好處,Kolmogorov ......並想知道是否有其他方法來實現這一點。需要這樣的課文。

所以:輸入:2D平方和1000點。 輸出:是/否(是=均勻分佈,否=在某些地方聚集在一起)。

任何想法,將不勝感激。 謝謝

+0

嗨! Stackoverflow是真正的編程問答,你可能有更好的機會[數學stackexchange](http://math.stackexchange.com/)或者[stats](http://stats.stackexchange.com/) – jrdn

+0

投票關閉,因爲它已被[交叉驗證](http://stats.stackexchange.com/questions/40928/measure-the-uniformity-of-distribution-of-points-in-a-2d-square)詢問。 –

回答

2

如果你的觀點是獨立的,你可以單獨檢查每個維度的分佈。 Kalmagorov-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)) 

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-測試