Кластеризация с использованием Neural Network Clustering Tool
Открываем окно графического интерфейса Neural Network Start >> nnstart
Появляется стартовое окно (рис. 3.5)
Рис. 3.5. Стартовое окно
В окне выбираем кнопку Clustering app и появляется окно приглашения (рис. 6.6). Можно сразу открыть окно приглашения, минуя стартовое окно, если задать команду
>> nctool
Можно на вкладке APPS MATLAB выбрать кнопку — Neural Net Clustering.
В окне приглашения сообщается, что можно создать слой, который может классифицировать массив векторов с любого числа измерений на столько классов, сколько нейронов имеет слой. Нейроны организованы по двумерной топологии, чтобы сформировать представление о распределении и двумерное приближение набора данных. Сеть обучается методом пакетного обучения (tainbu), а настройка весов производится функцией learnsomb.
В окне приглашения нажимаем Next и открываем окно выбора данных Select Data(рис. 3.7). Кнопки позволяет выбрать файлы входных и целевых (выходных) данных для обучения. С помощью радиокнопок можно выбрать являются ли образцы (Samples are) столбцами матрицы (Matrix columns) или строками матрицы (Matrix rows). Кнопка Load Example Data Set позволяет выбрать готовые демонстрационные примеры. Выбираем эту кнопку. Открывается окно выбора набора данных распознавания Pattern Recognition Data Set Chooser (рис. 3.8).
Рис. 3.6. Окно приглашения
Рис. 3.7. Окно выбора данных
Рис. 3.8. Окно выбора набора данных
При решении задачи кластеризации доступны два набора данных:
- Simple Classes — входной массив содержит 1000 двухэлементных векторов.
- Iris Flowers — распознавание сорта цветка ириса.
В правой половине окна (Description) приводится описание каждого набора данных и источник, откуда взяты данные. Выберем задачу кластеризации трех сортов цветов ириса (это известная в математической статистике задача "Ирисы Фишера"). Цветы будут разбиваться на кластеры по следующим признакам:
1. Длина чашелистика в см.
2. Ширина чашелистика в см.
3. Длина лепестка в см.
4. Ширина лепестка в см.
Выбрав Iris Flowers, нажимаем кнопку Import. Происходит возврат в окно Select Data (рис. 3.7) и можно изменить выбор набора данных. Если не надо изменять набор, то нажимаем кнопку Next и переходим в окно в окно выбора архитектуры сети Network Architecture (рис. 3.9)
Рис. 3.9. Окно архитектуры сети
По умолчанию создается карта размером ячеек. Эти размеры можно изменить, задавая параметр Size of two-dimensional Map). Оставляем параметры сети без изменения и нажимаем кнопку Next. В результате переходим к окну обучения сети Train Network (рис. 3.10).
В данный момент в этом окне доступна только кнопка обучения Train, нажимаем ее и переходим в окно процесса обучения сети Neural Network Training (рис. 3.11). Одновременно появляется окно обучения сети (рис. 3.12), позволяющее повторить обучение сети и вывести некоторые графики.
Рис. 2.10. Окно обучения сети
Рис. 3.11. Окно процесса обучения сети
Рис. 3.12. Вид окно обучения сети после завершения обучения
Топологию карты (рис. 3.13) можно увидеть, нажав на кнопку SOM Topology в окне процесса обучения (рис. 3.11).
Рис. 3.13. Топология карты
Из рис. 3.13 видно, что топология карты является гексагональной. На рис. 3.13 каждый из шестиугольников представляет собой нейрон. Карта имеет размеры , таким образом, карта содержит 100. Каждый входной вектор содержит четыре элемента, поэтому входное пространство четырехмерное. Карта отображает четырехмерное пространство в двумерное.
График соседних соединений карты — Plot self-organizing map neighbor connections (рис. 3.14) выводится, если нажать кнопку SOM Neighbor connectionsв окне процесса обучения.
Рис. 3.14. График соседних соединений карты
На графике нейроны показаны синими шестиугольниками. Красные линии указывают на их непосредственных соседей (нейроны в слое не связаны).
График расстояний до соседних весов (Унифицированная матрица расстояний — U-matrix) (рис. 3.15) применяется для визуализации структуры кластеров, полученных в результате обучения карты. Элементы матрицы определяют расстояние между весами нейрона и весами его ближайших соседей. Большое значение говорит о том, что данный нейрон сильно отличается от окружающих и относится к другому кластеру. Для просмотра U‑матрицы, необходимо нажать кнопку SOM Neighbor Weight Distances в окне обучения. На этом рисунке синие шестиугольники представляют нейроны. Красные линии показывают на соседние нейроны. Цвета в участках, содержащих красные линии, указывают расстояния между нейронами. Более темные цвета представляют большие расстояния. Полоса темных сегментов пересекает карту от нижнего региона до правого верхнего региона карты. Карта сгруппировала цветы ириса на два кластера.
Рис. 3.15. График расстояний до соседних весов
Результаты часто представляют в виде графика весов, часто называемого компонентной плоскостью — Component Planes (рис. 3.16). Для этого необходимо нажать на кнопку SOM Input Planes в окне обучения. На графике более темные цвета представляют большие веса. Одинаковыми цветами отмечаются близкие веса. На рис. 3.16 видно, что цветы резко отличаются по первому и второму входам (длина чашелистика и ширина чашелистика) и близки по третьему и четвертому входам (длина лепестка и ширина лепестка).
Рис. 3.16. Компонентные плоскости
График попаданий примеров в кластеры (рис. 3.17) показывает, сколько из обучающих данных связаны с каждым из нейронов (нейрон является центром кластера). Для вывода графика необходимо нажать на кнопку SOM Sample Hitsв окне обучения.
Рис. 3.17. График попаданий примеров в кластеры
График положения весов (рис. 3.18) показывает зелеными точками координаты входных векторов, определяемые по первым двум компонентам. Аналогично синими точками отображаются координаты векторов векторов первых двух весов нейронов. Соседние нейроны соединяются красными линиями. Обратите внимание, что близкими являются нейроны в пространстве признаков, а не расположенные в соседних ячейках.
Рис. 3.18. Положение весов
Так как результаты обучения получились удовлетворительные, нажимаем кнопку Next в окне обучения сети после завершения обучения (рис. 3.12). Появляется окно оценки сети (Evaluate Network) (рис. 3.19).
Рис. 3.19. Окно оценки сети
Левая часть окна предлагает повторить для улучшения производительности (Iterate for improved performance):
- обучение (кнопка Train Again), если первая попытка не дала удовлетворительных результатов или если требуется улучшение результатов;
- увеличить размер сети — по кнопке Adjust Network Sizeпроисходит переход к окну выбора архитектуры сети (рис. 3.9);
- использовать бо́льший набор данных — по кнопке Import Larger Data Set происходит переход к окну выбора данных (рис. 3.8).
В правой части окна предлагается провести дополнительные испытания (Optionally perform additonal tests), выбрав входные и целевые значения.
Для завершения работы с сетью нажимаем на кнопку Next и переходим в окно Deploy Solution развертывания (размещения) решения (рис. 3.20).
Рис. 3.20. Окно развертывания решения
Как и при решении других задач, в этом окне можно сгенерировать функции для MATLAB Compiler, позволяющего создавать независимые приложения (.exe), компоненты и библиотеки (.dll), и для MATLAB Builder — для создания пакетов, расширяющих возможности MATLAB Compiler средствами генерации компонентов различных фреймворков, например, Microsoft .NET Framework. Возможна генерация функции для MATLAB Coder, генерирующего автономный C и C++ код из кода MATLAB. Возможно моделирование сети в системе Simulink и генерация графической диаграммы сети как в окне архитектуры сети (рис. 3.9).
В последнем окне — окне сохранения результатов (рис. 2.44) можно сохранить результаты, сгенерировать программу, воспроизводящую создание сети, сгенерировать диаграмму сети и диаграмму сети в пакете Simulink.
Нажав кнопку Simple Script или Advanced Script можно сгенерировать простой или усовершенствованный код MATLAB, воспроизводящий действия Neural Network Clustering Tool. Усовершенствованный код отличается более детальным заданием параметров функций. В простом коде многие параметры устанавливаются по умолчанию.
Рис. 3.21. Окно сохранения результатов
Можно сохранить отмеченные результаты в рабочем пространстве MATLAB. При этом рекомендуется заменить имена, присеваемые по умолчанию, на свои имена.
Для завершения работы с пакетом Neural Network Clustering Tool необходимо нажать кнопку Finishв окне сохранения результатов.
Задания
1. Проделайте все примеры, приведенные в работе.
2. Решите задачу кластеризации для одного из указанных преподавателем тестовых наборов данных, использовавшихся в решении задачи распознавания образов. Проанализируйте полученные результаты.
Использование команд
Сгенерированные в окне сохранения результатов (рис. 3.21) код появляется в окне редактора и может редактироваться и сохраняться. Простой код (Simple Script) и усовершенствованный код (Advanced Script) сохранены в библиотеке Samples примеров лабораторного практикума под именами som_simple.m и som_advanced.m. Программа som_simple_rus.m содержит переведенные на русский язык и расширенные комментарии и необходимые дополнения (сгенерированная программа требует предварительной загрузки в рабочее пространство исходных данных):
% Решение задачи кластеризации с помощью самоорганизующейся карты
% Скрипт сгенерирован приложением Neural Clustering
% с некоторыми дополнениями
% Created Sun Apr 20 14:23:32 GMT+04:00 2014
%
% Этот сценарий предполагает, что эти переменные определены:
% irisInputs - input data.
%x = irisInputs;
% Добавлены закрытия окон и очистка
close all
clc
clear
% Вызов функции загрузки исходных данных
% В сгенерированной программе отсутствует, т.к. предполагается, что
% данные уже помещены в рабочее пространство
x = iris_dataset;
% Создание самоорганизующейся карты
dimension1 = 10;
dimension2 = 10;
net = selforgmap([dimension1 dimension2]);
% Обучение сети
[net,tr] = train(net,x);
% Тестирование сети
y = net(x);
% Вывод структуры сети
view(net)
% Графики
% Раскомментируйте строки, чтобы включит различные графики
% Графики могут быть построены из окна обучения сети
% Топология карты
%figure, plotsomtop(net)
% График соседних соединений карты
%figure, plotsomnc(net)
% График расстояний до соседних весов
%figure, plotsomnd(net)
% Построение компонентных плоскостей
%figure, plotsomplanes(net)
% График попаданий примеров в кластеры
%figure, plotsomhits(net,x)
% График положения весов
%figure, plotsompos(net,x)
Сгенерированная программа очень простая. Детального разбора требует только обучение карты Кохонена. Рассмотрим обучение при параметрах, установленных по умолчанию. Функция trainвызывает методпакетного обучения без учителя весов и смещений, реализуемый функций trainbu. Эта функция настраивает веса и смещения в соответствии с заданной функцией настройки после каждой эпохи (один проход через весь набор входных векторов). Обучение останавливается, если выполняется любое из условий:
• достигается максимальное число эпох;
• достигается малая величина функционала ошибки
( — вектор весов нейрона‑победителя при предъявлении входного вектора , — размер обучающей выборки);
• Превышено максимальное время обучения;
• Функционал ошибки на контрольном множестве увеличивался более чем max_fail раз с момента последнего снижения (это означает применение раннего останова).
Настройка весов самоорганизующейся карты производится функцией learnsomb, в чем можно убедиться, задав команду
>> net.inputWeights{1,1}.learnFcn
ans =
learnsomb
Функция реализует пакетный режим обучения карты Кохонена (Batch-Learning Self-Organizing Map) [9, 11]. На каждом шаге обучения определяется нейрон‑победитель. Вокруг нейрона‑победителя образуется окрестность, или соседство (neighborhood). Соседство определяет, какие нейроны кроме нейрона‑победителя участвуют в обучении (т.е. корректируют свои веса) на данном шаге. Под размером окрестности (neighborhood size) подразумевается расстояние в пространстве векторов весов нейронов. Т. е. любой нейрон, расстояние от вектора весов которого до вектора весов нейрона‑победителя менее радиуса обучения, участвует в коррекции весов на данной итерации. В пакетном обучении карты компоненты векторов весов нейронов‑победителей и нейронов, расположенных в окрестности победителя, рассчитываются как средние значения компонентов всех входных векторов прохода.
Размер окрестности уменьшается с увеличением числа шагов обучения. Процесс обучения карты Кохонена включает 2 этапа: этап упорядочения векторов весовых коэффициентов в пространстве признаков и этап настройки. На этапе упорядочивания размер окрестности уменьшается от начального значения (по умолчанию net.inputWeights{1,1}.learnParam.init_neighborhood=3) до нулевогоразмера, используемого на этапе настройки. Этап упорядочивания длится заданное число шагов (по умолчанию net.inputWeights{1,1}.learnParam.steps=100). На этапе настройки размер окрестности равен нулю и в настройке участвует только нейрон‑победитель, веса которого рассчитываются как средние значения компонентов входных векторов.
Программа som_advanced.m имеет вид:
% Solve a Clustering Problem with a Self-Organizing Map
% Script generated by Neural Clustering app
% Created Sat May 17 21:21:47 GMT+04:00 2014
%
% This script assumes these variables are defined:
%
% irisInputs - input data.
x = irisInputs;
% Create a Self-Organizing Map
dimension1 = 10;
dimension2 = 10;
net = selforgmap([dimension1 dimension2]);
% Train the Network
[net,tr] = train(net,x);
% Test the Network
y = net(x);
% View the Network
view(net)
% Plots
% Uncomment these lines to enable various plots.
%figure, plotsomtop(net)
%figure, plotsomnc(net)
%figure, plotsomnd(net)
%figure, plotsomplanes(net)
%figure, plotsomhits(net,x)
%figure, plotsompos(net,x)
% Deployment
% Change the (false) values to (true) to enable the following code blocks.
if (false)
% Generate MATLAB function for neural network for application deployment
% in MATLAB scripts or with MATLAB Compiler and Builder tools, or simply
% to examine the calculations your trained neural network performs.
genFunction(net,'myNeuralNetworkFunction');
y = myNeuralNetworkFunction(x);
end
if (false)
% Generate a matrix-only MATLAB function for neural network code
% generation with MATLAB Coder tools.
genFunction(net,'myNeuralNetworkFunction','MatrixOnly','yes');
y = myNeuralNetworkFunction(x);
end
if (false)
% Generate a Simulink diagram for simulation or deployment with.
% Simulink Coder tools.
gensim(net);
end
Программа также требует загрузки исходных данных. Программа отличается от som_simple.m только возможностью генерации кода для развертывания (Deployment).
Задания
Модифицируйте сгенерированную программу для решения задачи построения карты Кохонена для одного из указанных преподавателем тестовых наборов данных, имеющихся в MATLAB. Проанализируйте полученные результаты.