Обмен технологиями

57. Классификация на основе вероятностной нейронной сети (ПНС) (matlab)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Введение в классификацию на основе вероятностной нейронной сети (ПНС).

PNN (Probabilistic Neural Network, вероятностная нейронная сеть) — модель нейронной сети, основанная на теории вероятностей, в основном используемая для решения задач классификации. PNN была впервые предложена Маковским и Масикиным в 1993 году. Это очень эффективный алгоритм классификации.

Принцип PNN можно кратко изложить в виде следующих шагов:

  1. Уровень ввода данных: Введите входные данные выборки в модель соответственно.
  2. Слой узора:Выполните сопоставление с образцом для каждого входного данных и рассчитайте показатель сходства между ним и указанной категорией.
  3. Слой сравнения шаблонов:Сравните оценки сходства всех категорий и найдите категорию с наивысшим баллом в качестве окончательного результата классификации.

ПНН имеет следующие характеристики:

  1. Эффективность: PNN имеет более высокую скорость обучения и показывает более высокую точность классификации в практических приложениях.
  2. надежность:PNN обладает высокой устойчивостью к шуму и выбросам и может эффективно решать сложные задачи классификации.
  3. Легко объяснить:Результаты PNN можно интерпретировать интуитивно, что позволяет пользователям лучше понять основу классификации модели.

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

2. Описание классификации и ключевые функции на основе вероятностной нейронной сети (ПНС).

1) Описание

Имеется три двоичных входных вектора X и связанные с ними классы Tc.
Создайте вероятностную нейронную сеть, чтобы правильно классифицировать эти векторы.

2) Важные функции

функция newpnn():Проектирование вероятностной нейронной сети

Вероятностная нейронная сеть (PNN) — это радиальная базисная сеть, подходящая для задач классификации.

грамматика

net = newpnn(P,T,spread)% принимает два или три параметра и возвращает новую вероятностную нейронную сеть.

параметр

П:Матрица r × Q входных векторов Q

Т:Матрица s × Q из Q векторов целевых классов

распространение: Расширение распространяемых радиальных базисных функций (по умолчанию = 0,1).

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

Функция sim(): симулирует нейронную сеть

грамматика

[Y,Xf,Af] = sim(net,X,Xi,Ai,T) 
параметр

сеть: сеть

X: вход в сеть

Xi: начальное условие задержки входа (по умолчанию = 0)

Ai: условие задержки начального уровня (по умолчанию = 0)

T: цель сети (по умолчанию = 0)

3. Набор данных и отображение

код

  1. X = [1 2; 2 2; 1 1]';
  2. Tc = [1 2 3];
  3. figure(1)
  4. plot(X(1,:),X(2,:),'.','markersize',30)
  5. for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
  6. axis([0 3 0 3])
  7. title('三个二元向量及分类')
  8. xlabel('X(1,:)')
  9. ylabel('X(2,:)')

Посмотреть эффект

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Протестируйте сеть на основе входного вектора проекта.

1) Описание

Преобразование индекса целевого класса Tc в вектор T
Используйте NEWPNN для разработки вероятностной нейронной сети.
SPREAD имеет значение 1, поскольку это типичное расстояние между входными векторами.

2) Тестовая сеть

код

  1. T = ind2vec(Tc);
  2. spread = 1;
  3. net = newpnn(X,T,spread);
  4. %测试网络
  5. %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
  6. Y = net(X);
  7. Yc = vec2ind(Y);
  8. figure(2)
  9. plot(X(1,:),X(2,:),'.','markersize',30)
  10. axis([0 3 0 3])
  11. for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
  12. title('测试网络')
  13. xlabel('X(1,:)')
  14. ylabel('X(2,:)')

Посмотреть эффект

99dcaabffb554913b0d153b807c6b7e2.png

3) Новая сеть тестирования данных

код

  1. x = [2; 1.5];
  2. y = net(x);
  3. ac = vec2ind(y);
  4. hold on
  5. figure(3)
  6. plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
  7. text(x(1)+0.1,x(2),sprintf('class %g',ac))
  8. hold off
  9. title('新数据分类')
  10. xlabel('X(1,:) and x(1)')
  11. ylabel('X(2,:) and x(2)')

Посмотреть эффект

03a46217cb4840ddb1d7a4da2b249be4.png

5. Вероятностная нейронная сеть делит входное пространство на три категории.

иллюстрировать

Разделен на три категории

код

  1. x1 = 0:.05:3;
  2. x2 = x1;
  3. [X1,X2] = meshgrid(x1,x2);
  4. xx = [X1(:) X2(:)]';
  5. yy = net(xx);
  6. yy = full(yy);
  7. m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
  8. m.FaceColor = [0 0.5 1];
  9. m.LineStyle = 'none';
  10. hold on
  11. m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
  12. m.FaceColor = [0 1.0 0.5];
  13. m.LineStyle = 'none';
  14. m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
  15. m.FaceColor = [0.5 0 1];
  16. m.LineStyle = 'none';
  17. plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
  18. plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
  19. hold off
  20. view(2)
  21. title('三分类')
  22. xlabel('X(1,:) and x(1)')
  23. ylabel('X(2,:) and x(2)')

попробовать эффект

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Резюме

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

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

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

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

7. Исходный код

код

  1. %% 基于概率神经网络(PNN)的分类(matlab)
  2. %此处有三个二元输入向量 X 和它们相关联的类 Tc。
  3. %创建 y 概率神经网络,对这些向量正确分类。
  4. %重要函数:NEWPNN 和 SIM 函数
  5. %% 数据集及显示
  6. X = [1 2; 2 2; 1 1]';
  7. Tc = [1 2 3];
  8. figure(1)
  9. plot(X(1,:),X(2,:),'.','markersize',30)
  10. for i = 1:3, text(X(1,i)+0.1,X(2,i),sprintf('class %g',Tc(i))), end
  11. axis([0 3 0 3])
  12. title('三个二元向量及分类')
  13. xlabel('X(1,:)')
  14. ylabel('X(2,:)')
  15. %% 基于设计输入向量测试网络
  16. %将目标类索引 Tc 转换为向量 T
  17. %用 NEWPNN 设计 y 概率神经网络
  18. % SPREAD 值 1,因为这是输入向量之间的 y 典型距离。
  19. T = ind2vec(Tc);
  20. spread = 1;
  21. net = newpnn(X,T,spread);
  22. %测试网络
  23. %基于输入向量测试网络。通过对网络进行仿真并将其向量输出转换为索引来实现目的。
  24. Y = net(X);
  25. Yc = vec2ind(Y);
  26. figure(2)
  27. plot(X(1,:),X(2,:),'.','markersize',30)
  28. axis([0 3 0 3])
  29. for i = 1:3,text(X(1,i)+0.1,X(2,i),sprintf('class %g',Yc(i))),end
  30. title('测试网络')
  31. xlabel('X(1,:)')
  32. ylabel('X(2,:)')
  33. %数据测试
  34. x = [2; 1.5];
  35. y = net(x);
  36. ac = vec2ind(y);
  37. hold on
  38. figure(3)
  39. plot(x(1),x(2),'.','markersize',30,'color',[1 0 0])
  40. text(x(1)+0.1,x(2),sprintf('class %g',ac))
  41. hold off
  42. title('新数据分类')
  43. xlabel('X(1,:) and x(1)')
  44. ylabel('X(2,:) and x(2)')
  45. %% 概率神经网络将输入空间分为三个类。
  46. x1 = 0:.05:3;
  47. x2 = x1;
  48. [X1,X2] = meshgrid(x1,x2);
  49. xx = [X1(:) X2(:)]';
  50. yy = net(xx);
  51. yy = full(yy);
  52. m = mesh(X1,X2,reshape(yy(1,:),length(x1),length(x2)));
  53. m.FaceColor = [0 0.5 1];
  54. m.LineStyle = 'none';
  55. hold on
  56. m = mesh(X1,X2,reshape(yy(2,:),length(x1),length(x2)));
  57. m.FaceColor = [0 1.0 0.5];
  58. m.LineStyle = 'none';
  59. m = mesh(X1,X2,reshape(yy(3,:),length(x1),length(x2)));
  60. m.FaceColor = [0.5 0 1];
  61. m.LineStyle = 'none';
  62. plot3(X(1,:),X(2,:),[1 1 1]+0.1,'.','markersize',30)
  63. plot3(x(1),x(2),1.1,'.','markersize',30,'color',[1 0 0])
  64. hold off
  65. view(2)
  66. title('三分类')
  67. xlabel('X(1,:) and x(1)')
  68. ylabel('X(2,:) and x(2)')