Синтез сети

Для создания нейронной сети PNN предназначена М-функция newpnn. Определим
7 следующих векторов входа и соотнесем каждый из них с одним из трех классов:

P = [0 0;1 1;0 3;1 4;3 1;4 1;4 3]';

Tc = [1 1 2 2 3 3 3];

Вектор Тс назовем вектором индексов классов. Этому индексному вектору можно
поставить в соответствие матрицу связности T в виде разреженной матрицы вида

T = ind2vec(Tc)

T =

(1,1) 1

(1,2) 1

(2,3) 1

(2,4) 1

(3,5) 1

(3,6) 1

(3,7) 1

которая определяет принадлежность первых двух векторов к классу 1, двух последующих – к классу 2 и трех последних – к классу 3. Полная матрица Т имеет вид:

Т = full(T)

Т =

1 1 0 0 0 0 0

0 0 1 1 0 0 0

0 0 0 0 1 1 1

Массивы Р и Т задают обучающее множество, что позволяет выполнить формирование сети, промоделировать ее, используя массив входов P, и удостовериться, что сеть правильно решает задачу классификации на элементах обучающего множества. В результате моделирования сети формируется матрица связности, соответствующая массиву
векторов входа. Для того чтобы преобразовать ее в индексный вектор, предназначена
М-функция vec2ind:

net = newpnn(P,T);

net.layers{1}.size % Число нейронов в сети PNN

ans = 7

Y = sim(net,P);

Yc = vec2ind(Y)

Yc = 1 1 2 2 3 3 3

Результат подтверждает правильность решения задачи классификации.

Выполним классификацию некоторого набора произвольных векторов р, не принадлежащих обучающему множеству, используя ранее созданную сеть PNN:

p = [1 3; 0 1; 5 2]';

Выполняя моделирование сети для этого набора векторов, получаем

a = sim(net,p);

ac = vec2ind(a)

ac = 2 1 3

Фрагмент демонстрационной программы demopnn1 позволяет проиллюстрировать
результаты классификации в графическом виде:

clf reset, drawnow

p1 = 0:.05:5;

p2 = p1;

[P1,P2]=meshgrid(p1,p2);

pp = [P1(:) P2(:)];

aa = sim(net,pp');

aa = full(aa);

m = mesh(P1,P2,reshape(aa(1,:),length(p1),length(p2)));

set(m,'facecolor',[0.75 0.75 0.75],'linestyle','none');

hold on

view(3)

m = mesh(P1,P2,reshape(aa(2,:),length(p1),length(p2)));

set(m,'facecolor',[0 1 0.5],'linestyle','none');,

m = mesh(P1,P2,reshape(aa(3,:),length(p1),length(p2)));

set(m,'facecolor',[0 1 1],'linestyle','none');

plot3(P(1,:),P(2,:),ones(size(P,2))+0.1,'.','markersize',30)

plot3(p(1,:),p(2,:),1.1*ones(size(p,2)),'*','markersize',20,... 'color',[1 0 0])

hold off

view(2)

Результаты классификации представлены на рис. 6.15 и показывают, что 3 представленных сети вектора, отмеченные звездочками, классифицируются сетью PNN, состоящей из семи нейронов, абсолютно правильно.

Рис. 6.15

В заключение отметим, что сети PNN могут весьма эффективно применяться для решения задач классификации. Если задано достаточно большое обучающее множество, то решения, генерируемые сетями, сходятся к решениям, соответствующим правилу Байеса. Недостаток сетей GRNN и PNN заключается в том, что работают они относительно медленно, поскольку выполняют очень большие объемы вычислений по сравнению с другими типами нейронных сетей.


7. Сети кластеризации
и классификации данных

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: