2012-10-22 4 views
1

현재이 문제에 직면하고 있습니다. 저는 2D 사각형을 가지고 있으며 그 안에 1000 점의 점 집합을 가지고 있습니다. 사각형 내부의 점들의 분포가 퍼져 있는지 (또는 다소 균일하게 분포되어 있는지) 볼 수있는 방법이 필요하거나 광장 내부의 일부 영역에 모이는 경향이 있는지 알아야합니다.2D 사각형에서 점 분포의 균일 성을 측정하십시오.

이를 확인하려면 수학적/통계적 (프로그래밍이 아님) 방식이 필요합니다. 내가 봤 거든, 적합성, Kolmogorov ... 같은 뭔가를 발견하고 이것을 달성하기 위해 다른 접근 방식이 있는지 궁금해. 학급 종이에 이것을 필요로합니다.

그래서 입력 : 2D 제곱 및 1000 포인트. 출력 : 예/아니오 (예 = 균등하게 펼쳐지며 일부 지점에서는 모으기 않음).

어떤 아이디어라도 감사 할 것입니다. 감사합니다.

+0

안녕하세요! 스택 오버 플로우는 프로그래밍 Q & A를 위해 정말 쓰일 수 있습니다. [수학적 스택 교환] (http://math.stackexchange.com/) 또는 [통계] (http://stats.stackexchange.com/)에 더 나은 기회가있을 수 있습니다. – jrdn

+0

Cross Validated] (http://stats.stackexchange.com/questions/40928/measure-the-uniformity-of-distribution-of-points-in-a-2d-square)에서 질문을 받으면 닫습니다. –

답변

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) 
사이의 균일 한 분포로부터 오지 않았다고

그러나 높은 p 값과 낮은 KS 거리로 인해 평균 0과 표준 편차 1을 가진 정규 분포에서 나온 것일 수 있습니다.

다음 두 번째 치수 (Y)에 대한 KS- 테스트를 반복하십시오.