有关于BP神经网络原理前人之述备矣,这里就暂且略过。从一年前第一次接触机器学习到现在,已经学习很多类似的智能学习算法,无论是遗传算法、群算法、模拟退火算法还是神经网络算法,在有监督的学习算法中,无非就是设计一个标准和进化方式,让结果与标准之间的误差越来越少,直到误差缩小到允许的范围内并收敛,我们谓之学习成功了。BP神经网络也是这样的,在BP神经网络学习的目标就是输出层输出的结果与真实值的差距尽可能的少。而在更新参数时实际上用的是梯度下降的方法,所以需要计算一些偏导数。而在解决分类问题中,每一层的神经元数目的设定,可以根据数据选择,我目前的建议是输入数据是多少维,输入层就设置多少个神经元,每一个输入层神经元对应一个维度上的分量。数据总共要分成多少类,输出层就设置多少个神经元,比如假设要分为四类,可以设置输入这四类数据时期望的输出分别为[0 0 0 1],[0 0 1 0],[0 1 0 0 ]和[1 0 0 0]。至于隐含层的数目,我目前也不确切的知道应该设置多少个神经元,需要进一步的学习。这两点只是我今天想到的,是一种有点朴素的想法而已。

下面是一个用BP神经网络解决分类问题的MATLAB实现。

clc,clearload('Data-Ass2.mat');
traindata = data(:,1:2000);
testdata = data(:,2001:3000);insize = 2;%输入层神经元数目
hidesize = 10;%隐含层神经元数目
outsize = 2;%输出层神经元数目yita1 = 0.001;%输入层到隐含层之间的学习率
yita2 = 0.001;%隐含层到输出层之间的学习率W1 = rand(hidesize,insize);%输入层到隐含层之间的权重
W2 = rand(outsize,hidesize);%隐含层到输出层之间的权重
B1 = rand(hidesize,1);%隐含层神经元的阈值
B2 = rand(outsize,1);%输出层神经元的阈值Y = zeros(2,2000);%期望输出
for i = 1:2000y = zeros(2,1);if traindata(3,i)==1y = [1;0];elsey = [0;1];endY(:,i) = y;
endloop = 1000;
E = zeros(1,loop);
for loopi = 1:loopfor i = 1:2000x = traindata(1:2,i);hidein = W1*x+B1;%隐含层输入值hideout = zeros(hidesize,1);%计算隐含层输出值for j = 1:hidesizehideout(j) = sigmod(hidein(j));endyin = W2*hideout+B2;%输入层输入值yout = zeros(outsize,1);%输出层输出值for j = 1:outsizeyout(j) = sigmod(yin(j));ende = yout-Y(:,i);%输出层计算结果误差E(loopi) = e(1)+e(2);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%后向反馈dB2 = zeros(outsize,1);%误差对输出层阈值求偏导,计算阈值变化量for j = 1:outsizedB2 = sigmod(yin(j))*(1-sigmod(yin(j)))*e(j)*yita2;end%隐含层与输出层之间的权重的变化量dW2 = zeros(outsize,hidesize);for j = 1:outsizefor k = 1:hidesizedW2(j,k) = sigmod(yin(j))*(1-sigmod(yin(j)))*hideout(k)*e(j)*yita2;endend%隐含层阈值变化量dB1 = zeros(hidesize,1);for j = 1:hidesizetempsum = 0;for k = 1:outsizetempsum = tempsum + sigmod(yin(k))*(1-sigmod(yin(k)))*W2(k,j)*sigmod(hidein(j))*(1-sigmod(hidein(j)))*e(k)*yita1;enddB1(j) = tempsum;end%输入层到隐含层的权重变化量dW1 = zeros(hidesize,insize);for j = 1:hidesizefor k = 1:insizetempsum = 0;for m = 1:outsizetempsum = tempsum + sigmod(yin(m))*(1-sigmod(yin(m)))*W2(m,j)*sigmod(hidein(j))*(1-sigmod(hidein(j)))*x(k)*e(m)*yita1;enddW1(j,k) = tempsum;endendW1 = W1-dW1;W2 = W2-dW2;B1 = B1-dB1;B2 = B2-dB2;endif mod(loopi,100)==0loopiendendplot(E);% %查看训练效果
% tempyout = zeros(2,1000);
% for i = 1:1000
%     x = testdata(1:2,i);
%
%     hidein = W1*x+B1;%隐含层输入值
%     hideout = zeros(hidesize,1);%隐含层输出值
%     for j = 1:hidesize
%         hideout(j) = sigmod(hidein(j));
%     end
%
%     yin = W2*hideout+B2;%输出层输入值
%     yout = zeros(outsize,1);
%     for j = 1:outsize
%         yout(j) = sigmod(yin(j));
%     end
%
%     tempyout(:,i) = yout;
%
%     if yout(1)>yout(2)
%         scatter(x(1),x(2),'r')
%         hold on;
%     else
%         scatter(x(1),x(2),'g')
%         hold on;
%     end
%
%
% end

当迭代1000次时的训练效果和分类效果分别如下

训练效果:

测试效果:

我们可以看到当迭代次数为1000次时,分类的正确率已经比较高了,只有少量点分错。

而当迭代次数达到10000次时的训练效果如下图所示

测试效果:

而当迭代次数达到10000次时,对于图中的数据正确率已经到达了100%。当然在实际情况中,这种结果并不一定好,有可能会出现过拟合的情况。

本实例中所用到的数据可以从链接:https://pan.baidu.com/s/1Uxt9RurmBraFR-SjGquoww 密码:beb1下载。

----------------------------------------补充--------------------------------------------------

有好多同志私信或留言说MATLAB提示缺少sigmod函数,本以为大家都知道的,看来在这里还是需要补充一下。这是属于BP神经网络的基本原理部分,我开头的一句“前人之述备矣”好像是有点不负责任的嫌疑。这个函数就是那个常用的激活函数:

写这么一个函数就可以了

function [ y ] = sigmod( x )
% 激活函数Sigmod,用于神经网络
%   鸿武六年三月七日
y = 1/(1+exp(-x));end

测试数据的话上面的那个百度云链接好像还没有失效。

如有不当之处,欢迎通过QQ进行深入交流,同时也欢迎通过微信打赏的方式对博主进行支持。

用BP神经网络解决简单的分类问题相关推荐

  1. BP神经网络原理简单介绍以及公式推导(矩阵形式和分量形式)

    BP神经网络原理简单介绍以及公式推导 标签(空格分隔): 神经网络 \def\net(#1){net^{(#1)}} \def\Y(#1){Y^{(#1)}} \def\part(#1){\parti ...

  2. 量子遗传算法优化BP神经网络的预测和分类,多输入单输出,多输 入多输出

    量子遗传算法优化BP神经网络的预测和分类,多输入单输出,多输 入多输出 93499615192034876最爱matlab

  3. bp神经网络解决什么问题,bp神经网络的改进方法

    BP神经网络的核心问题是什么?其优缺点有哪些? . 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规 ...

  4. bp神经网络解决什么问题,BP神经网络的基本思想

    BP神经网络的核心问题是什么?其优缺点有哪些? . 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规 ...

  5. BP神经网络解决什么问题

    目录 一. 问题与背景 二.例子 三.常用的实际问题 原创文章,转载请说明来自<老饼讲解-BP神经网络>:bp.bbbdata.com BP神经网络是一个常用的算法,它广泛应用于数值预测, ...

  6. bp神经网络解决什么问题,bp神经网络数据预处理

    BP神经网络方法 人工神经网络是近几年来发展起来的新兴学科,它是一种大规模并行分布处理的非线性系统,适用解决难以用数学模型描述的系统,逼近任何非线性的特性,具有很强的自适应.自学习.联想记忆.高度容错 ...

  7. 【图像处理】——Python实现图像特征提取BP神经网络实现图像二分类

    目录 一.图像特征提取 二.BP实现图像二分类 1.输入层.隐层.输出层结点个数设置 (1)one hot码(假设是n分类问题) (2)一个输出,输出层结点为1 一.图像特征提取 图像具有灰度特征.G ...

  8. BP神经网络python简单实现

    BP神经网络的原理在网上有很详细的说明,这里就不打算细说,这篇文章主要简单的方式设计及实现BP神经网络,并简单测试下在恒等计算(编码)作测试. BP神经网络模型图如下 BP神经网络基本思想 BP神经网 ...

  9. 神经网络python实例分类_Python使用神经网络进行简单文本分类

    原文链接:http://tecdat.cn/?p=8613​tecdat.cn 深度学习无处不在.在本文中,我们将使用Keras进行文本分类. 准备数据集 出于演示目的,我们将使用 20个新闻组 数据 ...

最新文章

  1. python程序实例教程基础-Python简单基础小程序的实例代码
  2. iceworks-cli构建模块说明
  3. opengl es纹理贴图效果实例
  4. selenium windows 下面环境搭建(Eclipse)
  5. 大道至简 7、8、读后感
  6. mysql 1053错误,无法启动的解决方法
  7. java中console_Java:如何从System.Console()获取输入
  8. Atitit java集成内嵌浏览器与外嵌浏览器attilax总结
  9. php把文本数据保存为文件格式,word如何保存文件格式为纯文本格式?
  10. 互联网大佬生存法则 如何防守周鸿祎
  11. win10系统云服务器配置,win10系统云服务器配置
  12. uniapp实现APP微信登录流程
  13. GWAS数据分析流程—SNP、Indel注释
  14. 阿里云ECS的1M带宽能干嘛?
  15. 360极速浏览器,关闭“开启DirectWrite高清字体渲染支持”导致内置打印崩溃
  16. 北京积分落户纳税入库时间余额已不足
  17. Pycharm安装与入门
  18. BZOJ1123BLO Tarjan割点+乘法原理+dfs
  19. 什么是JSP引擎?什么是JSP容器?什么是Web服务器?
  20. 使用freemarker生成word文档(包含遍历多条数据、图片)

热门文章

  1. 【TS TSP】基于matlab禁忌搜索求解旅行商问题【含Matlab源码 447期】
  2. Cesium双屏对比
  3. 鸿蒙要出来了,安卓开发工程师有影响吗?
  4. 三分钟了解http和https
  5. 海康大华宇视等等安防监控摄像头转成WebRTC流实现Web浏览器超低延迟无插件直播新方案
  6. 制作ubuntu18.04启动盘 + 安装ubuntu18.04
  7. cd与cd /d命令
  8. STM32的HAL库及其使用
  9. airflow调度方案
  10. 《自学大全》—营造学习氛围