(急)如何用MATLAB建立ANN(人工神经网络模型)?

(急)如何用MATLAB建立ANN(人工神经网络模型)?,第1张

问题描述:

有两个自变量,一个因变量,10个样本(这里就取少一点好了)。用实际问题来表述,假设一个股票,开盘价 x1,收盘价 x2,第二天的股价 y。 那用神经网络来预测的目的是,根据10天的开盘价和收盘价,来预测未来股价。显然,这里的y与x1和x2相关,我们要训练一个网络(net)来让他尽可能的预测一个y

MATLAB程序

clc

clear

load data input output

%input就是包含了x1和x2 10天数据的矩阵,说白了就是20个数的矩阵。output是y的一个向量,%10个数

%需要自己找一些数据赋值给input和ouput

P=input

T=output

%这里P和T必须是 x1 x2和y的行向量组合。对于P,x1是行向量,x2是行向量。P=[x1x2]T=y. y是行向量

Epochs=5000

NodeNum=12 TypeNum=1

TF1='logsig' TF2='purelin'

%设置一些初始参数,Epochs是迭代上限次数,NodeNum是第一个隐藏层的神经元个数,%TypeNum是几层。TF1和TF2分别定义了几个传递函数

net=newff(minmax(P),[NodeNum TypeNum],{TF1 TF2},'trainlm')

%建立一个神经网络,训练输入和输出数据都有了,设置隐藏层的个数。

net.trainParam.epochs=Epochs

net.trainParam.goal=1e-4

net.trainParam.min_grad=1e-4

net.trainParam.show=200

net.trainParam.time=inf

%设置一些训练时的参数,第一个是每次训练的最大迭代次数;

net=train(net,P,T)

%开始网络训练

P_test=P

B_test=T

%就用原始的数据进行测试

X=sim(net,P_test)

%测试

Erro=abs(B_test-X)

sigma=std(Erro)

%计算出预测值和实际值的误差,求出方差。将来方差可以用来随机调整

matlab常用的函数种类:

Anonymous Functions -- 匿名函数

Primary Functions -- 主函数

Nested Functions -- 嵌套函数

Subfunctions -- 子函数

Private Functions -- 私有函数

Anonymous Functions -- 匿名函数

提供了一种快速定义简单函数的方法,可以在matlab命令框、任何函数、脚本中定义。定义方式如下

fhandle = @(arglist) expr

sqr = @(x) x.^2

这种函数比较简单,不多说了,有意思的一种用法是可以在函数定义中使用变量,如下

a = 1.3b = .2c = 30parabola = @(x) a*x.^2 + b*x + cfplot(parabola, [-25 25])

a = -3.9b = 52c = 0fplot(parabola, [-25 25])

以后可以尝试用用。

Primary Functions -- 主函数

Subfunctions -- 子函数

就是在一个文件中第一个被定义的函数,其它的都称为子函数。

主函数名一般和文件名一致,调用文件名即是调用主函数,而其它子函数不对外可见,只能在文件内部被主函数和其它子函数调用。

Nested Functions -- 嵌套函数

就是在其他函数内部定义的函数,注意它不能在程序控制语句中定义,即不能在if判断语句、while循环语句中定义。

这种函数有点讲究,但感觉用的不多,要定义直接定义子函数了。不过有三个地方使用感觉挺方便。

一种是如果懒得传递参数给子函数,可以写成嵌套函数,因为在嵌套函数中是可见其上一层函数定义的变量,感觉如果偏向于尽快完成任务的话,可以用用,不过这不利于代码的封装和可读性。

另一种是在figure的鼠标响应中,如在buttondown函数中定义buttonup嵌套函数,因为buttonup一般是发生在buttondown之后的,嵌套定义就是发生了buttondown事件才开启buttonup事件,这样用确实感觉思路上很顺。可参考博客http://blog.sina.com.cn/s/blog_6163bdeb0100n8r7.html

还有一个用法,也是嵌套定义的好处,就是修改了嵌套函数的代码,不用重新运行主程序,原来的程序会自动使用修改过的程序。比如还是figure鼠标响应,将鼠标按下、抬起响应函数写成嵌套函数,运行后,鼠标按下、抬起会运行相应的响应函数,如果修改了按下、抬起的响应函数代码,鼠标 *** 作马上按新修改的代码执行,蛮方便。

Private Functions -- 私有函数

function [K] = dealtype(A)

% K 设为 n 行 2 列的二维数组

% n 对应 A 的第 3 维

% K 的第 1 列存分类序号

% K 的第 2 列存分类特征值

K = []

[m,n,p] = size(A)

if p == 1, return end

tyid = 1      % 分类序号

for n = 1:p

    a = A(:,:,n)

    a = my_f(a)

    v = similarity(K,a)

    if v = -1

        K(n,1) = tyid

        K(n,2) = a

        tyid = tyid+1

    else

        K(n,:) = K(v,:)

    end

end

function a = my_f(a) % 取得特征值

a = '...'

function [v] = similarity(K,a) % 相似度比较

% 如果同已有特征值相似返回在 K 中的索引

% 如果是独特特征值返回-1

v = -1

[m,n] = size(K)

if isempty(K), return end

id = 1

while v == -1 & id <= m

    ak = K(k,2)

    xs = abs(a-ak)/(a+ak) < 0.2   % 相似度自己确定

    if xs, v = id end

    id = id+1

end


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12057421.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存