目录
本文先简单介绍BP神经网络是什么,有什么用,然后展示如何使用BP神经网络来通过城市医疗、文化、经济等指标来预测城市的犯罪指标。
声明:本文部分图文来自《老饼讲解-BP神经网络》https://bp.bbbdata.com
一、BP神经网络简介
BP神经网络,全称反向传播(Back Propagation)神经网络,是1986年由Rumelhart和McClelland为首的科学家提出的概念。它是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络模型之一。BP神经网络的基本思想是梯度下降法,利用梯度搜索技术,使网络的实际输出值和期望输出值的误差均方差为最小。其核心算法包括信号的前向传播和误差的反向传播两个过程。
1.1.BP神经网络的作用
BP神经网络具有广泛的应用,它可以用于解决各种问题,例如分类问题(如手写数字识别、图像分类等)、回归问题(如预测股票价格、气候预报等)、控制问题(如飞行控制、汽车驾驶控制等)、数据压缩、自然语言处理(如文本分类、机器翻译等)以及强化学习等。此外,BP神经网络还可以应用于解决其他问题,如生物信息学问题、物体识别、脑电信号分析等等。
简单来说,就是在完全不知道X和y的逻辑关系时,可以通过采集到大量历史数据样本,使用BP神经网络来拟合x与y的关系,使得在新样本中可以通过BP神经网络来预测y
如下:
1.2.BP神经网络模型
BP神经网络模型如下:
BP神经网络模型是一种多层前馈神经网络,它主要是根据误差反向传播算法进行训练。这种网络模型由信息的正向传播和误差的反向传播两个过程组成。在正向传播过程中,输入信息从输入层经隐含层逐层处理,并传向输出层。如果输出层不能得到期望的输出,则转入误差的反向传播过程,将误差信号沿原来的连接通路返回,通过修改各神经元的权值,使得误差信号最小。
这种网络模型被广泛应用于各种领域,因为它具有很强的映射能力和非线性处理能力。同时,BP神经网络模型也具有一些缺点,例如训练时间长,容易陷入局部最小值等。因此,在实际应用中,需要根据具体问题选择合适的网络结构和参数,以达到最好的效果。
BP更详细的原理与相关推导见:
二、BP神经网络预测城市犯罪指数
2.1.城市数据介绍
matlab自带的城市数据cities.mat如下:
共包含329个城市的9个变量数据:
climate,housing,health, crime,transportation,education,arts,recreation,economics
气候、住房、健康、犯罪、交通、教育、艺术、娱乐、经济
2.2 BP神经网络模型与实现代码
这里以第4个变量crime作为我们的预测目标,其余变量作为预测的输入,建立一个三层的BP神经网络如下:
然后选出10个城市作为模型的测试样本,其余城市作为训练样本对BP神经网络进行训练,
matlab中实现代码如下:
clear all ;
setdemorandstream(666); %指定随机种子,这样每次训练出来的网络都一样。
load cities.mat
% ratings的各列变量:climate,housing,health, crime,transportation,education,arts,recreation,economics
train_x = ratings(:,[1:3,5:9])'; % 除了crime外,其余作为X变量
train_y = ratings(:,4)'; % 将crime作为y变量
rnd_idx = randperm(size(train_x,2),10); % 随机抽取10个城市作为测试样本
test_x = train_x(:,rnd_idx); % 测试样本的输入变量X
test_y = train_y(:,rnd_idx); % 测试样本的输出变量y
train_x(:,rnd_idx) = []; % 从训练数据中踢除测试样本的x
train_y(:,rnd_idx) = []; % 从训练数据中踢除测试样本的y
%使用用输入输出数据建立网络,
%隐节点个数设为3.其中隐层、输出层的传递函数分别为tansig和purelin,使用trainlm方法训练。
net = newff(train_x,train_y,6,{'tansig','purelin'},'trainlm');
%设置一些常用参数
net.trainparam.goal = 0.0001; % 训练目标:均方误差低于0.0001
net.trainparam.show = 400; % 每训练400次展示一次结果
net.trainparam.epochs = 15000; % 最大训练次数:15000.
[net,tr] = train(net,train_x,train_y); % 调用train函数训练网络
train_py = sim(net,train_x); % 调用sim函数计算网络训练数据的预测结果
test_py = sim(net,test_x); % 调用sim函数计算网络测试数据的预测结果
% 展示测试数据的结果
bar([test_y;test_py]') % 绘制条形图
legend('真实值','预测值') % 展示图例
title('城市犯罪指数预测结果') % 添加标题
mae_rate = mean(abs(test_y- test_py))/sum(test_y) % 计算MAE率
代码的运行结果如下:
可以看到,在预测中虽然没有极度准确,但已经有一定的准确性了。
说明BP神经网络在其余城市的样本训练中,已经学习到了气候、住房、健康、交通、教育、艺术、娱乐、经济与犯罪之间的关系。
编写不易,点个赞吧~!