답변:
EM 클러스터링 사용
EM 클러스터링에서 알고리즘은 데이터에 맞게 초기 클러스터 모델을 반복적으로 세분화하고 데이터 포인트가 클러스터에 존재할 확률을 결정합니다. 알고리즘은 확률 모델이 데이터에 적합 할 때 프로세스를 종료합니다. 적합치를 결정하는 데 사용되는 함수는 모형에 주어진 데이터의 로그 우도입니다.
프로세스 중에 빈 클러스터가 생성되거나 하나 이상의 클러스터 멤버 자격이 지정된 임계 값 아래로 떨어지면 모집단이 낮은 클러스터가 새로운 시점에 다시 시드되고 EM 알고리즘이 다시 실행됩니다.
이 문제는이 백서에서 해결되었습니다.
Bradley, PS, KP Bennett 및 Ayhan Demiriz. "제약 된 k- 평균 군집화." Microsoft Research, Redmond (2000) : 1-8.
나는이 구현 파이썬에서 알고리즘을.
rPython
R 의 패키지를 사용하여 R 스크립트에서 액세스 한이 구현에 대한 인터페이스를 작성했습니다.
클러스터 크기에 대한 테스트를 통해 if 루프의 일부로 k 평균을 실행하는 것의 문제 일 것이라고 생각합니다. 클러스터 k의 카운트 수 n-k는 동일한 데이터에서 각 실행에 대해 다른 결과를 제공한다는 것을 기억하십시오. 어쨌든 "최상의"결과를 추출하기 위해 루프의 일부로 실행해야 할 것입니다.
데이터 크기는 얼마나됩니까? 계층 적 클러스터링을 실행 한 다음 덴드로 그램을 기반으로 유지할 클러스터를 결정할 수 있습니다.
데이터 세트가 크면 초기 비 계층 적 클러스터링과 비 계층 적 분석의 그룹을 사용하는 계층 적 클러스터링의 두 클러스터링 방법을 결합 할 수도 있습니다. Martínez-Pastor et al (2005) 에서이 방법의 예를 찾을 수 있습니다.
이는 클러스터 할당 단계 (EM의 E)를 최소 비용 흐름 (MCF) 선형 네트워크 최적화 문제로 공식화하여 수정함으로써 달성 할 수 있습니다.
빠른 C ++ 구현 인 Google의 Operations Research 도구의 SimpleMinCostFlow를 사용 하는 Python 패키지 를 작성했습니다 . 표준 scikit-lean API가 있습니다.