k- 평균 일명 확장 가능한 K- 평균 ++


12

Bahman Bahmani et al. k-means ++의 빠른 버전 인 k-means ||를 소개했습니다.

k- 평균의 초기화 ||

이 알고리즘은 그들의 논문 , Bahmani, B., Moseley, B., Vattani, A., Kumar, R. & Vassilvitskii, S. (2012)의 4 페이지에서 가져온 것입니다 . 확장 가능한 k- 평균 ++. VLDB 엔 다우먼트 절차 , 5 (7), 622-633.

불행히도 나는 그 멋진 그리스 문자를 이해하지 못하므로 이것이 어떻게 작동하는지 이해하는 데 도움이 필요합니다. 내가 이해하는 한,이 알고리즘은 개선 된 k-means ++ 버전이며 오버 샘플링을 사용하여 반복 횟수를 줄입니다. k-means ++는 번 반복해야 합니다. 여기서 k 는 원하는 군집 수입니다.kk

k-means ++의 작동 방식에 대한 구체적인 예를 통해 매우 좋은 설명 을 얻었 으므로 동일한 예를 다시 사용하겠습니다.

다음과 같은 데이터 집합이 있습니다.

(7,1), (3,4), (1,5), (5,8), (1,3), (7,8), (8,2), (5,9), (8 , 0)

(원하는 클러스터 수)k=3

(오버 샘플링 계수)=2

k- 평균의 데이터 세트 예 |

계산을 시작했지만 제대로했는지 확실하지 않으며 2, 4 또는 5 단계에 대해 잘 모릅니다.

  • 1 단계 : X 에서 무작위로 점을 균일하게 샘플링CX

    첫 번째 중심이 이라고 가정 해 봅시다 (k-me ++에서와 동일)(8,0)

  • 2 단계 : ψϕX(C)

    몰라

  • 3 단계 :

    • d2(x,C)=[2,41,74,73,58,65,4,90]

      각 점에서 가장 가까운 중심까지의 제곱 거리를 계산합니다. 이 경우 지금까지 한 개의 중심 만 있습니다.(8,0)

    • d2(x,C)=[4,81,148,146,116,130,8,180]

      ( 이 경우 이기 때문에 )=2

    • cumulative d2(x,C)=[4,85,233,379,495,625,633,813]

      =2[0,813)246.90659.42[379,495)[633,813)

    • O(logψ)ψ

  • xCwxXxC
  • Ck

일반적으로 또는이 특정 예에서 도움이 될 것입니다.

답변:


10

데이터 포인트 : (7,1), (3,4), (1,5), (5,8), (1,3), (7,8), (8,2), (5,9) , (8,0)

l = 2 // 오버 샘플링 계수

k = 3 // 아니오 원하는 클러스터의

1 단계:

C{c1}={(8,0)}X={x1,x2,x3,x4,x5,x6,x7,x8}={(7,1),(3,4),(1,5),(5,8),(1,3),(7,8),(8,2),(5,9)}

2 단계:

ϕX(C)XCXCX

dC2(xi)xiCψ=i=1ndC2(xi)

CXdC2(xi)Cxiϕ=i=1n||xic||2

ψ=i=1nd2(xi,c1)=1.41+6.4+8.6+8.54+7.61+8.06+2+9.4=52.128 log(ψ)=log(52.128)=3.95=4(rounded)

C

3 단계 :

log(ψ)

XXxipx=ld2(x,C)/ϕX(C)ld2(x,C)ϕX(C) 2 단계에서 설명합니다.

알고리즘은 다음과 같습니다.

  • 반복Xxi
  • xipxi
  • [0,1]pxiC
  • CC

lX

for(int i=0; i<4; i++) {

  // compute d2 for each x_i
  int[] psi = new int[X.size()];
  for(int i=0; i<X.size(); i++) {
    double min = Double.POSITIVE_INFINITY;
    for(int j=0; j<C.size(); j++) {
      if(min>d2(x[i],c[j])) min = norm2(x[i],c[j]);
    }
    psi[i]=min;
  }

  // compute psi
  double phi_c = 0;
  for(int i=0; i<X.size(); i++) phi_c += psi[i];

  // do the drawings
  for(int i=0; i<X.size(); i++) {
    double p_x = l*psi[i]/phi;
    if(p_x >= Random.nextDouble()) {
      C.add(x[i]);
      X.remove(x[i]);
    }
  }
}
// in the end we have C with all centroid candidates
return C;

4 단계 :

wC0XxiXjCw[j]1w

double[] w = new double[C.size()]; // by default all are zero
for(int i=0; i<X.size(); i++) {
  double min = norm2(X[i], C[0]);
  double index = 0;
  for(int j=1; j<C.size(); j++) {
    if(min>norm2(X[i],C[j])) {
      min = norm2(X[i],C[j]);
      index = j;
    }
  }
  // we found the minimum index, so we increment corresp. weight
  w[index]++;
}

5 단계 :

wkkp(i)=w(i)/j=1mwj

for(int k=0; k<K; k++) {
  // select one centroid from candidates, randomly, 
  // weighted by w
  // see kmeans++ and you first idea (which is wrong for step 3)
  ... 
}  

kmeans ++의 경우와 마찬가지로 클러스터링 알고리즘의 정상적인 흐름으로 이전 단계가 모두 계속됩니다.

지금 더 명확 해지기를 바랍니다.

[나중에 나중에 편집]

또한 저자가 발표 한 프레젠테이션을 찾았으며 각 반복에서 여러 지점을 선택할 수 있음을 명확하게 알 수 없습니다. 프레젠테이션은 여기에 있습니다 .

[나중에 @pera의 문제 수정]

log(ψ)

Clog(ψ)

주의해야 할 또 다른 사항은 같은 페이지에있는 다음 참고 사항입니다.

실제로 섹션 5의 실험 결과에 따르면 몇 번의 라운드만으로도 좋은 솔루션에 도달 할 수 있습니다.

log(ψ)


내 예에 대한 계산으로 답변을 연장 할 수 있습니까?
user1930254

나는 프로그래머입니다. 여기에 입력하는 것보다 더 빨리 코드로 작성할 수 있다고 생각합니다 :). 그것이 algo를 설명하기를 바랍니다.
rapaio

log (Ksi) 반복 횟수로 아이디어가 무엇인지 설명해 주시겠습니까? 나는 그 아이디어를 이해하지 못합니다. 반복 횟수는 객체의 값 범위에 따라 달라 지므로 합리적인 것으로 보이지 않습니다. 예를 들어 객체의 속성 값이 약 1000 인 경우 오류가 약 1000이 될 수 있습니다. 즉, 3 회 반복됩니다. 반면에, 값이 10의 범위에 있으면 오류가 약 10이되어 1 회 반복 될 수 있습니다. 반복 횟수가 객체 수에 의존해서는 안됩니까?
Marko

@pera 제기 한 문제를 명확히하기 위해 답변을 업데이트합니다.
rapaio

@rapaio 귀하의 답변에 감사드립니다. 나는 이미 메도 이드 수를 기반으로 반복 횟수를 결정하는 솔루션을 찾고 있습니다. 여기서 x는 몇 번의 반복 비용으로 더 나은 초기화를 위해 증가 될 수 있습니다. 당신이 준 두 번째 부분에 기초하여 괜찮습니까? 다시 한번 감사합니다.
Marko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.