You are on page 1of 10

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Харківський національний університет

радіоелектроніки Кафедра біомедичної інженерії

ЗВІТ

з лабораторної роботи №4

Тема: «КЛАСТЕРІЗАЦІЯ ДАНИХ З ВИКОРИСТАННЯМ ПАКЕТУ


НЕЙРОНИХ МЕРЕЖ СЕРЕДОВИЩА MATLAB»
Дисципліна: «Методи обробки біомедичних даних»

Виконав: Перевірив:
ст.гр. БІБМІ-21-1
Трубіцин О.О
Фостенко.Є

Харків 2023
КЛАСТЕРІЗАЦІЯ ДАНИХ З ВИКОРИСТАННЯМ ПАКЕТУ НЕЙРОНИХ
МЕРЕЖ СЕРЕДОВИЩА MATLAB

Мета роботи
Ознайомитися з можливостями пакета нейронних мереж математичного
середовища Matlab на прикладі побудови нейронної мережі зі шаром Кохонена для
визначення кластерів.

Порядок виконання роботи

Використовуючи вбудовані функції пакету нейронних мереж


математичного середовища Matlab, побудуйте нейронну мережу з шаром Кохонена,
яка розділить множину індивідуальних вхідних даних (згідно вашого варіанту з
таблиці 4.1) на кластери та виявить їх центри. На навчену мережу підставте новий
вхідний вектор та визначте, до якого кластеру він належить. Проведіть ці обчислення
при кількості ітерацій 100, 500,1000.

Таблиця 4.1 – Дані для кластеризації

Дані Вектор

Зріст 175, 140, 182, 125, 143, 176, 193, 176, 188
183, 176, 125, 189, 178, 110, 118, 182,
158, 172, 179, 174, 172, 109

Вага 70, 65, 100, 199, 92, 84, 76, 92, 50, 145, 88
92, 96, 70, 49, 95, 88, 79, 82, 80, 50, 96,
191
Програма:
% Вхідні дані
data = [175 140 182 125 143 176 193 176 183 176 125 189 178 110 118 182 158 172 179 174 172 109; 70 65 100 199
92 84 76 92 50 145 92 96 70 49 95 88 79 82 80 50 96 191];
% Створення та навчання мережі Кохонена
h = newc([0 200; 0 100], 3, 0.1);
h.trainParam.epochs = 100;
h = train(h, data);
% Виведення ваг та зміщень нейронів
weights = h.IW{1};
biases = h.b{1};
disp('Weights:');
disp(weights);
disp('Biases:');
disp(biases);
% Побудова графіка вихідних даних
figure;
dataPlot = plot(data(1,:), data(2,:), '^r');
hold on;
% Нанесення центрів кластерів на графік
cluster1Plot = plot(weights(1,1), weights(1,2), 'ob');
cluster2Plot = plot(weights(2,1), weights(2,2), 'og');
cluster3Plot = plot(weights(3,1), weights(3,2), 'om');
% Новий вхідний вектор
newData = [188; 88];
newDataPlot = plot(newData(1), newData(2), '+k');
% Відображення легенди на графіку
legend([cluster1Plot, cluster2Plot, cluster3Plot, newDataPlot], 'Кластер 1', 'Кластер 2', 'Кластер 3', 'Искомая
точка');
% Опитування мережі
output = sim(h, newData);
clusterNumber = vec2ind(output);
% Виведення результатів
disp('Cluster number:');
disp(clusterNumber);
% Обчислення відстаней до центрів кластерів
distances = sqrt((data(1,:) - weights(1,1)).^2 + (data(2,:) - weights(1,2)).^2);
[minDist, minCluster] = min([distances; sqrt((data(1,:) - weights(2,1)).^2 + (data(2,:) - weights(2,2)).^2); sqrt((data(1,:)
- weights(3,1)).^2 + (data(2,:) - weights(3,2)).^2)]);
minDist = minDist';
minCluster = minCluster';
% Позначка точок вихідних даних на графіку відповідно до їх приналежності до кластерів
for j = 1:length(minCluster)
switch minCluster(j)
case 1
plot(data(1,j), data(2,j), '*b');
case 2
plot(data(1,j), data(2,j), '*g');
case 3
plot(data(1,j), data(2,j), '*m');
end
end
% Позначка шуканої точки на графіку
switch clusterNumber
case 1
plot(newData(1), newData(2), 'ob');
case 2
plot(newData(1), newData(2), 'og');
case 3
plot(newData(1), newData(2), 'om');
end

Command Window

atten

Weights:
177.4166 78.7719
137.4392 177.3824
128.4867 79.5919

Biases:
4.4935
17.0585
11.5323

Cluster number:
1
Графік :

1 1.1 – Результати кластеризації


4.3.2 Проведіть кластеризацію вихідних даних за заданими інформативним
параметрам ЕМГ-сигналу згідно з індивідуальним варіанті (табл. 4.2) у тривимірному
просторі

Таблиця 4.2 – Дані інформативних параметрів ЕМГ-сигналу для кластеризації

Дані Вектор

wP 16.0017, 16.0017, 12.8881, 5.9254, 5.9344


14.8042, 8.4865,14.7404, 112.0000,
22.1000, 1497801.0000, 23.0000,12.0410,
6.0487, 8.3617, 6.1341, 3.6065,
27.4368,8.0072,12.1916, 79.4884

delta Norm 59.7754, 59.7754, 51.7751, 30.8114


11.7138,148.8730, 71.0947,196.4272,
125.0000, 75.4000, 96.5000,
73.5000,24.8162,30.8514, 4.2979, 4.581,
55.8597, 208.6031, 34.0649,54.7038,
192.5905

delta Exp 0.0030, 0.0030, 3.8327, 8.3609, 0.0156


0.0022,0.2812, 0.0027,0.0146, 0.8700,
1.3800, 0.7100, 2.5879,2.6146,
9.3997,55.684, 0.047, 0.0134, 20.801,
6.6816, 0.1269

Програма :

% Інформативні параметри ЕМГ-сигналу

wP = [16.0017, 16.0017, 12.8881, 5.9254, 14.8042, 8.4865, 14.7404, 112.0000, 22.1000, 1497801.0000, 23.0000,
12.0410, 6.0487, 8.3617, 6.1341, 3.6065, 27.4368, 8.0072, 12.1916, 79.4884, 5.9344];
deltaNorm = [59.7754, 59.7754, 51.7751, 11.7138, 148.8730, 71.0947, 196.4272, 125.0000, 75.4000, 96.5000,
73.5000, 24.8162, 30.8514, 4.2979, 4.581, 55.8597, 208.6031, 34.0649, 54.7038, 192.5905, 30.8114];
deltaExp = [0.0030, 0.0030, 3.8327, 8.3609, 0.0022, 0.2812, 0.0027, 0.0146, 0.8700, 1.3800, 0.7100, 2.5879, 2.6146,
9.3997, 55.684, 0.047, 0.0134, 20.801, 6.6816, 0.1269, 0.0156];
% Об'єднання інформативних параметрів в одну матрицю даних
data = [wP; deltaNorm; deltaExp];
% Створення та навчання мережі Кохонена
h = newc([0 max(data(1,:)); 0 max(data(2,:)); 0 max(data(3,:))], 4, 0.1);
h.trainParam.epochs = 1000;
h = train(h, data);
% Виведення ваг та зміщень нейронів
weights = h.IW{1};
biases = h.b{1};
disp('Weights:');
disp(weights);
disp('Biases:');
disp(biases);
% Побудова тривимірного графіка вихідних даних
figure;
plot3(data(1,:), data(2,:), data(3,:), '^r');
hold on;
% Нанесення центрів кластерів на графік
for i = 1:size(weights, 1)
plot3(weights(i,1), weights(i,2), weights(i,3), 'ob');
end
% Відображення легенди на графіку
legend('Исходные данные', 'Кластер 1', 'Кластер 2', 'Кластер 3', 'Кластер 4');
% Проведення кластеризації при 100, 500 та 1000 ітераціях
iterations = [100, 500, 1000];
for iter = 1:length(iterations)
h.trainParam.epochs = iterations(iter);
h = train(h, data);
% Опитування мережі
output = sim(h, data);
clusterNumber = vec2ind(output);
% Позначка точок вихідних даних на графіку відповідно до їх приналежності до кластерів
for j = 1:length(clusterNumber)
switch clusterNumber(j)
case 1
plot3(data(1,j), data(2,j), data(3,j), '*b');
case 2
plot3(data(1,j), data(2,j), data(3,j), '*g');
case 3
plot3(data(1,j), data(2,j), data(3,j), '*m');
case 4
plot3(data(1,j), data(2,j), data(3,j), '*c');
end
end
% Позначка центрів кластерів на графіку
for i = 1:size(weights, 1)
plot3(weights(i,1), weights(i,2), weights(i,3), 'ob');
end
% Відображення легенди на графіку
legend('Вихідні дані', 'Кластер 1', 'Кластер 2', 'Кластер 3', 'Кластер 4');
% Виведення номера ітерації
disp(['Iteration: ' num2str(iterations(iter))]);
disp('Cluster numbers:');
disp(clusterNumber);
end

Command Window
atten

Weights:
1.0e+06 *

0.0000 0.0001 0.0000


1.4978 0.0001 0.0000
0.6066 0.0001 0.0000
0.8912 0.0001 0.0000

Biases:
1.0e+05 *

0.0000
0.0006
2.1001
2.0959

Iteration: 100
Cluster numbers:
111111111211111111111

Iteration: 500
Cluster numbers:
111111111211111111111

Iteration: 1000
Cluster numbers:
111111111211111111111
Графік :

Мал. 1.2 – Результати кластеризації


ВИСНОВКИ

В данній роботі ми ознайомилися з можливостями пакета нейронних мереж


математичного середовища MATLAB на прикладі побудови нейронної мережі зі
шаром Кохонена для визначення кластерів.
У роботі ми розглянули кроки побудови нейронної мережі Кохонена,
включаючи визначення вхідних даних, налаштування параметрів мережі, навчання
мережі та аналіз отриманих результатів. Ми використали інформативні параметри
сигналу ЕМГ для кластеризації даних у тривимірному просторі.
Після побудови нейронної мережі Кохонена ми провели навчання з різною
кількістю ітерацій і дослідили результати кластеризації. За допомогою трьохмерного
графіка ми візуалізували кластери, що утворилися після навчання мережі.
Отримані результати дозволяють зробити висновок, що нейронна мережа
Кохонена виявляє здатність визначати кластери у вхідних даних. Варіюючи кількість
ітерацій, можна досягти більш точної кластеризації і отримати кращі результати.

You might also like