точки даних: (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 )d2C(xi)xiCψ=∑ni=1d2C(xi) .
На кроці 2 містить один елемент (див. Крок 1), а X - сукупність усіх елементів. Таким чином, на цьому кроціCX є просто відстань між точкою в C і x i . Таким чином ϕ = ∑ n i = 1 | | x i - c | | 2 .d2C(xi)Cxiϕ=∑ni=1||xi−c||2
l o g ( ψ ) = l o g ( 52,128 ) = 3,95 = 4 ( r o u n d e dψ=∑ni=1d2(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)
Однак зауважте, що на етапі 3 застосовується загальна формула, оскільки буде містити більше одного пункту.С
Крок 3:
Цикл for виконується для обчислених раніше .л о г( ψ )
Малюнки не такі, як ви зрозуміли. Креслення є незалежними, що означає , що ви будете виконувати нічиї для кожної точки в . Отже, для кожної точки XХХ , позначеної як , обчисліть ймовірність з p x = l d 2 ( x , C ) / ϕ X ( C ) . Тут ви маєте l коефіцієнт, заданий як параметр, d 2 ( x , C ) - відстань до найближчого центру, а ϕ X ( C )хipх= l д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∈ XjСw [ 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 ) = w ( 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 показують, що для досягнення хорошого рішення достатньо лише декількох раундів.
л о г( ψ )