Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПР6_Заболотников_9373

.pdf
Скачиваний:
1
Добавлен:
20.06.2023
Размер:
653.29 Кб
Скачать

a2 = (Y_NORM(CLASTERS2(i, j)) - CENTERS_Y2(i)) ^ 2; sum_in_claster = sum_in_claster + (a1 + a2);

j = j + 1;

end;

CLS_SUMS2(s) = CLS_SUMS2(s) + sum_in_claster;

end;

end;

ordinates = zeros(1, k); for i = 1 : k

ordinates(i) = i;

end;

% отображение W(k) для k-means

%plot(ordinates, CLS_SUMS, '-o', 'MarkerEdgeColor', 'g', 'MarkerFaceColor', 'g');

%hold on;

plot(ordinates, F_SUMS, '-o', 'MarkerEdgeColor', 'g', 'MarkerFaceColor', 'g');

% отображение W(k) для k-medoids

%plot(ordinates, CLS_SUMS2, '-o', 'MarkerEdgeColor', 'k', 'MarkerFaceColor', 'k');

%%Пункт 6. Оценка качества кластеризации % см. пункты 4 и 5

%%Пункт 8. Модификация k-means++

%выбор первого начального центроида

CENTERS = zeros(2, k); CENTERS(1, 1) = X_NORM(1); CENTERS(2, 1) = Y_NORM(1); SUMS = zeros(1, n);

d = 0;

%выбор остальных начальных центроидов for r = 2 : k

summa = 0; for i = 1 : n

min_d = 10000; for j = 1 : k

if(CENTERS(1, j) ~= 0 && CENTERS(2, j) ~= 0)

d = (X_NORM(i) - CENTERS(1, j)) ^ 2 + (Y_NORM(i) - CENTERS(2, j)) ^ 2;

end;

if(d < min_d) min_d = d;

end;

end;

summa = summa + d; SUMS(i) = min_d;

end;

rnd = rand; while(rnd == 0)

rnd = rand;

end;

rnd = rnd * summa; summa = 0;

i = 1;

21

while(summa <= rnd) min_d = 10000; for j = 1 : k

if(CENTERS(1, j) ~= 0 && CENTERS(2, j) ~= 0)

d = (X_NORM(i) - CENTERS(1, j)) ^ 2 + (Y_NORM(i) - CENTERS(2, j)) ^ 2;

end;

if(d < min_d) min_d = d;

end;

end;

summa = summa + d; SUMS(i) = min_d; i = i + 1;

end;

CENTERS(1, r) = X_NORM(i); CENTERS(2, r) = Y_NORM(i);

end;

scatter(CENTERS(1, :), CENTERS(2, :), 'filled'); hold on;

CLASTERS3 = zeros(k, (n + 1)); ds = randi(1, 1, k);

% алгоритм k-means revision = 0; while(revision ~= k)

for j = 1 : k for r = 1 : n

CLASTERS3(j, r) = 0;

end;

end;

for i = 1 : n for j = 1 : k

sqr_x = (X_NORM(i) - CENTERS(1, j)) ^ 2; sqr_y = (Y_NORM(i) - CENTERS(2, j)) ^ 2; ds(j) = sqrt(sqr_x + sqr_y);

end;

min_d = 100; index = 0; for j = 1 : k

if (ds(j) < min_d) min_d = ds(j); index = j;

end;

end; j = 1;

while(CLASTERS3(index, j) ~= 0) j = j + 1;

end;

CLASTERS3(index, j) = i;

end;

revision = 0; for i = 1 : k r = 1;

22

summa_x = 0; summa_y = 0;

while((CLASTERS3(i, r) ~= 0) && (r <= n)) num = CLASTERS3(i, r);

summa_x = summa_x + X_NORM(num); summa_y = summa_y + Y_NORM(num); r = r + 1;

end;

new_center_x = summa_x / (r - 1); new_center_y = summa_y / (r - 1);

if(new_center_x == CENTERS(1, i) && new_center_y == CENTERS(2, i))

revision = revision + 1;

else

CENTERS(1, i) = new_center_x; CENTERS(2, i) = new_center_y;

end;

end;

end;

% отображение кластеров на графике

CLS = zeros((2 * k), (n + 1)); for i = 1 : (2 * k)

a = i / 2;

b = a - fix(a); if(b ~= 0)

j = 1;

while(CLASTERS3((fix(a) + 1), j) ~= 0)

CLS(i, j) = X_NORM(CLASTERS3((fix(a) + 1), j)); j = j + 1;

end;

else

j = 1;

while(CLASTERS3((fix(a)), j) ~= 0)

CLS(i, j) = Y_NORM(CLASTERS3(fix(a), j)); j = j + 1;

end;

end;

end; i = 1;

while(i < (2 * k)) j = 1;

while(CLS(i, j) ~= 0) if(i == 1)

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0 0.4470 0.7410] , ...

'MarkerFaceColor', [0 0.4470 0.7410]);

end;

if(i == 3)

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0.8500 0.3250 0.0980] , ...

'MarkerFaceColor', [0.8500 0.3250 0.0980]);

end;

if(i == 5)

23

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0.9290 0.6940 0.1250] , ...

'MarkerFaceColor', [0.9290 0.6940 0.1250]);

end;

if(i == 7)

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0.4940 0.1840 0.5560] , ...

'MarkerFaceColor', [0.4940 0.1840 0.5560]);

end;

if(i == 9)

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0.4660 0.6740 0.1880] , ...

'MarkerFaceColor', [0.4660 0.6740 0.1880]);

end;

if(i == 11)

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0.3010 0.7450 0.9330] , ...

'MarkerFaceColor', [0.3010 0.7450 0.9330]);

end;

if(i == 13)

plot(CLS(i, j), CLS((i + 1), j), 'o', 'MarkerEdgeColor', [0.6350 0.0780 0.1840] , ...

'MarkerFaceColor', [0.6350 0.0780 0.1840]);

end;

j = j + 1;

end;

i = i + 2;

end;

plot(CENTERS(1, :), CENTERS(2, :), 'p', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r');

%% Оценка работы k-means++ F3 = zeros(1, k);

C3 = zeros(1, k); summa = 0;

for i = 1 : k count = 0; j = 1;

sum_in_claster = 0; while(CLASTERS3(i, j) ~= 0)

a1 = (X_NORM(CLASTERS3(i, j)) - CENTERS(1, i)) ^ 2; a2 = (Y_NORM(CLASTERS3(i, j)) - CENTERS(2, i)) ^ 2; sum_in_claster = sum_in_claster + (a1 + a2);

count = count + 1; j = j + 1;

end;

F3(i) = sum_in_claster; C3(i) = count;

summa = summa + C3(i) * F3(i);

end;

summa = summa / n;

24