Сети Кохонена
Это отдельный класс нейронных сетей, используемых для решения различных задач классификации и производных от них
Для применения нейронных сетей Кохонена в задачах классификации требуется некоторая формализация. Каждый объект, который требуется классифицировать, представляется в виде некоторого вектора, подающегося на вход нейронной сети. Количество нейронов во входном слое определяется количеством компонентов этого входного вектора. Количество же выходов определяется количеством классов, т.е. если всего M классов, то количество нейронов в выходном слое тоже будет M. Таким образом, каждый нейрон в выходном слое «отвечает» за свой класс. Значения, которые принимают нейроны в выходном слое, отображают, насколько вектор классифицируемого объекта на входе близок, по мнению нейронной сети Кохонена, к тому или иному классу. Чем больше «уверенность», что объект принадлежит к тому или иному классу, тем большее значение принимает нейрон соответствующего класса. Рассмотрим следующую нейронную сеть Кохонена с тремя входами и двумя выходами, т.е. нейронную сеть для классификации всего по двум классам:
Принцип
работы уже обученной нейронной сети
Кохонена следующий. Нейроны входного
слоя (на рис. обозначены кружочками) не
выполняют никаких вычислений и служат
лишь точками разветвления. Каждый нейрон
входного слоя
соединен
с каждым нейроном скрытого слоя
,
который называют слоем
Кохонена,
отдельным весом, так, например, первый
нейрон входного слоя соединен с первым
нейроном слоя Кохонена весом
.
Нейроны слоя Кохонена складывают
поступающие значения и подают их на
нейроны выходного слоя
:
один нейрон слоя Кохонена – один нейрон
выходного слоя.
или:
где:
–
это выход
-нейрона
слоя Кохонена;
–
сигналы входного
вектора
.
Как правило, на выходе нейронной сети устанавливают некоторый интерпретатор: нейроны слоя Кохонена генерируют сигналы , интерпретатор выбирает максимальный сигнал и выдает номер класса M, к которому следует отнести классифицируемый объект.
Обучение нейронной сети Кохонена является обучением без учителя.
Работа с нейронными сетями в интерактивном режиме Matlab
Набрав nntool в командном окне Matlab, увидим окно
Этапы работы с нейронной сетью:
1. Импорт входных (Input) и классифицирующих (Target) данных из workspace [IMPORT].
2. Создание новой сети [NEW].
3. Выбор сети в списке Network и нажатие [OPEN]
4. Выбор закладки обучение (training) в окне Network.
5. Выбор входных классифицирующих данных и нажатие [TRAIN].
6. Можно также использовать окно Network для распознавания (simulate) по сети или
Описание кнопок:
[IMPORT] – импорт данных из workspace или из файла.
[NEW] – создание сетей и данных в диалоговом режиме.
[OPEN] – открытие выбранных данных или сети для просмотра или редактирования.
[EXPORT] – экспорт данных и сетей в workspace или в файл.
[DELETE] – удаление выбранных данных или сети.
Проиллюстрируем работу с персептроном и сетью Кохонена на примере данных ирисов Фишера.
Для персептрона создадим обучающую и контролирующую выборки для двух кдассов (в примере 1 и 2)
load fisheriris;
tr1=meas(1:25,:);
tr2=meas(51:75,:);
trr=[tr1;tr2];
tr=trr';%Обучающая матрица транспонируются – строки признаки, столбцы – наблюдения.
out(1:25)=0;%классифицирующие данные
out(26:50)=1;
cr1=meas(26:50,:);
cr2=meas(76:100,:);
crr=[cr1;cr2];
cr=crr';%Контролирующие данные
После выполнения скрипта запускается nntool –интерактивный редактор нейронных сетей
Нажатие Inport
Выбор tr как Input
Импорт cr как Input
Импорт out как Target
Создание сети типа Perceptron
Просмотр архитектуры сети
Обучение сети – выбор входных и классифицирующих данных
Обучение сети – изменение параметров обучения, обычно только число итераций )epochs)
Ход выполнения обучения
Распознавание обучающей выборки
Просмотр результатов распознавания – половина 0, половина 1
Просмотр ошибок – все 0
Результаты распознавания можно экспортировать ы workspace для обработки и анализа
Сеть Кохонена (конкурирующая)
Для подготовки данных используем скрипт
load fisheriris
tr1=meas(1:25,:);
tr2=meas(51:75,:);
tr3=meas(101:125,:);
trr=[tr1;tr2;tr3];
tr=trr';
cr1=meas(26:50,:);
cr2=meas(76:100,:);
cr3=meas(126:150,:);
crr=[cr1;cr2;cr3];
cr=crr';
Аналогично предыдущему импортируем обучающие данные tr и контролирующие данные cr
Затем создаем сеть типа competitive. В качестве Input зададим tr, число нейронов равно числу классов
Окно открытия сети
Обучение и распознавание происходит аналогично предыдущему.
Результаты распознавания можно просмотреть. Они представляют собой матрицу в данном случае из 3 строк (по числу классов) и 75 столбцов (по числу объектов). Только в одной строке из 3 для каждого объекта стоит 1, в остальных 0 (1 соответствует номеру распознанного класса).
Эти данные можно экспортировать в workspace для дальнейшей обработки.
Для нашего примера скрипт анализа
for i=1:75
kl_tr(i)=find(network11(:,i)==1);
end
for i=1:75
kl_cr(i)=find(network12(:,i)==1);
end
sovp_tr2=length(find(kl_tr(1:25)==2))/25;
sovp_tr3=length(find(kl_tr(26:50)==3))/25;
sovp_tr1=length(find(kl_tr(51:75)==1))/25;
sovp_cr2=length(find(kl_cr(1:25)==2))/25;
sovp_cr3=length(find(kl_cr(26:50)==3))/25;
sovp_cr1=length(find(kl_cr(51:75)==1))/25;
позволит посчитать долю правильно распознанных объектов по каждому классов для обучающих и контролирующих объектов
