反归一化java代码 数据归一化代码

之前您在回答有网友提问的那个BP神经网络代码里,为什么没有归一化处理呢?

用mapminmax函数。几个要说明的函数接口:

成都创新互联是一家集网站建设,立山企业网站建设,立山品牌网站建设,网站定制,立山网站建设报价,网络营销,网络优化,立山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

[Y,PS] = mapminmax(X)

[Y,PS] = mapminmax(X,FP)

Y = mapminmax('apply',X,PS)

X = mapminmax('reverse',Y,PS)

在最新版的matlab里面共有两个归一化函数:mapminmax()和mapstd(),其中第一个函数是归一化到[0 1]范围,后一个的原理为统计归一化。

各自的归一化格式如下:

[pn,ps]=mapminmax(P)或=mapstd(P) %P是输入向量

[tn, ts]=mapminmax(t)或=mapstd(t) %t 是目标向量

在训练完后,对测试样本归一化格式为:

pnt=mapminmax('apply',pt,ps)或=mapstd('apply',pt,ps)

仿真后反归一化格式则为:

out=mapminmax('reverse',An,ts)或=mapstd('reverse',An,ts);其中An为sim函数的输出

MATLAB中如何将这些数反归一化,求代码

反归一化需要知道原矩阵的两个参数。设原矩阵为a,归一化的过程后得到b:

amin=min(a(:));

amax=max(a(:));

b=(a-amin)/(amax-amin);

则反归一化需要知道amax和amin是多少,用一个语句可求:

a=b*(amax-amin)+amin

hits算法:在网上找了几个关于hits的java实现算法,算法的输入都是一个方阵,请问不是方阵的如何实现

k相当于你用来记录每次运算的进度的,k不断的增长的过程,就是假设你用手算一个一个运算的过程。你写两个矩阵A是3*3的,B是3*3的,两个矩阵相乘,你看看是不是你手算的过程和这个程序的步骤是一致的。如果不是方阵假设A是2*3.B是3*2那么k还是原来的东西。只不过,2用i来循环,3用j来循环,for (int i = 0; i len; i++)中的len=2. for (int j = 0; j len; j++)中的len=3而已了。k=2因为C=A*B是2*2的。不明白你再问O(∩_∩)O

BP神经网络预测代码

你这是在做时间序列呢。

你可以去《神经网络之家》nnetinfo----》学习教程二---神经网络在时间序列上的应用

上面有讲解。我把代码摘抄给你

% time series:神经网络在时间序列上的应用

% 本代码出自《神经网络之家》

timeList = 0 :0.01 : 2*pi; %生成时间点

X = sin(timeList); %生成时间序列信号

%利用x(t-5),x(t-4),x(t-3),x(t-2),x(t-1)作为输入预测x(t),将x(t)作为输出数据

inputData = [X(1:end-5);X(2:end-4);X(3:end-3);X(4:end-2);X(5:end-1)];

outputData = X(6:end);

%使用用输入输出数据(inputData、outputData)建立网络,

%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。

net = newff(inputData,outputData,3,{'tansig','purelin'},'trainlm');

%设置一些常用参数

net.trainparam.goal = 0.0001; %训练目标:均方误差低于0.0001

net.trainparam.show = 400; %每训练400次展示一次结果

net.trainparam.epochs = 1500; %最大训练次数:15000.

[net,tr] = train(net,inputData,outputData);%调用matlab神经网络工具箱自带的train函数训练网络

simout = sim(net,inputData); %调用matlab神经网络工具箱自带的sim函数得到网络的预测值

figure; %新建画图窗口窗口

t=1:length(simout);

plot(t,outputData,t,simout,'r')%画图,对比原来的输出和网络预测的输出

%------------------附加:抽取数学表达式----------------------------top

%希望脱离matlab的sim函数来使用训练好网络的话,可以抽取出数学的表达式,|

%这样在任何软件中,只需要按表达式计算即可。 |

%============抽取数学表达式==================

%抽取出网络的权值和阈值

w12 = net.iw{1,1}; %第1层(输入层)到第2层(隐层)的权值

b2 = net.b{1}; %第2层(隐层)的阈值

w23 = net.lw{2,1}; %第2层(隐层)到第3层(输出层)的权值

b3 = net.b{2}; %第3层(输出层)的阈值

%由于有归一化,必须先将归一化信息抓取出来

iMax = max(inputData,[],2);

iMin = min(inputData,[],2);

oMax = max(outputData,[],2);

oMin = min(outputData,[],2);

%方法1:归一化---计算输出---反归一化

normInputData=2*(inputData -repmat(iMin,1,size(inputData,2)))./repmat(iMax-iMin,1,size(inputData,2)) -1;

tmp = w23*tansig( w12 *normInputData + repmat(b2,1,size(normInputData,2))) + repmat(b3,1,size(normInputData,2));

myY = (tmp+1).*repmat(oMax-oMin,1,size(outputData,2))./2 + repmat(oMin,1,size(outputData,2));

%方法2:用真正的权值和阈值进行计算

%公式请参考《提取对应原始数据的权重和阈值》

W12 = w12 * 2 ./repmat(iMax' -iMin',size(w12,1),1);

B2 = -w12* (2*iMin ./(iMax - iMin) + 1) + b2;

W23 = w23 .*repmat((oMax -oMin),1,size(w23,2))/2;

B3 = (oMax -oMin) .*b3 /2 + (oMax -oMin)/2 + oMin;

%最终的数学表达式:

myY2 = W23 *tansig( W12 *inputData + repmat(B2,1,size(inputData,2))) + repmat(B3,1,size(inputData,2));

JAVA实现归一化问题

最后一个数不用除法,改用减法,从总量中减去已知的数字

0.337

0.330

0.334

变成

0.337

0.330

0.333

BP神经网络预测的输出怎么逆归一化?

例如你的输入格式是b=(a-amin)/(amax-amin);则反归一化需要知道amax和amin是多少,用一个语句可求:a=b*(amax-amin)+amin。其中amax和amin都是归一化之前的最大或最小值。


网页名称:反归一化java代码 数据归一化代码
本文路径:http://pwwzsj.com/article/docecjc.html