Создание, настройка и обучение карт кохонена.

Дабы сократить текст m-файла, повторяющиеся команды возможно вынести в отдельный файл и оформить его как функцию, задав её параметры и возвращаемые значения:

function [net,kk,mr]=foo(a,b,X)

[kv,kf]=size(X);

net=som(kf,[a,b]);

Функция делает создание, обучение и обработку результатов обучения сети.

Приступаем к написанию тела функции. Перед созданием сети необходимо выяснить количество входов нейросетевой модели. Оно равняется количеству факторов, т.е. столбцов в массиве X:

[kv,kf]=size(X);

Следующая команда создаёт карту Кохонена net размерностью axb:

net=som(kf,[a,b]);

Где вместо a и b будут продемонстрированы фактические значения.

По окончании перед запуском обучения сети нужно задать его параметры.

Зададим начальные и конечные значения. Все параметры обучения задаются через массив с главных именем options:

options(14)=500; #кол-во эр

options(18)=0.1; #начальная скорость обучения

options(16)=0.01; #конечная скорость обучения

options(17)=0.25*b; #начальный радиус функции соседства

options(15)=1; #конечный радиус функции соседства

Обучение сети net на массиве данных X с заданными параметрами options осуществляется следующей командой:

net=somtrain(net,options,X);

Потом определим номера нейронов победителей Y:

[D2,Y]=somfwd(net,X); # номера нейронов победителей

Первый выходной параметр данной функции D2 – матрица, в которой на пересечении i-й строки и j-го столбца находится квадрат евклидова расстояния между вектором данных i и весовым вектором нейрона j. В будущем изучении данный массив не нужно.

Количество кластеров – количество несовпадающих номеров нейров-победителей в массиве Y. Сами номера возможно взять посредством функции intersect. Эта функция помогает для определения пересечения, она выдаст массив из элементов, каковые принадлежат обоим массивам

NN=intersect(Y,Y); #номера нейронов взявших активацию

kk=length(NN); #количество кластеров

Потом приступаем к расчёту среднего межкластерного расстояния. Это среднее расстояние между центроидами кластеров. В карте самоорганизации центроидами являются весовые векторы нейронов. Возьмём матрицу весовых коэффициентов сети:

W=sompak(net); # матрица весовых коэффициентов

Весовые векторы – строчка матрицы W.

Используем массив с номерами нейронов-победителей, скопируем лишь соответствующие им строки в новую матрицу:

W1=W(NN,:); # массив с номерами нейронов-победителей

Вычислим суммарное векторное расстояние SED и поделим на количество кластеров, дабы выяснить среднее межкластерное расстояние:

SED=0;

for i=1:kk

for j=1:kk

SED=SED+sqrt( sum((W1(i,:)-W1(j,:)).^2));

end

end

mr=SED/kk;

Отбор оптимальной сети.

Нужно выстроить карты самоорганизации с разной размерностью нейронного слоя. Для каждой из карт:

— задать размерность;

— задать параметры обучения;

— совершить обучение на взятом массиве X;

— подсчитать количество кластеров, на каковые поделены исходные 16 столбцов массива Х;

— вычислить среднее межкластерное евклидово расстояние.

Данный метод, с целью сокращения программы, реализуем в виде отдельного файла. Используем двумерную карту самоорганизации. Размеры нейронного слоя обозначим через a и b. В таблице приведены размерности карт.

A
B

По окончании того, как будут выяснены результаты обучения всех карт самоорганизации, среди них необходимо выбрать оптимальную. Оптимальной будем вычислять ту карту, у которой среднее межкластерное евклидово расстояние максимально среди всех карт.

Для отбора оптимальной сети нужно выстроить график.

В совокупности Octave существует пара способов выстроить два графика на одном рисунке, к примеру применять функцию plotyy. В этом случае масштабы по оси ординат будут свободны. Доводы функции: plotyy(X1,Y1,X2,Y2), где массивы X1 и Y1 содержат координаты точки для построения первого графика, X2 и Y2 – второго. Пускай первый график – количество кластеров, второй – межкластерное расстояние. Так как X1 и X2 совпадают, то пригодится организовать 3 массива:

1) Количество нейронов;

2) Количество кластеров;

3) Межкластерное расстояние.

Так, обрисованные выше действия в программе возможно отобразить так:

X(:,deli)=[]; #Удаление

X1=zeros(0,1); # количество нейронов

Y1=zeros(0,1); # количество кластеров

Y2=направляться(0,1); # межкластерное расстояние

for a=3:8

for b=a:a+1

[net,kk,mr]=foo(a,b,X);

X1=cat(1,X1,a*b); #Склейка количества нейронов

Y1=cat(1,Y1,kk); #Склейка количества кластеров

Y2=cat(1,Y2,mr); #Склейка межкластерного расстояния

end

end

plotyy(X1,Y1,X1,Y2); #Построение графика

Выяснить оптимальную сеть возможно по графику:

Создание, настройка и обучение карт кохонена.

Рисунок 1 – Графики зависимости количества кластеров и межкластерного расстояния от количества нейронов карты.

Тут ось абсцисс – количество нейронов в сети, светло синий линия – количество кластеров, зелёная – среднее межкластерное евклидово расстояние. Как видно, оптимальной есть карта 7х7=49 нейронов, выделившая 13 кластеров.

Вывод: Применяя функционал математического пакета Octave, мы подготовили комплект данных, на которых решалась задача кластеризации. И мы изучили и создали карты самоорганизации – карты Кохонена, с разной размерностью нейронного слоя. Итогом работы стало построение графика зависимости количества кластеров и межкластерного расстояния, благодаря которому мы выяснили оптимальную сеть. Возможно сделать вывод, что оптимальной есть двумерная карта Кохонена 7х7=49 нейронов, выделившая 13 кластеров.

AIML-4-5-2 Рекуррентные нейронные сети. Сеть Элмана


Интересные записи:

Понравилась статья? Поделиться с друзьями: