Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

6.2. Сети pnn

Нейронные сети PNN(Probabilistic Neural Networks) описаны в работе [43] и предназначены для решения вероятностных задач, и в частности задач классификации.

Архитектура сети

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

Рис. 6.14

Предполагается, что задано обучающее множество, состоящее из Qпар векторов вход/цель. Каждый вектор цели имеетKэлементов, указывающих класс принадлежности, и, таким образом, каждый вектор входа ставится в соответствие одному изKклассов. В результате может быть образована матрица связностиT размераKQ, состоящая из нулей и единиц, строки которой соответствуют классам принадлежности, а столбцы – векторам входа. Таким образом, если элементT(i,j) матрицы связности равен 1, то это означает, чтоj-й входной вектор принадлежит к классуi.

Весовая матрица первого слоя IW11(net.IW{1,1}) формируется с использованием векторов входа из обучающего множества в виде матрицыP'. Когда подается новый вход, блок ||dist|| вычисляет близость нового вектора к векторам обучающего множества; затем вычисленные расстояния умножаются на смещения и подаются на вход функции активацииradbas. Вектор обучающего множества, наиболее близкий к вектору входа, будет представлен в векторе выходаa1числом, близким к 1.

Весовая матрица второго слоя LW21(net.LW{2,1}) соответствует матрице связностиT, построенной для данной обучающей последовательности. Эта операция может быть выполнена с помощью М-функцииind2vec, которая преобразует вектор целей в матрицу связностиT. ПроизведениеT*a1определяет элементы вектораa1, соответствующие каждому изKклассов. В результате конкурирующая функция активации второго слояcompetформирует на выходе значение, равное 1, для самого большого по величине элемента вектораn2и 0 в остальных случаях. Таким образом, сетьPNNвыполняет классификацию векторов входа поKклассам.

Синтез сети

Для создания нейронной сети 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 заключается в том, что работают они относительно медленно, поскольку выполняют очень большие объемы вычислений по сравнению с другими типами нейронных сетей.