내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
PNN(Probabilistic Neural Network, 확률적 신경망)은 확률 이론을 기반으로 한 신경망 모델로 주로 분류 문제를 해결하는 데 사용됩니다. PNN은 1993년 Makovsky와 Masikin에 의해 처음 제안되었습니다. 이는 매우 효과적인 분류 알고리즘입니다.
PNN의 원리는 다음 단계로 간략하게 요약할 수 있습니다.
PNN은 다음과 같은 특징을 가지고 있습니다.
일반적으로 PNN은 매우 효과적인 분류 알고리즘으로 이미지 인식, 텍스트 분류 등 다양한 분야의 분류 문제에 적합합니다.
세 개의 이진 입력 벡터 X와 관련 클래스 Tc가 있습니다.
이러한 벡터를 올바르게 분류하기 위해 확률적 신경망을 만듭니다.
PNN(Probabilistic Neural Network)은 분류 문제에 적합한 방사형 기반 네트워크입니다.
net = newpnn(P,T,spread)%는 2개 또는 3개의 매개변수를 받고 새로운 확률 신경망을 반환합니다.
피:Q개의 입력 벡터로 구성된 r × Q 행렬
티:Q개의 대상 클래스 벡터로 구성된 s × Q 행렬
확산: 전파된 방사형 기저 함수의 확장(기본값 = 0.1)
확산이 0에 가까우면 네트워크는 최근접 이웃 분류기 역할을 합니다. 규모가 커지면 설계된 네트워크는 인근에 있는 여러 설계 벡터를 고려합니다.
[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)')
3가지 카테고리로 구분
- 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(Probabilistic Neural Network)은 패턴 분류에 사용되는 인공 신경망입니다. 베이즈 정리와 가우스 혼합 모델을 기반으로 하며 연속 데이터, 이산 데이터 등 다양한 유형의 데이터를 처리하는 데 사용할 수 있습니다. PNN은 분류 문제를 처리할 때 기존 신경망보다 더 유연하며 정확도와 일반화 기능이 더 높습니다.
PNN의 기본 작동 원리는 입력 데이터 세트와 샘플 세트의 각 샘플 간의 유사성을 계산하고 유사성을 기준으로 입력 데이터를 분류하는 것입니다. PNN은 입력 레이어, 패턴 레이어, 경쟁 레이어, 출력 레이어의 4개 레이어로 구성됩니다. 입력 데이터는 먼저 입력 레이어를 거쳐 패턴 레이어로 전달된 후 경쟁 레이어를 통해 유사도를 계산하고 최종적으로 유사도에 따라 출력 레이어로 분류됩니다.
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)')
-
-
-