归一化处理matlab,MATLAB 中数据归一化处理
2.看一下MATLAB里的premnmx函數和postmnmx函數.它們一個是歸一一個是反歸一
3.并不是歸一化的數據訓練效果就好
神經網絡訓練的時候,應該考慮極值情況,即歸一化的時候要考慮你所需要識別參數的極值,以極值作分母,這樣可能效果更好一點。
9.我想問大家一下:在神經網絡中,只有一個函數即:purelin這個函數對訓練的輸出數據不用歸一化,而象logsig
和tansig函數都要歸一化(如果數據范圍不在[-1,1]或[0,1]之間).那既然用purelin函數可以不用歸一化,為何又是還用歸一化呢?
用神經網絡里的PRESTD, PREPCA, POSTMNMX,
TRAMNMX等函數歸一化和直接用purelin這個函數有什么區別啊? 我作負荷預測時,象不用歸一化的效果很好呀!
歸一化化定義:我是這樣認為的,歸一化化就是要把你需要處理的數據經過處理后(通過某種算法)限制在你需要的一定范圍內。首先歸一化是為了后面數據處理的方便,其次是保正程序運行時收斂加快。
在matlab里面,用于歸一化的方法共有三中,(1)premnmx、postmnmx、tramnmx(2)prestd、poststd、trastd(3)是用matlab語言自己編程。premnmx指的是歸一到[-1
1],prestd歸一到單位方差和零均值。(3)關于自己編程一般是歸一到[0.1 0.9] 。具體用法見下面實例。
為什么要用歸一化呢?首先先說一個概念,叫做奇異樣本數據,所謂奇異樣本數據數據指的是相對于其他輸入樣本特別大或特別小的樣本矢量。
下面舉例:
m=[0.11 0.15 0.32 0.45 30;
0.13 0.24 0.27 0.25 45];
其中的第五列數據相對于其他4列數據就可以成為奇異樣本數據(下面所說的網絡均值bp)。奇異樣本數據存在所引起的網絡訓練時間增加,并可能引起網絡無法收斂,所以對于訓練樣本存在奇異樣本數據的數據集在訓練之前,最好先進形歸一化,若不存在奇異樣本數據,則不需要事先歸一化。
具體舉例:
close all
clear
echo on
clc
%BP建模
%原始數據歸一化
m_data=[1047.92 1047.83 0.39 0.39 1.0 3500 5075;
1047.83 1047.68 0.39 0.40 1.0 3452 4912;
1047.68 1047.52 0.40 0.41 1.0 3404 4749;
1047.52 1047.27 0.41 0.42 1.0 3356 4586;
1047.27 1047.41 0.42 0.43 1.0 3308 4423;
1046.73 1046.74 1.70 1.80 0.75 2733 2465;
1046.74 1046.82 1.80 1.78 0.75 2419 2185;
1046.82 1046.73 1.78 1.75 0.75 2105 1905;
1046.73 1046.48 1.75 1.85 0.70 1791 1625;
1046.48 1046.03 1.85 1.82 0.70 1477 1345;
1046.03 1045.33 1.82 1.68 0.70 1163 1065;
1045.33 1044.95 1.68 1.71 0.70 849 785;
1044.95 1045.21 1.71 1.72 0.70 533 508;
1045.21 1045.64 1.72 1.70 0.70 567 526;
1045.64 1045.44 1.70 1.69 0.70 601 544;
1045.44 1045.78 1.69 1.69 0.70 635 562;
1045.78 1046.20 1.69 1.52 0.75 667 580];
%定義網絡輸入p和期望輸出t
pause
clc
p1=m_data(:,1:5);
t1=m_data(:,6:7);
p=p1';t=t1';
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)
%設置網絡隱單元的神經元數(5~30驗證后5個最好)
n=5;
%建立相應的BP網絡
pause
clc
net=newff(minmax(pn),[n,2],{'tansig','purelin'},'traingdm');
inputWeights=net.IW{1,1};
inputbias=net.b{1};
layerWeights=net.IW{1,1};
layerbias=net.b{2};
pause
clc
% 訓練網絡
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.mc=0.9;
net.trainParam.epochs=200000;
net.trainParam.goal=1e-3;
pause
clc
%調用TRAINGDM算法訓練BP網絡
net=train(net,pn,tn);
%對BP網絡進行仿真
A=sim(net,pn);
E=A-tn;
M=sse(E)
N=mse(E)
pause
clc
p2=[1046.20 1046.05 1.52 1.538 0.75;
1046.05 1046.85 1.538 1.510 0.75;
1046.85 1046.60 1.510 1.408 0.75;
1046.60 1046.77 1.408 1.403 0.75;
1046.77 1047.18 1.403 1.319 0.75];
p2=p2';
p2n=tramnmx(p2,minp,maxp);
a2n=sim(net,p2n);
a2=postmnmx(a2n,mint,maxt)
echo off
pause
clc
程序說明:所用樣本數據(見m_data)包括輸入和輸出數據,都先進行歸一化,還有一個問題就是你要進行預測的樣本數據(見本例p2)在進行仿真前,必須要用tramnmx函數進行事先歸一化處理,然后才能用于預測,最后的仿真結果要用postmnmx進行反歸一,這時的輸出數據才是您所需要的預測結果。
個人認為:tansig、purelin、logsig是網絡結構的傳遞函數,本身和歸一化沒什么直接關系,歸一化只是一種數據預處理方法。
18.如果輸入樣本的數據組成為In=[頻率; 幅值; 相位]
我只用premnmx對In進行歸一化,訓練BP網絡,得到一個目標輸出Out,其數據組成也為Out=[頻率; 幅值;
相位]。這樣子可以嗎?總覺得把不同類型的數據放一起有點不妥。
19.完全可以,不過在輸入數據和輸出數據啊安排上可能要以時間序列的方式來安排。例如,用第1,2,3,4時刻的數據預測第5時刻的數據,用第2,3,4,5時刻的數據預測第6時刻的數據,依次類推,可以組成一定的輸入輸出對,以上只是舉個例子,只是說明這種數據組織方法,silvercx
在實際中可以根據自己的要解決的問題,自己確定,我只是提供一個參考方法。
神經網絡輸入的一維代表一個特征,當神經網絡的輸入是多維時,要識別的模式有多個特征,當這多個特征的數據相差很大,如幾個數量級時,就需要歸一化,變成相同數量級,以防某些數值低的特征被淹沒。
總結
以上是生活随笔為你收集整理的归一化处理matlab,MATLAB 中数据归一化处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业网络互联技术
- 下一篇: matlab人脸追踪,求大神帮助我这个菜