Professional Documents
Culture Documents
ЛБ4
ЛБ4
ЗВІТ
з лабораторної роботи №4
Виконав: Перевірив:
ст.гр. БІБМІ-21-1
Трубіцин О.О
Фостенко.Є
Харків 2023
КЛАСТЕРІЗАЦІЯ ДАНИХ З ВИКОРИСТАННЯМ ПАКЕТУ НЕЙРОНИХ
МЕРЕЖ СЕРЕДОВИЩА MATLAB
Мета роботи
Ознайомитися з можливостями пакета нейронних мереж математичного
середовища Matlab на прикладі побудови нейронної мережі зі шаром Кохонена для
визначення кластерів.
Дані Вектор
Зріст 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
Графік :
Дані Вектор
Програма :
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 *
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
Графік :