답변:
k- 평균에는 확률 적 구성 요소가 포함되어 있으므로 정확히 동일한 구현이없고 동일한 시작 구성을 사용하지 않으면 동일한 결과를 얻을 가능성이 거의 없습니다. 그러나 결과가 잘 알려진 구현과 일치하는지 확인할 수 있습니다 (Matlab에 대해서는 모르지만 R에서 k- 평균 알고리즘의 구현은 잘 설명되어 있습니다 ( Hartigan & Wong, 1979 참조 )).
두 시리즈의 결과를 비교할 때 레이블을 여러 번 실행해야하는 경우 레이블 전환에 여전히 문제가 있습니다. 다시 e1071 R 패키지에는 matchClasses()
양방향 분류 표에서 두 범주 간의 '최상의'매핑을 찾는 데 사용할 수 있는 매우 편리한 함수 (; )가 있습니다. 기본적으로 아이디어는 열과의 일치를 극대화하기 위해 행을 다시 정렬하거나 욕심 많은 접근 방식을 사용하고 대각선 (원시 동의)의 합이 최대가 될 때까지 행과 열을 퍼밋하는 것입니다. Kappa 통계 와 같은 일치 계수 도 제공됩니다.
마지막으로 구현을 벤치마킹하는 방법에 대해 무료로 사용할 수있는 많은 데이터가 있거나 전용 데이터 세트를 시뮬레이션 할 수 있습니다 (예 : 유한 혼합 모델을 통해 MixSim 패키지 참조 ).
테스트에서 얻은 정보는 3 개의 튜플 세트로 표시 될 수 있으므로 두 결과 세트 간의 맵핑은 계산하기 쉽습니다. 첫 번째 컴포넌트는 (다차원) 포인트이고, 두 번째는 (임의) 클러스터 레이블입니다. 세 번째는 참조 알고리즘에서 제공 한 (임의의) 클러스터 레이블입니다. 구조체 에 의해 K를레이블 쌍의 분류 표 : 결과가 일치하면 순열 행렬의 배수가됩니다. 즉, 각 행과 각 열에는 정확히 하나의 0이 아닌 셀이 있어야합니다. 그것은 간단한 프로그램 점검입니다. 이 이상에서 개별 데이터 포인트까지의 작은 편차를 추적하는 것도 간단하므로 두 답변이 어떻게 다른지 정확히 알 수 있습니다. 나는 통계 합의에 대한 통계적 계산을 귀찮게하지 않을 것입니다 : 완벽한 합의가 있거나 (순열까지) 그렇지 않거나, 후자의 경우 모든 불일치 지점을 추적하여 어떻게 발생하는지 이해해야합니다. 결과는 동의하거나 동의하지 않습니다. 단 한 번이라도 모든 불일치에 대해서는 점검이 필요합니다.
테스트를 위해 여러 종류의 데이터 세트를 사용할 수 있습니다. (1) 게시 된 k- 평균 결과가있는 게시 된 데이터 세트; (2) 명백한 강한 클러스터를 갖는 합성 데이터 세트; (3) 명백한 군집이없는 합성 데이터 세트. (1) 당신이 쓰는 때마다 사용하는 것이 원칙입니다 어떠한 수학이나 통계 프로그램. (2) 클러스터의 중심으로 사용할 임의의 임의의 점을 생성 한 다음 클러스터 중심을 비교적 소량으로 변위하여 점 구름을 생성하는 등 여러 가지 방법으로 수행하기 쉽습니다. (3) 예상치 못한 동작을 잠재적으로 발견 할 수있는 임의의 검사를 제공합니다. 다시 말하지만, 그것은 좋은 일반적인 테스트 규칙입니다.
또한 극단적 인 솔루션 사이의 경계에 놓여 알고리즘에 스트레스를주는 데이터 세트를 만드는 것도 고려하십시오. 이를 위해서는 창의성과 알고리즘에 대한 깊은 이해가 필요합니다 (아마도 여러분은 가지고 있습니다!). 이벤트를 확인하고 싶은 한 가지 예는 형식의 벡터 집합입니다. 여기서 v 는 성분이없는 벡터이며 i 는 순차적 정수 0 , 1 , 2 , … , n - 1을 취합니다 . 또한 등변 다각형을 형성하는 벡터 집합에서 알고리즘을 확인하고 싶습니다. 어느 경우 든, n 이 아닌 경우n 이 k 보다 작은 경우를 포함하여 의 배수 가 특히 흥미 롭습니다 . 이러한 상황에 공통적 인 것은 (a) 문제의 모든 차원을 사용하지만 (b) 올바른 솔루션은 기하학적으로 명백하며 (c) 여러 올바른 솔루션이 있다는 것입니다.
(랜덤 정다각형 폼 개의 제로 벡터로 시작하여 치수 U 및 V를 랜덤으로 선택 (A 좋은 방법들이도록한다. 2 개 차원 성분을 독립적 정상적 variates 일) 재조정들을 갖는 단위 길이].하자 통화 이 x 및 z . 공식을 사용하여 z 에서 x 구성 요소를 제거하십시오.
매우 단순한 '순진한'접근법 중 하나는 간단한 합성 데이터를 사용하는 것입니다. 모든 구현에는 동일한 클러스터가 있어야하기 때문입니다.
다음을 사용하는 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]