Добавил:
vk.com СтудСклад КубГУ vk.com/studskladrn Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив С / 8 семестр / Жаркова / Laboratornaya_rabota_8

.pdf
Скачиваний:
45
Добавлен:
11.08.2019
Размер:
222.49 Кб
Скачать

Лабораторная работа 8.

Тема: «Решение задачи кластеризации с помощью нейронных сетей в ПП

MATLAB».

Цель: освоить основные принципы решения задачи кластеризации с использованием нейронных сетей, нейронных сетей со слоем Кохонена и самоорганизующихся карт.

Введение

Самоорганизующиеся карты (Self-Organizing Maps — SOM) это одна из разновидностей нейросетевых алгоритмов. Основным отличием данной технологии от рассмотренных нами ранее нейросетей, обучаемых по алгоритму обратного распространения, является то, что при обучении используется метод обучения без учителя, то есть результат обучения зависит только от структуры входных данных. Нейронные сети данного типа часто применяются для решения самых различных задач, от восстановления пропусков в данных до анализа данных и поиска закономерностей, например, в финансовых задачах.

Алгоритм функционирования SOM представляет собой один из вариантов кластеризации многомерных векторов. Примером таких алгоритмов может служить алгоритм ближайших средних (с-means). Важным отличием алгоритма SOM является то, что в нем все нейроны (узлы, центры классов) упорядочены в некоторую структуру (обычно двумерную сетку). При этом в ходе обучения модифицируется не только нейрон-победитель, но и его соседи, но в меньшей степени. За счет этого SOM можно считать одним из методов проецирования многомерного пространства в пространство с более низкой размерностью. При использовании этого алгоритма вектора, схожие в исходном пространстве, оказываются рядом и на полученной карте.

Структура SOM подразумевает использование упорядоченной структуры нейронов. Обычно используются одно- и двумерные сетки. При этом каждый

нейрон представляет собой n-мерный вектор-столбец w =[w1, w2 , , wn ]T , где п

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

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

При реализации алгоритма SOM заранее задается конфигурация сетки (прямоугольная или шестиугольная), а также количество нейронов в сети. Некоторые источники рекомендуют использовать максимально возможное количество нейронов в карте. При этом начальный радиус обучения (neighborhood в англоязычной литературе) в значительной степени влияет на способность

2

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

Перед началом обучения карты необходимо проинициализировать весовые коэффициенты нейронов. Удачно выбранный способ инициализации может существенно ускорить обучение и привести к получению более качественных результатов. Существуют три способа инициирования начальных весов:

1.инициализация случайными значениями, когда всем весам даются малые случайные величины;

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

3.линейная инициализация. В этом случае веса инициируются значениями векторов, линейно упорядоченных вдоль линейного подпространства, проходящего между двумя главными собственными векторами исходного набора данных. Собственные векторы могут быть найдены, например, при помощи процедуры Грама-Шмидта.

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

Описание выполнения работы Задание 1: используя встроенные функции пакета нейронных сетей ма-

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

Для создания нейронной сети со слоем Кохонена воспользуемся встроенной в среду MATLAB функцией newc:

Задача №1.

X=[0 1; 0 1]; clusters=5;

points=5; %3адание количества точек в кластере std_dev=0.01; p=nngenc(X,clusters,points,std_dev);

h=newc([0 1;0 1],5,.1);

3

h.trainParam.epochs=50;

h=init(h);

h=train(h,p);

w=h.IW{1}; % вывод графиков исходных данных и выявленных центров кластеров plot(p(1,:),p(2,:),'^r'),grid;

hold on; plot(w(:,1),w(:,2),'ob'); xlabel('p(1)'); ylabel('p(2)');

A=0.6

B=0.5

p=[A;B];

plot(A,B,'^k') y=sim(h,p) %Onpoc сети

В отчете зафиксируйте описание используемых в коде команд, результат работы программы, сделанный вывод на основе полученного результата.

Теперь данный алгоритм применим к реальной (хоть и элементарной) задаче кластеризации. На вход нейронной сети будем подавать данные весоростовых показателей людей и попробуем выявить три класса (кластера):

нормальный весоростовой показатель;

избыток веса;

недостаток веса.

Задача №2.

%входные данные

175

183

176

183

176

183

176

175

180

178

180

178

182

178

182

179

p=[175

 

180

182

174

172

179;

42

48

76

72

40

45

92

96

70

69

95

90

79

82

80

50

96

91]

 

 

 

70

75

100

99

 

 

 

h=newc([0 200;0 100],3,.1) h.trainParam.epochs=500; h=train(h,p)

w=h.IW{1};

plot(p(1,:),p(2,:),'^r'); hold on; plot(w(:,1),w(:,2),'ob'); xlabel('Рост'); ylabel('Вес');

A=181

B=65

p=[A;B];

plot(A,B,'+r')

y=sim(h,p)

k=find(y==1)

z=h.IW{1}(k,:);

plot(z(1),z(2),'+m');

В отчете зафиксируйте описание используемых в коде команд, результат работы программы, сделанный вывод на основе полученного результата.

Теперь рассмотрим использование самоорганизующейся карты на примере двумерных векторов. Используя самоорганизующиеся карты, двумерные векторы разбить на кластеры и выявить их центры, затем подать на вход самоорганизующейся карты новый вектор и определить кластер, к которому он относится.

Задача №3.

P=rands(2,100) %3адание случайных двухмерных входных векторов figure(1)

hold on

plot(P(1,:),P(2,:),'+r') %визуальное изображение входных векторов %По умолчанию функция TFCN = 'hextop'

4

net=newsom([0 1;0 1],[3 4]); net.trainParam.epoch=1 net=train(net,P) % настройка сети A=0.5

B=0.3

p=[A;B]; % Задание нового входного вектора

plot(A,B,'^k') %прорисовка на

рисунке входного вектора

figure(2)

 

 

plotsom(net.iw{1,1},net.layers{1}.distances)

a=sim(net,p)

%опрос сети

 

В отчете зафиксируйте описание используемых в коде команд, результат работы программы, сделанный вывод на основе полученного результата.

Задание 2: Кластеризация с использованием Neural Network Clustering Tool в ПП MATLAB. В отчете представьте снимки окон соответствующие пунктам выполнения задания.

1)Открываем окно графического интерфейса Neural Network Start:

>>nnstart

Появляется стартовое окно.

2) В окне выбираем кнопку «Clustering app» и появляется окно приглашения. Можно сразу открыть окно приглашения, минуя стартовое окно, если задать команду:

>> nctool

Можно на вкладке APPS MATLAB выбрать кнопку – «Neural Net Clustering». В окне приглашения сообщается, что можно создать слой, который может классифицировать массив векторов с любого числа измерений на столько классов, сколько нейронов имеет слой. Нейроны организованы по двумерной топологии, чтобы сформировать представление о распределении и двумерное приближение набора данных. Сеть обучается методом пакетного обучения (tainbu), а настройка весов производится функцией learnsomb.

3)В окне приглашения нажимаем Next и открываем окно выбора данных «Select Data». Кнопка «…» позволяет выбрать файлы входных и целевых (выходных) данных для обучения. С помощью радиокнопок можно выбрать являются ли образцы (Samples are) столбцами матрицы (Matrix columns) или стро-

ками матрицы (Matrix rows). Кнопка «Load Example Data Set» позволяет вы-

брать готовые демонстрационные примеры. Выбираем эту кнопку.

4)Открывается окно выбора набора данных распознавания «Pattern Recognition Data Set Chooser».

При решении задачи кластеризации доступны два набора данных:

− Simple Classes – входной массив содержит 1000 двухэлементных векторов;

− Iris Flowers – распознавание сорта цветка ириса.

В правой половине окна (Description) приводится описание каждого набора данных и источник, откуда взяты данные. Выберем задачу кластеризации трех сортов цветов ириса (это известная в математической статистике задача “Ирисы Фишера”). Цветы будут разбиваться на кластеры по следующим признакам:

− длина чашелистика в см;

5

ширина чашелистика в см;

длина лепестка в см;

ширина лепестка в см.

Выбрав Iris Flowers, нажимаем кнопку Import. Происходит возврат в окно Select Data и можно изменить выбор набора данных.

5)Не надо изменять набор, нажимаем кнопку Next и переходим в окно в окно выбора архитектуры сети Network Architecture.

По умолчанию создается карта размером 10×10 ячеек. Эти размеры можно изменить, задавая параметр Size of two-dimensional Map).

6)Оставляем параметры сети без изменения и нажимаем кнопку Next. В результате переходим к окну обучения сети Train Network.

7)В данный момент в этом окне доступна только кнопка обучения Train, нажимаем ее и переходим в окно процесса обучения сети Neural Network Training. Одновременно появляется окно обучения сети, позволяющее повторить обучение сети и вывести некоторые графики.

8)Отобразим топологию карты, нажав на кнопку SOM Topology в окне процесса обучения.

Из нее видно, что топология карты является гексагональной. Каждый из шестиугольников представляет собой нейрон. Карта имеет размеры 10×10, таким образом, карта содержит 100. Каждый входной вектор содержит четыре элемента, поэтому входное пространство четырехмерное. Карта отображает четырехмерное пространство в двумерное.

9)Выведем график соседних соединений карты – Plot self-organizing map neighbor connections, нажав кнопку SOM Neighbor connections в окне процесса обучения.

На графике нейроны показаны синими шестиугольниками. Красные линии указывают на их непосредственных соседей (нейроны в слое не связаны).

10)График расстояний до соседних весов (Унифицированная матрица расстояний – U-matrix) применяется для визуализации структуры кластеров, полученных в результате обучения карты. Элементы матрицы определяют расстояние между весами нейрона и весами его ближайших соседей. Большое значение говорит о том, что данный нейрон сильно отличается от окружающих

иотносится к другому кластеру. Для просмотра U-матрицы, необходимо нажать кнопку SOM Neighbor Weight Distances в окне обучения. На этом рисунке синие шестиугольники представляют нейроны. Красные линии показывают на соседние нейроны. Цвета в участках, содержащих красные линии, указывают расстояния между нейронами. Более темные цвета представляют большие расстояния. Полоса темных сегментов пересекает карту от нижнего региона до правого верхнего региона карты. Карта сгруппировала цветы ириса на два кластера.

11)Результаты часто представляют в виде графика весов, часто называемого компонентной плоскостью – Component Planes. Для этого необходимо нажать на кнопку SOM Input Planes в окне обучения. На графике более темные цвета представляют большие веса. Одинаковыми цветами отмечаются близкие веса. Видно, что цветы резко отличаются по первому и

6

второму входам (длина чашелистика и ширина чашелистика) и близки по третьему и четвертому входам (длина лепестка и ширина лепестка).

12)График попаданий примеров в кластеры показывает, сколько из обучающих данных связаны с каждым из нейронов (нейрон является центром кластера). Для вывода графика необходимо нажать на кнопку SOM Sample Hits

вокне обучения.

13)График положения весов показывает зелеными точками координаты входных векторов, определяемые по первым двум компонентам. Аналогично синими точками отображаются координаты векторов векторов первых двух весов нейронов. Соседние нейроны соединяются красными линиями. Обратите внимание, что близкими являются нейроны в пространстве признаков, а не расположенные в соседних ячейках.

14)Так как результаты обучения получились удовлетворительные, нажимаем кнопку Next в окне обучения сети после завершения обучения. Появляется окно оценки сети (Evaluate Network).

Левая часть окна предлагает повторить для улучшения производительности (Iterate for improved performance):

− обучение (кнопка Train Again), если первая попытка не дала удовлетворительных результатов или если требуется улучшение результатов;

− увеличить размер сети – по кнопке Adjust Network Size происходит переход к окну выбора архитектуры сети;

− использовать больший набор данных – по кнопке Import Larger Data Set происходит переход к окну выбора данных.

В правой части окна предлагается провести дополнительные испытания

(Optionally perform additonal tests), выбрав входные и целевые значения.

15)Для завершения работы с сетью нажимаем на кнопку Next и переходим в окно Deploy Solution развертывания (размещения) решения.

16)Как и при решении других задач, в этом окне можно сгенерировать функции для MATLAB Compiler, позволяющего создавать независимые приложения (.exe), компоненты и библиотеки (.dll), и для MATLAB Builder – для создания пакетов, расширяющих возможности MATLAB Compiler средствами генерации компонентов различных фреймворков, например, Microsoft .NET Framework. Возможна генерация функции для MATLAB Coder,

генерирующего автономный C и C++ код из кода MATLAB. Возможно моделирование сети в системе Simulink и генерация графической диаграммы сети как в окне архитектуры сети.

В последнем окне – окне сохранения результатов (рис.1) можно сохранить результаты, сгенерировать программу, воспроизводящую создание сети, сгенерировать диаграмму сети и диаграмму сети в пакете Simulink.

Нажав кнопку Simple Script или Advanced Script можно сгенерировать простой или усовершенствованный код MATLAB, воспроизводящий действия Neural Network Clustering Tool. Усовершенствованный код отличается более детальным заданием параметров функций. В простом коде многие параметры устанавливаются по умолчанию.

7

Рисунок 1. Окно сохранения результатов

17) Сохранить отмеченные результаты в рабочем пространстве MATLAB. Заменить имена, присеваемые по умолчанию, на имена с указанием своей фамилии. Для завершения работы с пакетом Neural Network Clustering Tool нажать кнопку Finish в окне сохранения результатов.

В отчете представьте снимки окон с кратким описанием соответствующих пунктов выполнения задания, а также сохраненный файл.

Соседние файлы в папке Жаркова