14
내가 K-수단에 대해 뭔가를 배우려고 노력하고있어

오늘. 나는 알고리즘을 이해하고 그것이 어떻게 작동 하는지를 안다. 이제 오른쪽 k를 찾고 있어요 ... 팔꿈치 기준을 올바른 k를 탐지하는 방법으로 찾았지만 scikit과 함께 사용하는 방법을 이해하지 못합니다! scikit에서 내가 n_clusters = 1이 여러 번 수행해야 이런 식으로 그래서Scikit 알아보기 - K-수단 - 팔꿈치 - 기준

kmeans = KMeans(init='k-means++', n_clusters=n_clusters, n_init=10) 
kmeans.fit(data) 

에서 일을 클러스터링하고있어 배울 ... N 오른쪽 K를 얻을 수있는 오류 비율로 볼? 이게 어리 석고 많은 시간이 걸릴 것이라고 생각하니?!

답변

15

팔꿈치 기준 시각 방법이다. 나는 아직 그것에 대한 견고한 수학적 정의를 보지 못했다. 그러나 k-means는 매우 조잡한 경험적 발견법이기도합니다.

그렇습니다. k=1...kmax으로 k- 수단을 실행 한 다음 플롯의 결과 SSQ를 작성하고 "최적의"k를 결정해야합니다.

k=2으로 시작하는 X- 수단과 같은 k- 수단의 고급 버전이 있으며 보조 기준 (AIC/BIC)이 더 이상 향상되지 않을 때까지 증가시킵니다. k-means를 이식하는 것은 k = 2에서 시작하여 k = kmax가 될 때까지 반복적으로 클러스터를 분할하는 접근법입니다. 아마도 임시 SSQ를 추출 할 수 있습니다.

어느 쪽이든, 저는 실제 사용 사례에서 k-mean이 실제로 좋은 인상을 받았지만, 실제로 필요한 k를 실제로 알 수 있습니다. 이 경우, k-means는 사실 "클러스터링"알고리즘이 아니라 vector quantization 알고리즘입니다. 예 : 이미지의 색상 수를 k로 줄입니다. (종종 k를 예를 들어 32로 선택하면 5 비트의 색 깊이가되고 압축 된 방식으로 저장 될 수 있기 때문에). 또는 예 : 시각 어법 (bag-of-visual-words) 방식으로 어휘 크기를 수동으로 선택합니다. 인기있는 값은 k = 1000 인 것 같습니다. 그런 다음 "클러스터"의 품질에 대해서는별로 신경 쓰지 않지만 주요 포인트는 이미지를 1000 차원의 희소 한 벡터로 줄일 수 있다는 것입니다. 900 차원 또는 1100 차원 표현의 성능은 크게 다를 수 없습니다.

실제 클러스터링 작업의 경우 결과 클러스터를 수동으로 분석하려면 사람들은 보통 k- 수단보다 고급 방법을 사용합니다. K- 평균은 데이터 단순화 기술에 가깝습니다.

진정한 라벨 (귀하의 경우로) 미리 알 수없는 경우
9

은 다음 모델 (예를 들어, clustering은) 실루엣 계수를 사용하여 평가 될 수있다. sklearn documentation에서

,

높은 실루엣 계수 점수는 잘 정의 된 클러스터와 모델에 관한 것이다. 실루엣 계수는 각각의 샘플에 대해 정의 된 두 점수 구성되어 `

A : 시료와 동일한 클래스의 다른 지점 사이의 평균 거리.

B : 샘플과 다음 가까운 클러스터의 다른 모든 지점 사이의 평균 거리.

실루엣 계수는 단일 샘플에 대해 다음과 같이 특정된다 :

s=b-a/max(a,b) 지금

KMeans에 n_clusters위한 1..N 통해 최적 KMeans위한 k 값 루프를 찾는 각 샘플에 대한 실루엣 계수를 계산합니다.

높은 실루엣 계수는 개체가 자체 클러스터와 잘 일치하고 인접 클러스터와 잘 일치하지 않음을 나타냅니다.

from sklearn.metrics import silhouette_score 
from sklearn.datasets import load_iris 
from sklearn.cluster import KMeans 

X = load_iris().data 
y = load_iris().target 

for n_cluster in range(2, 11): 
    kmeans = KMeans(n_clusters=n_cluster).fit(X) 
    label = kmeans.labels_ 
    sil_coeff = silhouette_score(X, label, metric='euclidean') 
    print("For n_clusters={}, The Silhouette Coefficient is {}".format(n_cluster, sil_coeff)) 

출력 - n_clusters = 2의

가 실루엣 계수 n_clusters = 3 0.680813620271
이고, 실루엣 계수 n_clusters = 4 0.552591944521
이다 실루엣 계수이고 0.496992849949
n_clusters = 5 인 경우 실루엣 계수는 0.488517550854
n_clusters = 6 인 경우 Silhouette Coefficie NT는 n_clusters = 7의 0.370380309351
이다 실루엣 계수 n_clusters 들어 0.356303270516
가 = 8, 실루엣 계수 n_clusters = 9의 0.365164535737
, 실루엣 계수 n_clusters = 10 0.346583642095
, 실루엣 계수이다이다 0.328266088778

우리가 볼 수 있듯이, n_clusters의 = 2 가장 높은 실루엣 계수가 있습니다. 이것은 2가 클러스터의 최적 수임을 의미합니다. 맞습니까?

하지만 여기 잡기가 있습니다.

아이리스 데이터 세트에는 3 가지 종류의 꽃이 있으며, 이는 2를 클러스터의 최적 수와 모순됩니다.

  1. 아이리스 데이터 세트 3 종을 보유하고 - 그래서 n_clusters = 2 가장 높은 실루엣 계수에도 불구하고, 우리는 인해 클러스터의 n_clusters = 3로 최적의 수를 고려한다. (가장 중요 함)
  2. n_clusters = 2의 실루엣 계수는 두 번째로 높습니다.

따라서 n_clusters = 3을 선택하는 것이 가장 좋습니다. 홍채 데이터 세트를위한 클러스터.

최적의 번호 선택. 클러스터의 유형은 데이터 세트의 유형과 해결하려는 문제에 따라 다릅니다. 그러나 대부분의 경우 Silhouette Coefficient가 높을수록 최적의 클러스터 수를 얻을 수 있습니다.

희망 하시겠습니까?

+1

그러나 귀하의 예에서는 n = 2 실루엣 계수가 높지 않습니까? – mattdeak

+0

그것을 지적 해 주신 @mattdeak에게 감사드립니다.이 경우, n = 3을 선택하는 것은 홍채 데이터 세트가 3 가지 종을 갖지만, 동시에 실루엣 coeff를 갖는 것이 가장 좋습니다. 가장 높지 않습니다. 이것은 높은 sillhouette coeff라는 사실을 모순 된 것처럼 보입니다. 최적의 클러스터 수를 얻습니다. [gap static method] (http://web.stanford.edu/~hastie/Papers/gap.pdf) –

+0

최적의 n_cluster == 3으로 설정하십시오. 감사 – Yogesh