моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
PNN (Probabilistic Neural Network, вероятностная нейронная сеть) — модель нейронной сети, основанная на теории вероятностей, в основном используемая для решения задач классификации. PNN была впервые предложена Маковским и Масикиным в 1993 году. Это очень эффективный алгоритм классификации.
Принцип PNN можно кратко изложить в виде следующих шагов:
ПНН имеет следующие характеристики:
В целом PNN является очень эффективным алгоритмом классификации и подходит для задач классификации в различных областях, таких как распознавание изображений, классификация текста и т. д.
Имеется три двоичных входных вектора X и связанные с ними классы Tc.
Создайте вероятностную нейронную сеть, чтобы правильно классифицировать эти векторы.
Вероятностная нейронная сеть (PNN) — это радиальная базисная сеть, подходящая для задач классификации.
net = newpnn(P,T,spread)% принимает два или три параметра и возвращает новую вероятностную нейронную сеть.
П:Матрица r × Q входных векторов Q
Т:Матрица s × Q из Q векторов целевых классов
распространение: Расширение распространяемых радиальных базисных функций (по умолчанию = 0,1).
Если диффузия близка к нулю, сеть действует как классификатор ближайших соседей. Когда масштабирование становится большим, проектируемая сеть учитывает несколько близлежащих векторов проектирования.
[Y,Xf,Af] = sim(net,X,Xi,Ai,T)
сеть: сеть
X: вход в сеть
Xi: начальное условие задержки входа (по умолчанию = 0)
Ai: условие задержки начального уровня (по умолчанию = 0)
T: цель сети (по умолчанию = 0)
- X = [1 2; 2 2; 1 1]';
- Tc = [1 2 3];
- figure(1)
- plot(X(1,:),X(2,:),'.','markersize',30)
- for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
- axis([0 3 0 3])
- title('三个二元向量及分类')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
Преобразование индекса целевого класса Tc в вектор T
Используйте NEWPNN для разработки вероятностной нейронной сети.
SPREAD имеет значение 1, поскольку это типичное расстояние между входными векторами.
- T = ind2vec(Tc);
- spread = 1;
- net = newpnn(X,T,spread);
- %测试网络
- %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
- Y = net(X);
- Yc = vec2ind(Y);
- figure(2)
- plot(X(1,:),X(2,:),'.','markersize',30)
- axis([0 3 0 3])
- for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
- title('测试网络')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
- x = [2; 1.5];
- y = net(x);
- ac = vec2ind(y);
- hold on
- figure(3)
- plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
- text(x(1)+0.1,x(2),sprintf('class %g',ac))
- hold off
- title('新数据分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
Разделен на три категории
- x1 = 0:.05:3;
- x2 = x1;
- [X1,X2] = meshgrid(x1,x2);
- xx = [X1(:) X2(:)]';
- yy = net(xx);
- yy = full(yy);
- m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
- m.FaceColor = [0 0.5 1];
- m.LineStyle = 'none';
- hold on
- m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
- m.FaceColor = [0 1.0 0.5];
- m.LineStyle = 'none';
- m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
- m.FaceColor = [0.5 0 1];
- m.LineStyle = 'none';
- plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
- plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
- hold off
- view(2)
- title('三分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
Вероятностная нейронная сеть (PNN) — это искусственная нейронная сеть, используемая для классификации шаблонов. Он основан на теореме Байеса и модели гауссовой смеси и может использоваться для обработки различных типов данных, включая непрерывные и дискретные данные. PNN более гибка, чем традиционные нейронные сети, при решении задач классификации и имеет более высокую точность и возможности обобщения.
Основной принцип работы PNN заключается в вычислении сходства между набором входных данных и каждой выборкой в наборе выборок и классификации входных данных на основе сходства. PNN состоит из четырех слоев: входного уровня, уровня шаблонов, уровня конкуренции и выходного слоя. Входные данные сначала передаются на уровень шаблонов через входной слой, затем сходство вычисляется через уровень конкуренции и, наконец, классифицируется на выходном слое в соответствии со сходством.
В Matlab вы можете использовать соответствующие наборы инструментов или самостоятельно запрограммировать реализацию классификации PNN. Сначала вам необходимо подготовить набор обучающих данных и набор тестовых данных, а затем обучить модель PNN с помощью набора обучающих данных. После завершения обучения набор тестовых данных можно использовать для оценки эффективности классификации PNN и составления прогнозов.
В целом, PNN — это мощный метод классификации, подходящий для решения различных задач классификации. В практических приложениях подходящие функции и параметры модели могут быть выбраны в соответствии с конкретными задачами для повышения эффективности классификации. Matlab предоставляет множество инструментов и поддержку функций, упрощающих реализацию и применение PNN.
- %% 基于概率神经网络(PNN)的分类(matlab)
- %此处有三个二元输入向量 X 和它们相关联的类 Tc。
- %创建 y 概率神经网络,对这些向量正确分类。
- %重要函数:NEWPNN 和 SIM 函数
- %% 数据集及显示
- X = [1 2; 2 2; 1 1]';
- Tc = [1 2 3];
- figure(1)
- plot(X(1,:),X(2,:),'.','markersize',30)
- for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
- axis([0 3 0 3])
- title('三个二元向量及分类')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
- %% 基于设计输入向量测试网络
- %将目标类索引 Tc 转换为向量 T
- %用 NEWPNN 设计 y 概率神经网络
- % SPREAD 值 1,因为这是输入向量之间的 y 典型距离。
- T = ind2vec(Tc);
- spread = 1;
- net = newpnn(X,T,spread);
- %测试网络
- %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
- Y = net(X);
- Yc = vec2ind(Y);
- figure(2)
- plot(X(1,:),X(2,:),'.','markersize',30)
- axis([0 3 0 3])
- for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
- title('测试网络')
- xlabel('X(1,:)')
- ylabel('X(2,:)')
- %数据测试
- x = [2; 1.5];
- y = net(x);
- ac = vec2ind(y);
- hold on
- figure(3)
- plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
- text(x(1)+0.1,x(2),sprintf('class %g',ac))
- hold off
- title('新数据分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
- %% 概率神经网络将输入空间分为三个类。
- x1 = 0:.05:3;
- x2 = x1;
- [X1,X2] = meshgrid(x1,x2);
- xx = [X1(:) X2(:)]';
- yy = net(xx);
- yy = full(yy);
- m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
- m.FaceColor = [0 0.5 1];
- m.LineStyle = 'none';
- hold on
- m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
- m.FaceColor = [0 1.0 0.5];
- m.LineStyle = 'none';
- m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
- m.FaceColor = [0.5 0 1];
- m.LineStyle = 'none';
- plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
- plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
- hold off
- view(2)
- title('三分类')
- xlabel('X(1,:) and x(1)')
- ylabel('X(2,:) and x(2)')
-
-
-