神经网络(ANN)

算法介绍

概念

人工神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经神经系统对真实世界物体所作出的交互反应。在实际应用中,80%-90%的人工神经网络模型是采用误差反转算法或其变形形式的网络模型。
一个神经网络的典型结构:
在这里插入图片描述

作用

1.拟合 ->预测。
2.分离 -> 聚类分析。

神经网络模型和网络结构

1.神经元
大脑可视作为1000多亿神经元组成的神经网络。
在这里插入图片描述
下面为神经元的工作过程:

2.神经元信息传递
神经元的信息传递和处理是一种电化学活动,树突由于电化学作用接受外界的刺激;通过胞体内的活动体现为轴突电位,当轴突电位达到一定的值则形成神经脉冲或动作电位;再通过轴突末梢传递给其他的神经元。从控制论的观点来看,这一过程可以看作一个多输入单输出非线性系统的过程。

3.人工神经元的模型
在这里插入图片描述
x1-xn是从其他神经元传来的输入信号
wij表示从神经元j到神经元i的连接权值。
另一个自变量表示阈值,或称为偏置
神经元的输入与输出的关系:
在这里插入图片描述

4.激活函数
激活函数是对净激活函数与输出进行映射的函数。一些常用的激活函数,由于输入数据与期望值之间可能并不是量级一样,所以需要激活。
在这里插入图片描述
S形和双极S形函数图像:
在这里插入图片描述
S形和双极S形函数的导函数均为连续函数。

5.网络模型
根据网络中神经元的互联方式的不同,网络模型分为:
前馈神经网络:只在训练过程会有反馈信号,而在分类过程中数据只能向前传送,直到达到输出层,层间没有向后的输出信号。
在这里插入图片描述
反馈神经网络:从输出到输入具有反馈连接的神经网络,其结构要比前馈网络复杂的多。在这里插入图片描述
自组织网络:通过自动寻找样本中的内在规律和本质属性,自组织,自适应地改变网络参数与结构。
在这里插入图片描述

6.工作状态
神经网络的工作状态分为学习工作状态。
学习:利用学习算法来调整神经元间的连接权重,使得网络输出更符合实际。
工作:神经元间的连接权值不变,可以作为分类器或者预测数据之用。

7.学习方式
学习方式分为有导师学习(监督学习)无导师学习(非监督学习)
有导师学习:将一组训练集送入网络,根据网络的实际输出与期望输出间的差别来调整连接权。(如:BP算法)
在这里插入图片描述

无导师学习:抽取样本集合中蕴含的统计特性,并以神经元之间的联接权的形式存于网络中。(如:Hebb学习率)
在这里插入图片描述

建立和应用神经网络的步骤

(1)网络结构的确定
包括网络的拓扑结构和每个神经元相应函数的选取。

(2)权重和阈值的确定
通过学习得到,为有指导的学习,也就是利用已知的一组正确的输入、输出数据,调整权和阈值使得网络输出与理想输出偏差尽量小。
(3)工作阶段
用带有确定权值和阈值的神经网络解决实际问题的过程,也叫做模拟

BP算法

采用BP学习算法的前馈神经网络称为BP神经网络。
在这里插入图片描述
BP算法基本原理:利用输出后的误差来估计输出层的直接前导层的误差,再用这个误差估计更前一层的误差,如此一层一层反传下去,就获得了所有其他各层的误差估计。

预测类代码

% 读取数据
input = rand(2,200);
output = input(1,:) .* input(2, :);

% 训练集,测试集
input_train = input(:, 1:150);
output_train = output(1:150);
input_test = input(:, 151:end);
output_test = output(151:end);

% 数据归一化
[inputn, inputps] = mapminmax(input_train, 0, 1);
[outputn, outputps] = mapminmax(output_train);
inputn_test = mapminmax('apply', input_test, inputps);

% 构建BP神经网络
net = newff(inputn, outputn, [8, 7]) % 输入层,输出层,隐含层神经元个数

% 网络参数
net.trainParam.epochs = 1000; % 训练次数
net.trainParam.lr = 0.01; % 学习速率
net.trainParam.goal = 0.000001 % 训练目标最小误差

% BP神经网络训练
net = train(net, inputn, outputn);

% BP神经网络测试
an = sim(net, inputn_test); % 用训练好的模型进行仿真
test_simu = mapminmax('reverse', an, outputps); % 预测结果反归一化

error = test_simu - output_test; % 预测值和真实值的误差

% 真实值与预测值误差比较
figure(1)
plot(output_test, 'bo-')
hold on
plot(test_simu, 'r*-')
hold on
plot(error, 'square', 'MarkerFaceColor', 'b')
legend('期望值', '预测值', '误差值')
xlabel('数据组数'),ylabel('值'),title('测试集预测值和期望值的误差对比'),set(gca,'fontsize',12)%计算误差
[~,len] = size(output_test);
MAE1 = sum(abs(error ./ output_test)) / len;
MSE1 = error * error' / len;
RMSE1 = MSE1 ^ (1/2);
disp(['---------------误差计算---------------'])
disp(['平均绝对误差MAE为:', num2str(MAE1)])
disp(['均方误差MSE为:', num2str(MSE1)])
disp(['均方根误差RMSE为:', num2str(RMSE1)])
  • 28
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天一道题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值