k- 평균의 구현을 어떻게 테스트합니까?


11

면책 조항 : 나는이 질문을 Stackoverflow에 게시했지만 이것이이 플랫폼에 더 적합하다고 생각했습니다.

다차원 데이터 세트에 대한 고유 한 k- 평균 구현을 어떻게 테스트합니까?

데이터에 이미 존재하는 구현 (예 : Matlab)을 실행하고 결과를 내 알고리즘과 비교할 생각이었습니다. 그러나 이것은 두 알고리즘이 거의 동일하게 작동해야하며 두 결과 사이의 매핑은 아마도 케이크 조각이 아닙니다.

더 좋은 아이디어가 있습니까?

답변:


10

k- 평균에는 확률 적 구성 요소가 포함되어 있으므로 정확히 동일한 구현이없고 동일한 시작 구성을 사용하지 않으면 동일한 결과를 얻을 가능성이 거의 없습니다. 그러나 결과가 잘 알려진 구현과 일치하는지 확인할 수 있습니다 (Matlab에 대해서는 모르지만 R에서 k- 평균 알고리즘의 구현은 잘 설명되어 있습니다 ( Hartigan & Wong, 1979 참조 )).

두 시리즈의 결과를 비교할 때 레이블을 여러 번 실행해야하는 경우 레이블 전환에 여전히 문제가 있습니다. 다시 e1071 R 패키지에는 matchClasses()양방향 분류 표에서 두 범주 간의 '최상의'매핑을 찾는 데 사용할 수 있는 매우 편리한 함수 (; )가 있습니다. 기본적으로 아이디어는 열과의 일치를 극대화하기 위해 행을 다시 정렬하거나 욕심 많은 접근 방식을 사용하고 대각선 (원시 동의)의 합이 최대가 될 때까지 행과 열을 퍼밋하는 것입니다. Kappa 통계 와 같은 일치 계수 도 제공됩니다.

마지막으로 구현을 벤치마킹하는 방법에 대해 무료로 사용할 수있는 많은 데이터가 있거나 전용 데이터 세트를 시뮬레이션 할 수 있습니다 (예 : 유한 혼합 모델을 통해 MixSim 패키지 참조 ).


안녕하세요, 답변 주셔서 감사합니다. 당신이 원할 때 당신은 또한 SO에서 동일한 질문에 대답 할 수 있으며 나는 거기에서도 그것을 받아 들일 것입니다. => stackoverflow.com/questions/4280371/…
Framester

(+1) 첫 번째 단락은 문제의 핵심에 빠르게 도달합니다.
whuber

6

테스트에서 얻은 정보는 3 개의 튜플 세트로 표시 될 수 있으므로 두 결과 세트 간의 맵핑은 계산하기 쉽습니다. 첫 번째 컴포넌트는 (다차원) 포인트이고, 두 번째는 (임의) 클러스터 레이블입니다. 세 번째는 참조 알고리즘에서 제공 한 (임의의) 클러스터 레이블입니다. 구조체 에 의해 K를케이케이레이블 쌍의 분류 표 : 결과가 일치하면 순열 행렬의 배수가됩니다. 즉, 각 행과 각 열에는 정확히 하나의 0이 아닌 셀이 있어야합니다. 그것은 간단한 프로그램 점검입니다. 이 이상에서 개별 데이터 포인트까지의 작은 편차를 추적하는 것도 간단하므로 두 답변이 어떻게 다른지 정확히 알 수 있습니다. 나는 통계 합의에 대한 통계적 계산을 귀찮게하지 않을 것입니다 : 완벽한 합의가 있거나 (순열까지) 그렇지 않거나, 후자의 경우 모든 불일치 지점을 추적하여 어떻게 발생하는지 이해해야합니다. 결과는 동의하거나 동의하지 않습니다. 단 한 번이라도 모든 불일치에 대해서는 점검이 필요합니다.

테스트를 위해 여러 종류의 데이터 세트를 사용할 수 있습니다. (1) 게시 된 k- 평균 결과가있는 게시 된 데이터 세트; (2) 명백한 강한 클러스터를 갖는 합성 데이터 세트; (3) 명백한 군집이없는 합성 데이터 세트. (1) 당신이 쓰는 때마다 사용하는 것이 원칙입니다 어떠한 수학이나 통계 프로그램. (2) 클러스터의 중심으로 사용할 임의의 임의의 점을 생성 한 다음 클러스터 중심을 비교적 소량으로 변위하여 점 구름을 생성하는 등 여러 가지 방법으로 수행하기 쉽습니다. (3) 예상치 못한 동작을 잠재적으로 발견 할 수있는 임의의 검사를 제공합니다. 다시 말하지만, 그것은 좋은 일반적인 테스트 규칙입니다.

또한 극단적 인 솔루션 사이의 경계에 놓여 알고리즘에 스트레스를주는 데이터 세트를 만드는 것도 고려하십시오. 이를 위해서는 창의성과 알고리즘에 대한 깊은 이해가 필요합니다 (아마도 여러분은 가지고 있습니다!). 이벤트를 확인하고 싶은 한 가지 예는 형식의 벡터 집합입니다. 여기서 v 는 성분이없는 벡터이며 i 는 순차적 정수 0 , 1 , 2 , , n - 1을 취합니다 . 또한 등변 다각형을 형성하는 벡터 집합에서 알고리즘을 확인하고 싶습니다. 어느 경우 든, n아닌 경우나는VV나는0,1,2,,1nk 보다 작은 경우를 포함하여 의 배수 가 특히 흥미 롭습니다 . 이러한 상황에 공통적 인 것은 (a) 문제의 모든 차원을 사용하지만 (b) 올바른 솔루션은 기하학적으로 명백하며 (c) 여러 올바른 솔루션이 있다는 것입니다.케이케이

(랜덤 정다각형 폼 개의 제로 벡터로 시작하여 치수 UV를 랜덤으로 선택 (A 좋은 방법들이도록한다. 2 개 차원 성분을 독립적 정상적 variates 일) 재조정들을 갖는 단위 길이].하자 통화 이 xz . 공식을 사용하여 z 에서 x 구성 요소를 제거하십시오.2V2엑스엑스

=(엑스)엑스.

와이엑스와이엑스와이코사인(2π케이/)엑스+(2π케이/)와이케이01


(+1) 관련 합성 데이터를 생성하는 가능한 방법에 대한 귀하의 의견은 매우 환영합니다.
chl

2

매우 단순한 '순진한'접근법 중 하나는 간단한 합성 데이터를 사용하는 것입니다. 모든 구현에는 동일한 클러스터가 있어야하기 때문입니다.

다음을 사용하는 Python의 예 import numpy as np:

test_data = np.zeros((40000, 4))
test_data[0:10000, :] = 30.0
test_data[10000:20000, :] = 60.0
test_data[20000:30000, :] = 90.0
test_data[30000:, :] = 120.0

왜냐하면 n_clusters = 4그것은 당신에게 순열을 줄 것입니다.[30, 60, 90, 120]


0

k- 평균에는 무작위로 선택된 결정이 포함되어 있기 때문에 (초기화 부분 만 해당) 알고리즘을 시도하는 가장 좋은 방법은 초기 지점을 선택하여 알고리즘에서 먼저 고정한 다음 알고리즘의 다른 소스 코드를 선택하는 것입니다. 같은 방식으로 포인트를 수정합니다. 그런 다음 실제 결과를 비교할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.