首页 > 编程知识 正文

归一化处理matlab,matlab把横轴归一化

时间:2023-05-05 05:04:57 阅读:31461 作者:1843

让我们看看MATLAB的premnmx和postmnmx函数。 它们合二为一是相反的

3 .规范化数据培训并非卓有成效

神经网络训练时,需要考虑极值情况。 也就是说,如果考虑正规化时需要识别的参数极值,并将极值作为分母,可能会更有效。

我想问的是,在:神经网络中,只有一个函数,即名为:purelin的函数,训练的输出数据不必像logsig那样规范化

和tansig函数都必须规范化(如果数据范围不在[-1,1 ]或[ 0,1 ]之间) .那么,为什么不用purelin函数规范化,又要规范化呢?

使用神经网络的PRESTD、PREPCA、POSTMNMX,

规范化函数(如TRAMNMX )和直接使用名为purelin的函数之间有什么区别? 在我预测负荷的时候,有不用标准化的效果呢。

正规化的定义:我是这样认为的。 规范化是指在处理了你需要处理的数据后,(通过某种算法)将其限制在你需要的一定范围内。 首先,正规化是为了便于后面的数据处理,其次,保正程序执行时的收敛变快。

在matlab中,用于归一化的方法共有三种: (1) premnmx、postmnmx、tra mnmx;2 ) prestd、poststd、trastd )3)用matlab语言自行编程。 premnmx是指归一[-1

1 )、prestd从1开始归单位方差和零均值。 )3)关于自己的编程,一般归结为(0.1 ) 0.9 )。 具体使用方法请参照以下示例。

为什么要使用正规化呢? 首先,我将说明一个称为奇异样本数据的概念。 奇异样本数据是相对于其他输入样本特别大或特别小的样本向量。

以下是一个示例:

m=[0.11 0.15 0.32 0.45 30;

0.13 0.24 0.27 0.25 45];

其中第5列的数据是对其他4列数据特异的样本数据(以下称为网络平均值bp )。 由于存在异常样本数据而增加网络训练时间可能会导致网络不收敛,因此希望在训练之前以先进形式对存在针对训练样本的异常样本数据的数据集进行规范化,如果不存在异常样本数据,则预先对数据集进行规范化

具体示例:

关闭全部

清除器

echo on

clc

%BP建模

%原始数据规范化

m _ data=[ 1047.921047.830.390.39 (1.035005075;

1047.831047.680.390.401.034524912;

1047.681047.520.40.41.034044749;

1047.521047.270.410.421.033564586;

1047.271047.410.420.431.033084423;

1046.731046.741.701.80.7527332465;

1046.741046.821.801.780.7524192185;

1046.821046.731.781.750.7521051905;

1046.731046.481.751.850.7017911625;

1046.481046.031.851.820.7014771345;

1046.031045.331.821.680.7011631065;

1045.331044.951.681.710.70849785;

1044.95 1045.21.71 1.72 0.70 533 508;

1045.211045.641.721.70.70567526;

1045.641045.441.701.690.70601544;

1045.441045.781.691.690.70635562;

1045.781046.201.691.520.75667580 ];

%定义网络输入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 ' );

input weights=net.iw { 1,1 };

inputbias=net.b{1};

layer weights=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

在实际中可以根据自己的要解决的问题,自己确定,我只是提供一个参考方法。

神经网络输入的一维代表一个特征,当神经网络的输入是多维时,要识别的模式有多个特征,当这多个特征的数据相差很大,如几个数量级时,就需要归一化,变成相同数量级,以防某些数值低的特征被淹没。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。