Compartilhamento de tecnologia

57. Classificação baseada em rede neural probabilística (PNN) (matlab)

2024-07-12

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

1. Introdução à classificação baseada em redes neurais probabilísticas (PNN)

PNN (Rede Neural Probabilística, rede neural probabilística) é um modelo de rede neural baseado na teoria da probabilidade, usado principalmente para resolver problemas de classificação. O PNN foi proposto pela primeira vez por Makovsky e Masikin em 1993. É um algoritmo de classificação muito eficaz.

O princípio do PNN pode ser resumido brevemente nas seguintes etapas:

  1. Camada de entrada de dados: insira os dados de amostra de entrada no modelo, respectivamente.
  2. Camada padrão:Execute a correspondência de padrões em cada dado de entrada e calcule a pontuação de similaridade entre ele e a categoria especificada.
  3. Camada de comparação de padrões:Compare as pontuações de similaridade de todas as categorias e encontre a categoria com maior pontuação como resultado da classificação final.

O PNN possui as seguintes características:

  1. Eficiência: PNN tem velocidade de treinamento mais rápida e apresenta maior precisão de classificação em aplicações práticas.
  2. robustez:PNN tem forte robustez a ruídos e valores discrepantes e pode lidar com problemas de classificação complexos com eficácia.
  3. Fácil de explicar:Os resultados do PNN podem ser interpretados de forma intuitiva, permitindo aos usuários compreender melhor a base de classificação do modelo.

Em geral, o PNN é um algoritmo de classificação muito eficaz e adequado para problemas de classificação em vários campos, como reconhecimento de imagens, classificação de textos, etc.

2. Descrição da classificação e funções principais baseadas em rede neural probabilística (PNN)

1) Descrição

Existem três vetores de entrada binários X e suas classes associadas Tc.
Crie uma rede neural probabilística para classificar corretamente esses vetores.

2) Funções importantes

Função newpnn():Projetando uma rede neural probabilística

Rede Neural Probabilística (PNN) é uma rede de base radial adequada para problemas de classificação.

gramática

net = newpnn(P,T,spread)% aceita dois ou três parâmetros e retorna uma nova rede neural probabilística.

parâmetro

P:Matriz r × Q de vetores de entrada Q

T:Matriz s × Q de vetores de classe alvo Q

espalhar: Extensão de funções de base radial propagadas (padrão = 0,1)

Se a difusão for próxima de zero, a rede atua como um classificador vizinho mais próximo. Quando o dimensionamento se torna grande, a rede projetada considera vários vetores de projeto próximos.

função sim(): simular rede neural

gramática

[Y,Xf,Af] = sim(net,X,Xi,Ai,T) 
parâmetro

rede: rede

X: entrada para a rede

Xi: condição inicial de atraso de entrada (padrão = 0)

Ai: condição de atraso da camada inicial (padrão = 0)

T: destino de rede (padrão = 0)

3. Conjunto de dados e exibição

código

  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,:)')

Ver efeito

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Teste a rede com base no vetor de entrada do projeto

1) Descrição

Converter o índice da classe alvo Tc em vetor T
Use NEWPNN para projetar uma rede neural probabilística
SPREAD tem o valor 1 porque esta é a distância típica entre os vetores de entrada.

2) Rede de teste

código

  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,:)')

Ver efeito

99dcaabffb554913b0d153b807c6b7e2.png

3) Nova rede de teste de dados

código

  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)')

Ver efeito

03a46217cb4840ddb1d7a4da2b249be4.png

5. A rede neural probabilística divide o espaço de entrada em três categorias.

ilustrar

Dividido em três categorias

código

  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)')

experimente o efeito

d9f88e5a4a194cdab4a7d4c903d77645.png

6. Resumo

A rede neural probabilística (PNN) é uma rede neural artificial usada para classificação de padrões. É baseado no teorema de Bayes e no modelo de mistura gaussiana e pode ser usado para processar vários tipos de dados, incluindo dados contínuos e dados discretos. A PNN é mais flexível do que as redes neurais tradicionais ao lidar com problemas de classificação e possui maior precisão e capacidade de generalização.

O princípio básico de funcionamento do PNN é calcular a similaridade entre o conjunto de dados de entrada e cada amostra do conjunto de amostras e classificar os dados de entrada com base na similaridade. PNN consiste em quatro camadas: camada de entrada, camada padrão, camada de competição e camada de saída. Os dados de entrada são primeiro passados ​​​​para a camada padrão através da camada de entrada, depois a similaridade é calculada através da camada de competição e, finalmente, classificadas na camada de saída de acordo com a similaridade.

No Matlab, você pode usar caixas de ferramentas relevantes ou programar-se para implementar a classificação PNN. Primeiro, você precisa preparar um conjunto de dados de treinamento e um conjunto de dados de teste e, em seguida, treinar o modelo PNN por meio do conjunto de dados de treinamento. Após a conclusão do treinamento, o conjunto de dados de teste pode ser usado para avaliar o desempenho de classificação do PNN e fazer previsões.

No geral, o PNN é um método de classificação poderoso, adequado para vários problemas de classificação. Em aplicações práticas, recursos e parâmetros de modelo apropriados podem ser selecionados de acordo com problemas específicos para melhorar o desempenho da classificação. O Matlab fornece diversas ferramentas e suporte a funções, facilitando a implementação e aplicação do PNN.

7. Código fonte

código

  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)')