Цель работы: освоить основные принципы решения задачи кластеризации с использованием нейронных сетей со слоем Коханена и самоорганизующихся карт.
Задание:используя встроенные функции пакета нейронных сетей математической среды MATLAB решить выбранную задачу кластеризации, а также рассмотреть использование самоорганизующихся карт.
Понятие кластеризации. Задача кластеризации (категоризации, классификации "без учителя") – задача размещения входных векторов (образов) по категориям (кластерам), так чтобы близкие векторы (схожие образы) оказались в одной категории. Отличие задачи кластеризации от похожей на нее задачи классификации заключается в том, что набор категорий изначально не задан и определяется в процессе обучения нейронной сети. Примером задачи кластеризации служит задача сжатия информации путем уменьшения разнообразия данных.
Кластеризация может быть использована для решения следующих задач:
· обработка изображение;
· классификация;
· тематический анализ коллекций документов;
· построение репрезентативной выборки.
Методы кластеризации при помощи нейронных сетей являются развитием классических методов кластеризации. Например, метод кластеризации векторов с помощью сети Кохонена содержит в своей основе метод K средних. В то же время нейронные сети являются гораздо более гибким инструментом в применении к данным, имеющим большой объем и избыточную размерность.
Пример выполнения:
Задача.Используя встроенные функции пакета нейронных сетей математической среды MATLAB построить нейронную сеть со слоем Коханена, которая множество входных данных разделит на кластеры и выявит их центры. На обученную сеть подать новый входной вектор и определить к какому кластеру он относится.
Для создания нейронной сети со слоем Коханена воспользуемся встроенной в среду MATLAB функцией newc:
X=[0 1;0 1];% Задание диапазона изменения элементов
clusters=5;% Задание количество кластеров
points=5;%Задание количество точек в кластере
std_dev=0.01;
P=nngenc(X,clusters,points,std_dev);%Моделирование входных данных
h=newc([0 1; 0 1],5,.1)% создание слоя Коханена
h.trainParam.epochs=50;%Задание количества циклов обучения
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)%Опрос сети
Результат работы программы представлен на рис.6.16. Кроме того, его можно увидеть в командном окне:
y = (4,1) 1
Предъявленный вектор отнесен к четвертому кластеру.
Рис. 6.16. Выявленные центры кластеров
Рассмотрим применение нейронной сети со слоем Кохонена для кластеризации массива данных из файла clusterdemo.dat, уже использованный нами в п. 5.4. Данный массив имеет размерность 600х3. Используем из данного файла матрицу, состоящую из первых двух столбцов и всех строк. Определим для данного множества 9 кластеров, после чего подадим новый вектор и определим номер кластера, к которому он отнесен: