클러스터링 알고리즘이 의미있는 결과를 얻을 수있을 정도로 데이터가 "클러스터"되어 있는지 확인하는 방법은 무엇입니까?


78

kman 또는 다른 클러스터링 알고리즘의 결과가 실제로 의미가 있도록 (고차원) 데이터에 충분한 클러스터링이 있는지 어떻게 알 수 있습니까?

특히 k- 평균 알고리즘의 경우 실제 군집 결과가 의미가 있고 (가상하지 않은) 클러스터 내 분산의 감소가 얼마나됩니까?

차원 적으로 축소 된 형태의 데이터가 그려 질 때 군집이 분명해야하고 군집을 시각화 할 수없는 경우 kmeans (또는 다른 방법)의 결과가 의미가 없습니까?


1
손으로 쓴 숫자는 군집화에 대한 훌륭한 테스트를 만듭니다. 10 개의 잘 분리 된 군집 이 필요 하지만 적어도 64d의 유클리드 지표에서는 k = 10에서 무릎 전혀 표시되지 않습니다.
데니스


2
이 질문은 클러스터링 결과의 유효성을 확인하는 방법과 "더 나은"방법을 선택하는 방법과 관련이 있습니다. stats.stackexchange.com/q/195456/3277을 참조하십시오 .
ttnphns 2016

답변:


77

k- 평균에 대해 구체적으로 갭 통계를 사용할 수 있습니다. 기본적으로 아이디어는 점점 더 많은 클러스터에 대한 참조 분포와 비교하여 평균 분산을 기반으로 클러스터링 측정의 우수성을 계산하는 것입니다. 자세한 내용은 원본 용지에 나와 있습니다.

Tibshirani, R., Walther, G. 및 Hastie, T. (2001). 간격 통계를 통해 데이터 세트의 군집 수 추정 . JR 통계 학자. Soc. B, 63 (2) : 411-423.

내가 관련 질문에 제공 한 답변 은 주어진 데이터 세트가 어떤 종류의 구조를 나타내는 지 여부를 확인하는 데 사용할 수있는 다른 일반적인 유효성 지수를 강조합니다.

노이즈 만 있는지 알아낼 것이 무엇인지 모른다면 리샘플링을 사용하고 클러스터 안정성을 연구하는 것이 좋습니다. 즉, 부트 스트랩을 통해 또는 작은 노이즈를 추가하여 데이터를 다시 샘플링하고 Jaccard 유사성 으로 측정 된 결과 파티션의 "근접도"를 계산하십시오 . 즉, 데이터에서 유사한 클러스터가 복구되는 빈도를 추정 할 수 있습니다. 이 방법은 fpc R 패키지에서 다음과 같이 쉽게 사용할 수 있습니다 clusterboot(). 원시 데이터 또는 거리 행렬을 입력으로 사용하며 광범위한 클러스터링 방법 (계층 적, k- 평균, 퍼지 방법)을 적용 할 수 있습니다. 이 방법은 링크 된 참조에서 논의됩니다.

Hennig, C. (2007) 클러스터 안정성에 대한 클러스터 별 평가 . 전산 통계 및 데이터 분석 , 52, 258-271.

Hennig, C. (2008) 용해 지점 및 격리 견고성 : 일반적인 클러스터 분석 방법에 대한 견고성 기준 . 다변량 분석 저널 , 99, 1154-1176.

아래는 k- 평균 알고리즘을 사용한 작은 데모입니다.

sim.xy <- function(n, mean, sd) cbind(rnorm(n, mean[1], sd[1]),
rnorm(n, mean[2],sd[2]))
xy <- rbind(sim.xy(100, c(0,0), c(.2,.2)),
            sim.xy(100, c(2.5,0), c(.4,.2)),
            sim.xy(100, c(1.25,.5), c(.3,.2)))
library(fpc)
km.boot <- clusterboot(xy, B=20, bootmethod="boot",
                       clustermethod=kmeansCBI,
                       krange=3, seed=15555)

3 개의 군집 ( krange) 중 어느 것도 시료에 용해 되지 않았 으며 모든 군집에 대한 평균 군집 자카드 유사성은> 0.95 이기 때문에 결과는이 인공 (및 구조화 된) 데이터 집합에서 상당히 긍정적입니다 .

다음은 20 개의 부트 스트랩 샘플에 대한 결과입니다. 알 수있는 바와 같이, 통계 단위는 동일한 군집으로 그룹화되는 경향이 있지만 그 사이에있는 관측치에 대한 예외는 거의 없습니다.

여기에 이미지 설명을 입력하십시오

물론이 아이디어를 모든 유효성 지수로 확장 할 수 있습니다. 부트 스트랩 (대체 포함)을 통해 새로운 일련의 관측 값을 선택하고, 통계 범위 (예 : 실루엣 너비, cophenetic 상관 관계, 허버트 감마, 제곱합 내)를 계산합니다. 군집 번호 (예 : 2-10)를 100 회 또는 500 회 반복 한 다음 군집 수의 함수로 통계의 상자 그림을보십시오.

여기 동일한 시뮬레이션 데이터 세트로 얻을 수 있지만 Ward의 계층 적 클러스터링을 사용하고 cophenetic 상관 관계 (결과 파티션에서 거리 정보가 얼마나 잘 재현되는지 평가)와 실루엣 너비 (클러스터 내부 동질성 및 인터 인터를 평가하는 조합 측정)를 고려하십시오. 클러스터 분리).

cophenetic 상관 관계는 0.6267에서 0.7511까지이며 중앙값은 0.7031 (500 부트 스트랩 샘플)입니다. 3 개의 군집 (중앙 0.8408, 범위 0.7371-0.8769)을 고려할 때 실루엣 폭이 최대 인 것으로 보입니다.

여기에 이미지 설명을 입력하십시오


이 매우 유익한 답변에 감사드립니다! clusterboot와 같은 소리가 내가 찾는 것입니다. 링크도 포함시켜 주셔서 감사합니다.
xuexue 2016 년

1
실루엣 값을 해석하는 몇 가지 마술 숫자 : stats.stackexchange.com/a/12923/12359
Franck Dernoncourt

1
gif에서 차트를 작성하는 데 사용한 명령은 무엇입니까?
트래비스 Heeter

2
@Travis 이미지는 별도의 PNG 파일로 저장 한 다음 ImageMagick을 사용하여 애니메이션 GIF 파일로 변환되었습니다 . 이 게시물 도 참조하십시오 .
chl

10

고차원 데이터가 충분한 군집을 나타내는 지 여부를 신속하게 시각화하는 한 가지 방법은 t- 분산 확률 적 이웃 임베딩 ( t-SNE )을 사용하는 것입니다. 데이터를 약간의 저 차원 공간 (예 : 2D, 3D)에 투영하고 클러스터 구조를 유지하는 데 상당히 효과적입니다.

예 : MNIST 데이터 세트 :

여기에 이미지 설명을 입력하십시오

Olivetti는 데이터 세트에 직면합니다.

여기에 이미지 설명을 입력하십시오


1
R에서 얼굴 (또는 이미지)을 적용하는 방법이 있습니까?
트래비스 Heeter

1
@TravisHeeter 모르겠다
Franck Dernoncourt

3
tSNE 예상 데이터를 클러스터하지 마십시오. 예를 들어이
Anony-Mousse

9

확실하게, 도표 가능한 수의 차원에서 클러스터를 시각적으로 식별하는 능력은 클러스터링 알고리즘의 유용성에 대한 의심스러운 기준입니다. 특히이 차원 축소가 클러스터링 자체와 독립적으로 수행되는 경우 (즉 클러스터링이 작동합니다).

실제로, 클러스터링 방법은 사람의 눈 / 마음이 클러스터를 볼 수없는 클러스터를 찾는 데 가장 큰 가치가 있습니다.

간단한 대답은 클러스터링을 수행 한 다음 작동하는지 여부를 확인하는 것입니다 (관심있는 기준이 있으면 @Jeff의 답변 참조).


1
그렇습니다. 그리고 클러스터는 반드시 라운드 포인트 그룹 일 필요는 없습니다.
Wayne

@chl이 애니메이션 이미지를 R로 제작 했습니까?
Stéphane Laurent

7

어쨌든 결과는 언제 의미가 있습니까? 특히 k- 평균 결과는?

사실 k- 평균은 특정 수학적 통계량을 최적화한다는 것입니다. 이와 관련된 "의미있는"것은 없습니다.

특히 고차원 데이터에서 첫 번째 질문은 다음과 같아야합니다. 유클리드 거리가 여전히 의미가 있습니까? 그렇지 않은 경우 k- 평균을 사용하지 마십시오. 유클리드 거리는 실제 세계에서 의미가 있지만 다른 데이터가 있으면 빠르게 의미를 잃습니다. 특히 인공적으로 데이터를 벡터 공간으로 변환 할 때 이것이 유클리드 여야하는 이유가 있습니까?

고전적인 "오래된 충실한"데이터 세트를 가져와 정규화 없이 k- 평균을 실행 하지만 순수한 유클리드 거리를 사용하면 더 이상 의미가 없습니다. 실제로 "클러스터 로컬"Mahalanobis 거리의 일부 형태를 사용하는 EM은 훨씬 더 잘 작동합니다. 특히 스케일이 매우 다른 축에 적용됩니다.

k-means 의 주요 강점 인 Btw 는 데이터의 모양에 관계없이 실제로 데이터를 항상 분할한다는 것입니다. k- 평균을 사용하여 균일 한 노이즈를 k 클러스터로 분할 할 수 있습니다 . k- 평균 군집은 의미가 없다고 주장 할 수 있습니다. 또는 사용자가 클러스터를 "의미"할 필요없이 데이터를 분할하여 제곱 유클리드 거리를 최소화하기를 원했습니다.


@ Anony-Mousse 그리고 'k 클러스터로 파티션 균일 한 노이즈'에 대한 사용 사례?
CodeFarmer

없습니다. 요점은 k- 평균은 신경 쓰지 않고 균일 한 데이터를 "클러스터"로 분할한다는 것입니다. 즉, 말도 안되는 클러스터를 생성합니다.
익명-무스

6

최근에 클러스터링 알고리즘을 사용하기 시작했기 때문에 더 많은 지식을 갖춘 사람이 더 완전한 대답을 제공 할 수 있기를 바랍니다. 그러나 여기에 몇 가지 생각이 있습니다.

당신이 알고 있듯이 '의미있는'은 매우 주관적입니다. 따라서 클러스터링이 충분한 지 여부는 처음에 클러스터해야하는 이유에 전적으로 달려 있습니다. 그룹 멤버십을 예측하려는 경우 클러스터링이 우연히 나아질 가능성이 높으며 결과는 어느 정도 의미가 있습니다.

이 클러스터링이 얼마나 안정적 인지 알고 싶다면 비교할 메트릭이 필요합니다. 멤버십이 알려진 엔터티 집합이있는 경우 판별 분석을 사용하여 예측이 얼마나 좋은지 확인할 수 있습니다. 멤버십이 알려진 엔터티 집합이없는 경우 해당 필드에서 클러스터의 일반적인 분산이 무엇인지 알아야합니다. 엄격한 범주를 가진 엔티티의 물리적 속성은 인간의 심리 데이터보다 그룹 내 분산이 훨씬 낮을 가능성이 있지만 클러스터링을 '더 나쁘게'만드는 것은 아닙니다.

두 번째 질문은 'k의 어떤 값을 선택해야합니까?'라고 암시합니다. 다시 말하지만, 여기에는 어려운 대답이 없습니다. 사전 범주가없는 경우 평균 클러스터 분산을 최소화하면서 클러스터 수를 최소화 할 수 있습니다. 간단한 접근법은 '클러스터 수'대 '평균 클러스터 분산'을 플로팅하고 더 많은 클러스터를 추가해도 클러스터 분산에 큰 영향을 미치지 않는 "팔꿈치"를 찾는 것입니다.

k-means의 결과가 시각화 할 수 없다면 의미가 없다고 말하지는 않지만 클러스터가 시각적으로 명백 할 때 확실히 매력적입니다. 다시 말하지만, 왜 클러스터링을 수행해야하는지, 그리고 얼마나 신뢰할 수 있어야합니까? 궁극적으로 이것은 데이터 사용 방법에 따라 답변해야하는 질문입니다.


3

클러스터링이 의미가 있는지를 알기 위해 알고리즘을 실행하여 클러스터 수를 세고 1보다 큰 것을 출력하는지 확인할 수 있습니다.

kk

kk

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