数据挖掘读书笔记--第九章:高级分类:BP神经网络、SVM支持向量机_2-svm的学习目录:老饼|bp神经网络-感知机与svm-程序员宅基地

技术标签: 机器学习  python及算法学习  数据挖掘概念与技术读书笔记  

散记知识点

——“探索复杂高级的分类方法”


1.神经网络

1.1 神经网络的基本概念

(1) 定义

  • 神经网络是一组连接的输入/输出单元,其中每个连接都与一个权重相关联。在学习阶段,通过调整这些权重,使得它能够预测输入元组的正确类标号来学习。

(2) 前馈神经网络结构

  • 前馈神经网络,又称后向传播(BP, back propagation)神经网络。由一个输入层、一个或多个隐含层和一个输出层组成。
  • 这里写图片描述
  • 其中,每个输入层的每个输入 x1,x2,... x 1 , x 2 , . . . 对应于每个训练元组 X X 的观测属性,一般被称为输入神经元。输入层加权偏置后的输出作为每个隐含层神经元输入,每个隐含层神经元经过非线性激活函数 f ( ) 然后加权偏置的输出作为下一层每个隐含层输入……最后一层神经元称为输出神经元。它的输入为上一隐含层的输出,输出为类标号判别结果。
  • 多层前馈神经网络可以将类预测作为输入的非线性组合。给定足够多的隐含层单元和足够多的训练样本,多层前馈神经网络可以逼近任意函数

1.2 神经网络的构造

(1) 网络结构

  • 输入层:输入层神经元个数取决于输入的数据,例如一个数据元组的 n n 个属性值,组成向量作为输入。
  • 隐含层:按照实际需求预定义隐含层层数以及隐含层神经元个数,后期可以不断优化调整。
  • 输出层:输出层神经单元个数取决于特定的问题,比如二分类问题可以使用一个输出,多分类问题对应多个输出。

(2) 输入和输出

对于输入

  • 连续值属性:对每个属性值进行规范化至(0, 1)之间,有助于加快学习进程。
  • 离散值属性:可以进行编码,使得每个值对应一个输入单元。例如,属性 A 有三个可能的值 { a0,a1,a2} { a 0 , a 1 , a 2 } ,则可以为 A A 分配三个输入单元 I 0 , I 1 , I 2 。假如 A=a0 A = a 0 ,则 I0 I 0 置为1,其余为0

对于输出

  • 用于数值预测时,输出值为具体数值。
  • 用于分类时:二分类问题对应一个输出单元,输出为0和1(1表示正类,0表示负类);多分类问题时,每个可能的分类对应一个输出值,通过具体策略(例如每个输出对应的概率大小),来确定类标号。

(3) 权值和偏置值初始化

开始训练之前,需要对网络中的权值和偏置值进行初始化,一般初始化为小随机数(-1,1)或(-0.5,0.5)。也可以使用小标准差的正态分布进行初始化权值和偏置值。

(4) 激活函数

隐含层和输出层的每个神经元都包含一个激活函数,结构如下表示:

这里写图片描述

激活函数将上一层来的一个较大的输入值映射到一个小的区间(0, 1)。一般激活函数都是非线性可微的,使得后向传播算法可以对非线性可分的分类问题建模。
关于各类激活函数的总结可以参考转载文章:神经网络各种激活函数总结

(5) 代价函数

在训练神经网络的过程中,会选择特定的代价函数来衡量预测值与真实值之间的差距。BP神经网络通过这个差距,反向传递误差,来不断地更新权值和偏置值。

代价函数的选择需要结合具体问题,有的时候需要配合激活函数进行选择。更多关于代价函数的内容在:机器学习:神经网络代价函数总结


1.3 BP神经网络后向传播算法

采用BP算法的多层感知器是至今为止应用最广泛的神经网络。

(1) BP算法的基本思想

学习过程由信号的正向传播误差反向传播两个过程组成:

  • 信号的正向传播:正向传播时,输入样本从输入层传入,经各隐含层逐层处理,传向输出层。若输出层的输出值与真实值不符,则转入误差反向传播阶段。
  • 误差的反向传播:反向传播时,输出值与真实值的误差以某种形式通过隐含层向输入层逐层反传,并将误差分摊给各层的所有神经元。从而获得各层神经元的误差信号,此误差信号即作为修正各层权值和偏置值的一句。

这种信号的正向传播与误差反向传播的各层权值和偏置值调整的过程不断重复进行。权值和偏置值更新的过程,就是网络学习训练的过程。直到网络的输出误差减少到可接受的程度,或进行到预设的学习次数,才能够停止训练。

(2) BP算法推导

以一个三层BP神经网络(包含一个隐含层)为例:

这里写图片描述

输入向量为 X=(x1,x2,...,xn)T X = ( x 1 , x 2 , . . . , x n ) T ;隐含层输出向量为 Y=(y1,y2,...,ym)T Y = ( y 1 , y 2 , . . . , y m ) T ;输出层输出向量为 o=(o1,o2,...,ol)T o = ( o 1 , o 2 , . . . , o l ) T ,真实值向量为 D=(d1,d2,...,dl)T D = ( d 1 , d 2 , . . . , d l ) T

假定输入层和隐含层之间的权值矩阵用 V=(v1,v2,...,vm) V = ( v 1 , v 2 , . . . , v m ) 表示,其中列向量 vj v j 为隐含层第 j j 个神经元对应的权向量,对应的偏置值向量 v b = ( b 1 , b 2 , . . . , b m ) ;隐含层到输出层的权值矩阵用 W=(w1,w2,...,wl) W = ( w 1 , w 2 , . . . , w l ) 表示,其中列向量 wk w k 为输出层第 k k 个神经元对应的权向量,对应的偏置值向量 w b = ( b 1 , b 2 , . . . , b l )

正向传播时,各层信号之间的数学关系为:

  • 对于输入层-隐含层
    netj=i=0nvijxi+bjyj=f(netj)j=1,2,...,mj=1,2,..,m n e t j = ∑ i = 0 n v i j x i + b j j = 1 , 2 , . . . , m y j = f ( n e t j ) j = 1 , 2 , . . , m
  • 对于隐含层-输出层
    netk=
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40170902/article/details/80019503

智能推荐

JavaScript学习笔记_curry函数未定义-程序员宅基地

文章浏览阅读343次。五种原始的变量类型1.Undefined--未定义类型 例:var v;2.String -- ' '或" "3.Boolean4.Number5.Null--空类型 例: var v=null;Number中:NaN -- not a number非数本身是一个数字,但是它和任何数字都不相等,代表非数,它和自己都不相等判断是不是NaN不能用=_curry函数未定义

兑换码编码方案实践_优惠券编码规则-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏17次。兑换码编码设计当前各个业务系统,只要涉及到产品销售,就离不开大大小小的运营活动需求,其中最普遍的就是兑换码需求,无论是线下活动或者是线上活动,都能起到良好的宣传效果。兑换码:由一系列字符组成,每一个兑换码对应系统中的一组信息,可以是优惠信息(优惠券),也可以是相关奖品信息。在实际的运营活动中,要求兑换码是唯一的,每一个兑换码对应一个优惠信息,而且需求量往往比较大(实际上的需求只有预期_优惠券编码规则

c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...-程序员宅基地

文章浏览阅读45次。C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt* * 4.1 选择结构程序设计 4.2 循环结构程序设计 4.3 辅助控制语句 第四章 结构化程序设计 4.1 选择结构程序设计 在现实生活中,需要进行判断和选择的情况是很多的: 如果你在家,我去拜访你 如果考试不及格,要补考 如果遇到红灯,要停车等待 第四章 结构化程序设计 在现实生活中,需要进行判断和选择的情况..._在现实生活中遇到过条件判断的问

幻数使用说明_ioctl-number.txt幻数说明-程序员宅基地

文章浏览阅读999次。幻数使用说明 在驱动程序中实现的ioctl函数体内,实际上是有一个switch{case}结构,每一个case对应一个命令码,做出一些相应的操作。怎么实现这些操作,这是每一个程序员自己的事情。 因为设备都是特定的,这里也没法说。关键在于怎样组织命令码,因为在ioctl中命令码是唯一联系用户程序命令和驱动程序支持的途径 。 命令码的组织是有一些讲究的,因为我们一定要做到命令和设备是一一对应的,利_ioctl-number.txt幻数说明

ORB-SLAM3 + VScode:检测到 #include 错误。请更新 includePath。已为此翻译单元禁用波浪曲线_orb-slam3 include <system.h> 报错-程序员宅基地

文章浏览阅读399次。键盘按下“Shift+Ctrl+p” 输入: C++Configurations,选择JSON界面做如下改动:1.首先把 “/usr/include”,放在最前2.查看C++路径,终端输入gcc -v -E -x c++ - /usr/include/c++/5 /usr/include/x86_64-linux-gnu/c++/5 /usr/include/c++/5/backward /usr/lib/gcc/x86_64-linux-gnu/5/include /usr/local/_orb-slam3 include 报错

「Sqlserver」数据分析师有理由爱Sqlserver之十-Sqlserver自动化篇-程序员宅基地

文章浏览阅读129次。本系列的最后一篇,因未有精力写更多的入门教程,上篇已经抛出书单,有兴趣的朋友可阅读好书来成长,此系列主讲有理由爱Sqlserver的论证性文章,希望读者们看完后,可自行做出判断,Sqlserver是否真的合适自己,目的已达成。渴望自动化及使用场景笔者所最能接触到的群体为Excel、PowerBI用户群体,在Excel中,我们知道可以使用VBA、VSTO来给Excel带来自动化操作..._sqlsever 数据分析

随便推点

智慧校园智慧教育大数据平台(教育大脑)项目建设方案PPT_高校智慧大脑-程序员宅基地

文章浏览阅读294次,点赞6次,收藏4次。教育智脑)建立学校的全连接中台,对学校运营过程中的数据进行处理和标准化管理,挖掘数据的价值。能:一、原先孤立的系统聚合到一个统一的平台,实现单点登录,统一身份认证,方便管理;三、数据共享,盘活了教育大数据资源,通过对外提供数。的方式构建教育的通用服务能力平台,支撑教育核心服务能力的沉淀和共享。物联网将学校的各要素(人、机、料、法、环、测)全面互联,数据实时。智慧校园解决方案,赋能教学、管理和服务升级,智慧教育体系,该数据平台具有以下几大功。教育大数据平台底座:教育智脑。教育大数据平台,以中国联通。_高校智慧大脑

编程5大算法总结--概念加实例_算法概念实例-程序员宅基地

文章浏览阅读9.5k次,点赞2次,收藏27次。分治法,动态规划法,贪心算法这三者之间有类似之处,比如都需要将问题划分为一个个子问题,然后通过解决这些子问题来解决最终问题。但其实这三者之间的区别还是蛮大的。贪心是则可看成是链式结构回溯和分支界限为穷举式的搜索,其思想的差异是深度优先和广度优先一:分治算法一、基本概念在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两_算法概念实例

随笔—醒悟篇之考研调剂_考研调剂抑郁-程序员宅基地

文章浏览阅读5.6k次。考研篇emmmmm,这是我随笔篇章的第二更,原本计划是在中秋放假期间写好的,但是放假的时候被安排写一下单例模式,做了俩机试题目,还刷了下PAT的东西,emmmmm,最主要的还是因为我浪的很开心,没空出时间来写写东西。  距离我考研结束已经快两年了,距离今年的考研还有90天左右。  趁着这个机会回忆一下青春,这一篇会写的比较有趣,好玩,纯粹是为了记录一下当年考研中发生的有趣的事。  首先介绍..._考研调剂抑郁

SpringMVC_class org.springframework.web.filter.characterenco-程序员宅基地

文章浏览阅读438次。SpringMVC文章目录SpringMVC1、SpringMVC简介1.1 什么是MVC1.2 什么是SpringMVC1.3 SpringMVC的特点2、HelloWorld2.1 开发环境2.2 创建maven工程a>添加web模块b>打包方式:warc>引入依赖2.3 配置web.xml2.4 创建请求控制器2.5 创建SpringMVC的配置文件2.6 测试Helloworld2.7 总结3、@RequestMapping注解3.1 @RequestMapping注解的功能3._class org.springframework.web.filter.characterencodingfilter is not a jakart

gdb: Don‘t know how to run. Try “help target“._don't know how to run. try "help target".-程序员宅基地

文章浏览阅读4.9k次。gdb 远程调试的一个问题:Don't know how to run. Try "help target".它在抱怨不知道怎么跑,目标是什么. 你需要为它指定target remote 或target extended-remote例如:target extended-remote 192.168.1.136:1234指明target 是某IP的某端口完整示例如下:targ..._don't know how to run. try "help target".

c语言程序设计教程 郭浩志,C语言程序设计教程答案杨路明郭浩志-程序员宅基地

文章浏览阅读85次。习题 11、算法描述主要是用两种基本方法:第一是自然语言描述,第二是使用专用工具进行算法描述2、c 语言程序的结构如下:1、c 语言程序由函数组成,每个程序必须具有一个 main 函数作为程序的主控函数。2、“/*“与“*/“之间的内容构成 c 语言程序的注释部分。3、用预处理命令#include 可以包含有关文件的信息。4、大小写字母在 c 语言中是有区别的。5、除 main 函数和标准库函数以..._c语言语法0x1e