神经网络

神经网络可用于预测数据,通过已知的输入/输出【输出为要预测的数据类型】,分别把输入/输出转换为矩阵P,T
运用BP 三层通用模型,适当选择激励函数和隐层神经元的激励函数。遇到数据的值,范围相差太大,比如两个数量级以上,那就要归一化。
例如:
BP 神经网络通常采用 Sigmoid 可微函数和线性函数作为网络的激励函数。
本实例选择 S 型正切函数 tansig 作为隐层神经元的激励函数。而由于网络的输出
归一到[ -1, 1]范围内, 因此预测模型选取 S 型对数函数 logsig 作为输出层神经元
的激励函数。
程序示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
P=[3.2 3.2 3 3.2 3.2 3.4 3.2 3 3.2 3.2 3.2 3.9 3.1 3.2;
9.6 10.3 9 10.3 10.1 10 9.6 9 9.6 9.2 9.5 9 9.5 9.7;
3.45 3.75 3.5 3.65 3.5 3.4 3.55 3.5 3.55 3.5 3.4 3.1 3.6 3.45;
2.15 2.2 2.2 2.2 2 2.15 2.14 2.1 2.1 2.1 2.15 2 2.1 2.15;
140 120 140 150 80 130 130 100 130 140 115 80 90 130;
2.8 3.4 3.5 2.8 1.5 3.2 3.5 1.8 3.5 2.5 2.8 2.2 2.7 4.6;
11 10.9 11.4 10.8 11.3 11.5 11.8 11.3 11.8 11 11.9 13 11.1 10.85;
50 70 50 80 50 60 65 40 65 50 50 50 70 70]; %输入矩阵
T=[2.24 2.33 2.24 2.32 2.2 2.27 2.2 2.26 2.2 2.24 2.24 2.2 2.2 2.35]; %输出矩阵
[p1,minp,maxp,t1,mint,maxt ]=premnmx(P,T); %对P,T进行归一化生成新的矩阵p1,t1
net1=newff(p1,t1,8,{'tansig','tansig','purlin'},'trainlm'); %设置神经网络,命名为net1,8为输入神经元数量,新版本好像不能定义隐层数量了
net1.trainParam.epochs=5000; %最大训练次数
net1.trainParam.goal=0.0000001; %目标误差
net1.trainParam.lr=0.01; %学习速率 lr 为 0. 01
[net1,tr]=train(net1,p1,t1); %对归一化后的值进行训练
a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50]; %要预测数据的相关数据
[a,PS] = mapminmax(a); %归一化
b=sim(net1,a); %放入训练好的神经网络
c=postmnmx(b,mint,maxt); %反归一化并输出结果为c
Z= sim (net,a); %将a放入训练好的模糊工具箱对应的神经网络net得到可信值Z

注意

旧版本归一化函数为
[p1,minp,maxp,t1,mint,maxt ]=premnmx(P,T);
新版本为
[Y,PS] = mapminmax(X)
用旧版的也行如果用新版最后一句c=postmnmx(b,mint,maxt); 会报错。
不使用模糊工具箱可去掉最后一句。
Y是归一化得到的数据,PS是一种描述数据的结构。它们的计算方式是y = (ymax-ymin)*(x-xmin)/(xmax-xmin) + ymin;
默认归一化到-1到1,也可以自己设置,如:若想将规范范围划为(0,1),可编写Y=mapminmax(A,0,1);
net1.trainParam.epochs设置的数值为最大训练次数,若达到目标误差net1.trainParam.goal则会停止训练。
归一化默认是对行归一,如果每行元素只有一个的话,那就是他本身了,比如这里的a数据a=[3.0;9.3;3.3;2.05;100;2.8;11.2;50]; 用;隔开就是一个列矩阵,若用隔开就是行矩阵,这里用列矩阵是因为每行代表的元素含义不同。

图片示例

数值.png
神经网络现象.png

方法二:使用模糊工具箱也是可以的

见大鸟云人工智能目录下

没技术含量不过是用软件罢了