Compartir tecnología

57. Clasificación basada en red neuronal probabilística (PNN) (matlab)

2024-07-12

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

1. Introducción a la clasificación basada en redes neuronales probabilísticas (PNN)

PNN (Probabilistic Neural Network, red neuronal probabilística) es un modelo de red neuronal basado en la teoría de la probabilidad, que se utiliza principalmente para resolver problemas de clasificación. PNN fue propuesto por primera vez por Makovsky y Masikin en 1993. Es un algoritmo de clasificación muy eficaz.

El principio de PNN se puede resumir brevemente en los siguientes pasos:

  1. Capa de entrada de datos: Ingrese los datos de muestra de entrada en el modelo respectivamente.
  2. Capa de patrón:Realice una comparación de patrones en cada dato de entrada y calcule la puntuación de similitud entre este y la categoría especificada.
  3. Capa de comparación de patrones:Compare las puntuaciones de similitud de todas las categorías y encuentre la categoría con la puntuación más alta como resultado de la clasificación final.

PNN tiene las siguientes características:

  1. Eficiencia: PNN tiene una velocidad de entrenamiento más rápida y muestra una mayor precisión de clasificación en aplicaciones prácticas.
  2. robustez:PNN tiene una gran robustez ante el ruido y los valores atípicos y puede manejar eficazmente problemas de clasificación complejos.
  3. Fácil de explicar:Los resultados de PNN se pueden interpretar de forma intuitiva, lo que permite a los usuarios comprender mejor la base de clasificación del modelo.

En general, PNN es un algoritmo de clasificación muy eficaz y es adecuado para problemas de clasificación en diversos campos, como reconocimiento de imágenes, clasificación de texto, etc.

2. Descripción de clasificación y funciones clave basadas en redes neuronales probabilísticas (PNN)

1. Descripción

Hay tres vectores de entrada binarios X y sus clases asociadas Tc.
Cree una red neuronal probabilística para clasificar correctamente estos vectores.

2) Funciones importantes

función nuevapnn():Diseño de una red neuronal probabilística

La red neuronal probabilística (PNN) es una red de base radial adecuada para problemas de clasificación.

gramática

net = newpnn(P,T,spread)% acepta dos o tres parámetros y devuelve una nueva red neuronal probabilística.

parámetro

PAG:Matriz r × Q de vectores de entrada Q

T:Matriz s × Q de vectores de clase objetivo Q

desparramar: Extensión de funciones de base radial propagadas (predeterminado = 0,1)

Si la difusión es cercana a cero, la red actúa como clasificador vecino más cercano. Cuando la escala se vuelve grande, la red diseñada considera varios vectores de diseño cercanos.

Función sim(): simular red neuronal

gramática

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

red: red

X: entrada a la red

Xi: condición de retardo de entrada inicial (predeterminado = 0)

Ai: condición de retardo de capa inicial (predeterminado = 0)

T: objetivo de red (predeterminado = 0)

3. Conjunto de datos y visualización

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 efecto

4d5fefa895b64a729f35c0ae3f875dfa.png

4. Pruebe la red según el vector de entrada de diseño.

1. Descripción

Convertir el índice de clase objetivo Tc en vector T
Utilice NEWPNN para diseñar una red neuronal probabilística
SPREAD tiene un valor de 1 porque esta es la distancia típica entre vectores de entrada.

2) Red de prueba

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 efecto

99dcaabffb554913b0d153b807c6b7e2.png

3) Nueva red de prueba de datos

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 efecto

03a46217cb4840ddb1d7a4da2b249be4.png

5. La red neuronal probabilística divide el espacio de entrada en tres categorías.

ilustrar

Dividido en tres categorías.

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

prueba el efecto

Imagen: d9f88e5a4a194cdab4a7d4c903d77645.png

6. Resumen

La red neuronal probabilística (PNN) es una red neuronal artificial que se utiliza para la clasificación de patrones. Se basa en el teorema de Bayes y el modelo de mezcla gaussiano y se puede utilizar para procesar varios tipos de datos, incluidos datos continuos y datos discretos. PNN es más flexible que las redes neuronales tradicionales cuando se trata de problemas de clasificación y tiene mayor precisión y capacidades de generalización.

El principio de funcionamiento básico de PNN es calcular la similitud entre el conjunto de datos de entrada y cada muestra en el conjunto de muestras, y clasificar los datos de entrada en función de la similitud. PNN consta de cuatro capas: capa de entrada, capa de patrón, capa de competencia y capa de salida. Los datos de entrada se pasan primero a la capa de patrón a través de la capa de entrada, luego se calcula la similitud a través de la capa de competencia y finalmente se clasifican en la capa de salida de acuerdo con la similitud.

En Matlab, puede utilizar cajas de herramientas relevantes o programarse usted mismo para implementar la clasificación PNN. Primero, debe preparar un conjunto de datos de entrenamiento y un conjunto de datos de prueba, y luego entrenar el modelo PNN a través del conjunto de datos de entrenamiento. Una vez completado el entrenamiento, el conjunto de datos de prueba se puede utilizar para evaluar el rendimiento de clasificación del PNN y hacer predicciones.

En general, PNN es un método de clasificación potente adecuado para diversos problemas de clasificación. En aplicaciones prácticas, se pueden seleccionar características y parámetros de modelo apropiados de acuerdo con problemas específicos para mejorar el rendimiento de la clasificación. Matlab proporciona una gran cantidad de herramientas y soporte funcional, lo que facilita la implementación y aplicación de PNN.

7. Código fuente

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