k-означає || ака масштабований K-засоби ++


12

Бахман Бахмані та ін. введено k-означає ||, що є більш швидкою версією k-означає ++.

Ініціалізація k-засобів ||

Цей алгоритм взято зі сторінки 4 своєї статті , Бахмані, Б., Мозелі, Б., Ваттані, А., Кумар, Р., та Васильвіцький, С. (2012). Масштабований k-означає ++. Праці Фонду VLDB , 5 (7), 622-633.

На жаль, я не розумію цих вигадливих грецьких букв, тому мені потрібна допомога, щоб зрозуміти, як це працює. Наскільки я розумію, цей алгоритм є вдосконаленою версією k-означає ++, і він використовує передискретизацію, щоб зменшити кількість ітерацій: k-означає ++ має повторити разів, де k - кількість бажаних кластерів.кк

Я отримав дуже хороше пояснення через конкретний приклад того, як k-означає ++ працює, тому я знову використаю той же приклад.

Приклад

У мене є такий набір даних:

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

(кількість бажаних кластерів)к=3

(коефіцієнт перевибору)=2

Приклад набору даних для k-засобів ||

Я почав її обчислювати, але не впевнений, чи правильно я це зрозумів, і не маю поняття про кроки 2, 4 або 5.

  • Крок 1: С вибірку точки рівномірно випадково від Х

    Скажімо, перший центроїд (те саме, що і в k-означає ++)(8,0)

  • Крок 2: ψϕХ(С)

    не маю уявлення

  • Крок 3:

    • г2(х,С)=[2,41,74,73,58,65,4,90]

      Обчислюємо відстані у квадраті до найближчого центру до кожної точки. У цьому випадку ми маємо поки що один центр (8,0) .

    • г2(х,С)=[4,81,148,146,116,130,8,180]

      (Тому що в цьому випадку.)=2

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

      Виберіть випадкових числа в інтервалі [ 0 , 813 ) . Скажіть, ви обираєте 246,90 і 659,42 . Вони потрапляють у діапазони [ 379 , 495 ) та [ 633 , 813 )=2[0,813)246.90659.42[379,495)[633,813) які відповідають 4-му та 8-му пунктам відповідно.

    • Повторіть це разів, але що таке ψO(logψ)ψ (обчислено в кроці 2) у цьому випадку?

  • Крок 4: Для встановіть, що w x - кількість точок у X, ближча до x, ніж будь-яка інша точка в CxCwxXxC .
  • Крок 5: Перезарахуйте зважені точки в на kCk кластерів.

Будь-яка допомога в цілому або в цьому конкретному прикладі була б чудовою.

Відповіді:


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С . X = { x 1 , x 2 , x 3 , x 4 , x 5 , x 6 , x 7 , x 8 } = { ( 7 , 1 ) , ( 3 , 4 ) , ( 1{c1}={(8,0)}Х={х1,х2,х3,х4,х5,х6,х7,х8}={(7,1),(3,4),(1,5),(5,8),(1,3),(7,8),(8,2),(5,9)}

Крок 2:

являє собою суму всіх найменших відстаней 2-норма (евклідова відстань) від усіх точок з безлічі X для всіх точок з C . Іншими словами, для кожної точки X знайдіть відстань до найближчої точки в C , врешті обчисліть суму всіх цих мінімальних відстаней, по одній для кожної точки XϕХ(С)ХCXCX .

Позначимо з як відстань від ї I до найближчої точки в C . Тоді маємо ψ = n i = 1 d 2 C ( x i )dC2(xi)xiCψ=i=1ndC2(xi) .

На кроці 2 містить один елемент (див. Крок 1), а X - сукупність усіх елементів. Таким чином, на цьому кроціCX є просто відстань між точкою в C і x i . Таким чином ϕ = n i = 1 | | x i - c | | 2 .dC2(xi)Cxiϕ=i=1n||xic||2

l o g ( ψ ) = l o g ( 52,128 ) = 3,95 = 4 ( r o u n d e dψ=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(rоунгег)

Однак зауважте, що на етапі 3 застосовується загальна формула, оскільки буде містити більше одного пункту.С

Крок 3:

Цикл for виконується для обчислених раніше .лог(ψ)

Малюнки не такі, як ви зрозуміли. Креслення є незалежними, що означає , що ви будете виконувати нічиї для кожної точки в . Отже, для кожної точки XХХ , позначеної як , обчисліть ймовірність з p x = l d 2 ( x , C ) / ϕ X ( C ) . Тут ви маєте l коефіцієнт, заданий як параметр, d 2 ( x , C ) - відстань до найближчого центру, а ϕ X ( C )хipх=лг2(х,С)/ϕХ(С)лг2(х,С)ϕХ(С) пояснюється на кроці 2.

Алгоритм просто:

  • повторіть у щоб знайти всі x iХхi
  • для кожного обчислити p x iхipхi
  • генерувати рівномірне число в , якщо воно менше p x, я вибираю його, щоб утворити C [0,1]pхiС'
  • після того, як ви зробили все нічиї включають вибрані точки з Into CС'С

Зауважте, що на кожному кроці 3, виконаному в ітерації (рядок 3 вихідного алгоритму), ви очікуєте вибору точок з X (це легко показано, записуючи безпосередньо формулу очікування).лХ

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:

шС0ХхiХjСш[j]1ш

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:

шккp(i)=ш(i)/j=1мшj

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]

лог(ψ)

Слог(ψ)

Ще одна річ, яку слід зазначити, є наступна примітка на тій самій сторінці, де зазначено:

На практиці наші експериментальні результати в Розділі 5 показують, що для досягнення хорошого рішення достатньо лише декількох раундів.

лог(ψ)


ви можете, будь ласка, розширити свою відповідь розрахунком для мого прикладу?
користувач1930254

Я програміст, я думаю, що можу написати це в коді швидше, ніж набирати тут :). Сподіваюся, це пояснює альго.
rapaio

Чи можете ви поясніть, що таке ідея з кількістю повторень log (Ksi)? Я не розумію ідеї під нею, здається, що кількість ітерацій буде залежати від діапазону значень об'єктів, що не здається розумним. Наприклад, якщо об'єкти мають значення атрибутів приблизно 1000, це може, наприклад, призвести до того, що помилка становить близько 1000, а це означає, що буде 3 ітерації. З іншого боку, якщо значення знаходяться в діапазоні 10, це може призвести до помилки приблизно 10, що призводить до 1 ітерації. Чи не повинна кількість ітерацій залежати від кількості об’єктів?
Марко

@pera Я оновлюю відповідь, щоб уточнити поставлене вами питання
rapaio

@rapaio Дякую за вашу відповідь, я вже берусь за рішення, яке визначить кількість ітерацій на основі кількості медоїдів. Де х можна збільшити, щоб отримати кращу ініціалізацію ціною на пару ітерацій більше. Чи добре ви добре, виходячи з другої частини, яку ви дали? Знову дякую.
Марко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.