6

나는 각각 1000 개가 넘는 2D 변수를 포함하는 2000 개의 데이터 세트가 있습니다. 이 데이터 세트를 유사성에 따라 20-100 개의 클러스터에서 클러스터링하려고합니다. 그러나 데이터 세트를 비교하는 신뢰할 수있는 방법을 찾는 데 어려움을 겪고 있습니다. 나는 약간의 (오히려 원시적 인) 접근 방법을 시도하고 많은 연구를했지만, 내가해야 할 일을 발견 할 수 없다.2D 데이터/산점도 세트 비교

내 데이터 3 세트 중 아래에 이미지를 게시했습니다. 데이터는 y 축에서 0-1로 제한되며 x 축에서 ~ 0-0.10 범위 내에 있습니다 (실제로는 이론상 0.10 이상일 수 있음).

데이터의 모양과 상대 비율은 아마도 가장 중요한 것들입니다. 그러나 각 데이터 세트의 절대 위치도 중요합니다. 즉, 각 개별 점의 상대적인 위치가 다른 데이터 집합의 개별 점에 가까울수록 더 유사하게 될 것이고 절대 위치는 설명되어야 할 것입니다.

녹색과 빨간색은 매우 다른 것으로 간주해야하지만 밀어 넣기가 쉬우므로 파란색과 빨간색보다 더 유사해야합니다.

http://img153.imageshack.us/img153/6730/screenshot20110204at004.png

I가 시도 :

  • 좌표가 영역 (변수로 분할
  • 전체 한해서는 어긋남에 기초하여 비교할 수있는 (즉 0-0.10, 0-0.10) (0.10 -0.20, 0.10-0.20) ... (0.9-1.0, 0.9-1.0)) 지역 내 공유 지점을 기준으로 유사성을 비교하십시오.
  • 데이터 세트 중 가장 가까운 이웃에 대한 평균 유클리드 거리를 측정 해 보았습니다.

이 모두가 잘못된 결과를 산출했습니다. 내 연구에서 찾을 수있는 가장 가까운 대답은 "Appropriate similarity metrics for multiple sets of 2D coordinates"입니다. 그러나 거기에 주어진 대답은 중심에있는 가장 가까운 이웃 사이의 평균 거리를 비교하는 것을 제안합니다. 나는이 방향으로 나를 위해 일하지 않을 것이고, 제 목적을위한 거리만큼 중요합니다.

다른 프로그램의 입력에 대한 데이터를 생성하는 데 사용되며 산발적으로 만 사용됩니다 (주로 클러스터 수가 다른 여러 데이터 세트를 생성하는 데 사용됨). 따라서 시간이 많이 소요되는 알고리즘은 문제의 아웃. 먼저

+0

Joe Blow에 동의 - 녹색, 파란색, 빨간색 점에 대한 3 개 방정식을 얻고이 3 개의 방정식에 대한 기울기와 절편을 비교하기 위해 최소 제곱 법으로 선형 맞춤을 시도 할 수 있습니다. –

+0

또한 클러스터간에 Hausdorff 거리를 비교해 볼 수도 있습니다. –

+0

모든 데이터 세트의 점수가 같은가요? 포인트의 순서가 중요합니까 (포인트 5는 모든 데이터 세트에 대해 유사한 의미입니까?) – tkerwin

답변

1

두 가지의 단계

1) : 블루스를 따로 말할합니다.

컷오프까지 평균 근사 거리를 계산하십시오. 다음 이미지에서 검은 거리 등의 컷오프 뭔가를 선택

enter image description here

파란색 구성을, 그들은 더 당신에게 빨간색과 녹색보다 훨씬 큰 결과를 얻을 수 흩어져있다.

2) 둘째 : 빨강 떨어져 말할 누구의 가장 가까운 이웃 거리 작은 일 이전 거리 (예를 들어 사분)보다 모든 점

무시를 그린.근접에 대한 Clusterize 그렇게 형태의 클러스터를 얻을 수 있습니다 :

enter image description here

enter image description here 미만 10 점 (정도)와 클러스터를 폐기하십시오. 각 클러스터에 대해 선형 적합성을 실행하고 공분산을 계산합니다. 녹색의 평균 공분산 값은 녹색의 값보다 훨씬 높습니다.

있습니다.

HTH! 벨리 사리우스가 잘 대답하고 있지만

+0

적어도 x 개의 가장 가까운 이웃에 대한 평균 거리를 계산하는 것이 가장 가까운 이웃에 대한 평균 평균 거리보다 훨씬 더 좋을 것이라고 생각합니다. 나는 아직 실험 할 기회가 없었지만, 다른 사람들과 짝을 이루는 좋은 척도가 될 것으로 생각된다. 나는 두 번째 부분에 대해서는 확신하지 않지만 그것에 대해 살펴볼 것이다. 감사. – mcnulty

+0

@mcnulty 나는이 것을 여러 번 (물리학 자로서)했다. 컷오프 값을 시험해야합니다. 빨강, 초록 및 파랑이 모두 게시 된 것과 비슷한 경우 많은 문제가 발생하지 않습니다. 당연히 많은 cpu 시간을 기대하십시오. –

1

, 여기에 코멘트 커플 :

말 1000 점의 각 세트를 줄일 수 있다면 32 점 32 개 클러스터의 각 (또는 20 × 50 ...) , 1000 공간 대신 ​​32 공간에서 작업 할 수 있습니다. 이것을 위해 K-means clustering을 시도하십시오. 도 참조하십시오 SO questions/tagged/k-means.

한 가지 방법은 은 다음과 같이 가장 가까운 쌍을하는 것입니다 (클러스터의 점) 세트 A를 사이의 거리, B를 측정 :

def nearestpairsdistance(A, B): 
    """ large point sets A, B -> nearest b each a, nearest a each b """ 
     # using KDTree, http://docs.scipy.org/doc/scipy/reference/spatial.html 
    Atree = KDTree(A) 
    Btree = KDTree(B) 
    a_nearestb, ixab = Btree.query(A, k=1, p=p, eps=eps) # p=inf is fast 
    b_nearesta, ixba = Atree.query(B, k=1, p=p, eps=eps) 
    if verbose: 
     print "a_nearestb:", nu.quantiles5(a_nearestb) 
     print "b_nearesta:", nu.quantiles5(b_nearesta) 
    return (np.median(a_nearestb) + np.median(b_nearesta))/2 
     # means are sensitive to outliers; fast approx median ? 

당신 다음 32 공간에 2,000 포인트를 클러스터 수 20 클러스터 센터를 한 번에 : (. 일반적인 유클리드 거리가 전혀 여기에 작동하지 않을 것이다)

centres, labels = kmeans(points, k=20, iter=3, distance=nearestpairsdistance) 

후속 조치 — 마지막에 무엇이 효과가 있었는지와 그렇지 않은 것을 알려주십시오.