冰冰点灯,照亮我家门前~
欢迎进入nnetinfo
用户名:
密码:
深圳学习数据分析,数据挖掘,请联系yahushuxue@163.com~
nnetinfo : 本网发布神经网络相关的学习与研讨内容。
当前位置:教学区
广义回归myNewpnn(动手写自己的代码)
作者:梁小h   日期:2015-11-11 10:30:53.0

====  <文档仅供查阅和简单了解,深入了解请关注神经网络之家发布的___神经网络教学视频___>   ====

本文主要讲解如何用代码实现概率神经网络(matlab里的newpnn),概率神经网络原理请参考以下文章:

                                                  <一篇文章读懂径向基神经网络原理(上)>

                                                    <一篇文章读懂径向基神经网络原理(下)>

      使用matlab工具箱直接调用newgrnn实现径向基神经网络请参考文章:

                                                             <概率神经网络(matlab工具箱)>

      好,开始正文,

一.代码分析

      概率神经网络和广义回归神经网络非常像.但概率神经网络只用于做分类.

      建立网络时同样只需要将输入作为W1(输入层到隐层的权重),输出作为W2(隐层到输出层的权重),再用公式

B1=spread/sqrt(ln(0.5))得到隐层的阈值就可以了.

 

       应该注意的两点:

       1.概率神经网络是用来做分类的,若果输入是1 2 3这种类标,必须转为向量形式,例如类别为2时,转为[0 1 0]

          这样的向量.

     2.虽然概率神经网络通过隐节点得到径向基的值后,需要作归一化,但是由于它不会影响最后的竞争比较结果,

         所以在计算时可以不对径向基进行归一化.

 

    理论就简单介绍到这里,对神经网络原理不理解的同学请参考前面介绍的两张文章.

    详细实现请看代码:

二.代码实现

function testNewpnn()
%本代码来自www.nnetinfo.com
%本代码模仿matlab神经网络工具箱的newpnn神经网络,
%代码主旨用于教学,供大家学习理解newpnn神经网络原理

%%生成训练数据
X = [1 2 3 4 5 6 7;7 6 5 4 3 2 1 ];
Class = [1 2 3 2 2 3 1];%所属类别
Y = ind2vec(Class);
spread = 1;  %扩展系数
[W1,B1,W2] = myGrnn( X,Y,spread ); %建立网络

xx = [3 5]'; %测试数据
simY = mySim(W1,B1,W2,xx); %自编网络的输出

net=newpnn(X,Y,spread);   % 用工具箱设计概率回归网络
simYByBoxTmp =  sim(net, xx); % 工具箱的输出  
simYByBox = vec2ind(simYByBoxTmp);

testResult = isequal( simY, simYByBox);  
disp(['testResult = ',num2str(testResult)]);

web('www.nnetinfo.com')
end


function [W1,B1,W2] = myGrnn(X,Y,spread)
%生成概率神经网络只要将输入输出存到W1,W2中,
%再用spread生成影响径向基宽度的B1就可以

Q = size(X,2);
W1 = X'; %
W2 = Y;
B1 = ones( Q, 1)*sqrt( -log(.5))/spread;
end

function Y = mySim(W1,B1,W2,xx)
%求隐节点的值
hNode = length(B1);
h = zeros(hNode,1);
for i = 1 : hNode
    h(i) = B1(i)*sqrt(sum((xx'-W1(i,:)).^2));
end

%求隐节点传递后(径向基)的值
bh = exp(-(h.*h));

%乘以输出层的权重,
outV= W2 *bh;

%输出概率最大的一类
[~,Y] = max(outV);
end

结束语

       概率神经网络最需要记得的是,它只用来做分类,若果输出是标签型数据(1 2 3),一定要转为向量

型([1 0 0],[0 1 0],[0 0 1]).

==============<原创文章,转载请说明来自神经网络之家www.nnetinfo.com> ==========