Рассмотрим 100 двухэлементных входных векторов единичной длины, распределенных равномерно в пределах от 0 до 90°:
angles = 0:0.5*pi/99:0.5*pi;
P = [sin(angles); cos(angles)];
plot(P(1,1:10:end), P(2,1:10:end),'*b'), hold on
График входных векторов приведен на рис. 7.13, а, и на нем символом * отмечено
положение каждого 10-го вектора.
а | б |
Рис. 7.13
Сформируем самоорганизующуюся карту Кохонена в виде одномерного слоя из 10 нейронов и выполним обучение в течение 2000 циклов:
net = newsom([0 1;0 1], [10]);
net.trainParam.epochs = 2000;
net.trainParam.show = 100;
[net, tr] = train(net,P);
plotsom(net.IW{1,1},net.layers{1}.distances) % Рис.7.13,а
figure(2)
a = sim(net,P);
bar(sum(a')) % Рис.7.13,б
Весовые коэффициенты нейронов, определяющих центры кластеров, отмечены
на рис. 7.13, а цифрами. На рис. 7.13, б показано распределение обучающих векторов
по кластерам. Как и ожидалось, они распределены практически равномерно с разбросом от 8 до 12 векторов в кластере.
Таким образом, сеть подготовлена к кластеризации входных векторов. Определим,
к какому кластеру будет отнесен вектор [1; 0]:
a = sim(net,[1;0])
a = (10,1) 1
Как и следовало ожидать, он отнесен к кластеру с номером 10.