作者:鲁伟
一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12)
引子
一直在琢磨怎样把这些看起来高大上的数据挖掘和机器学习算法给大家用稍微通俗点的语言介绍出来,后来又觉得这要取决于我自己对算法的理解程度有多深以及会不会以一个传道授业解惑的角度来看待自己,所以就尽量做到自己的推文能让人看起来更友好一点。
人工神经网络(Artificial Neural Network)简单而言是一种分类算法。作为机器学习的一个庞大分支,人工神经网络目前大约有几百种算法,其中包括一些著名的ANN算法:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络和自组织映射(Self-Organizing Map, SOM)等等,这篇文章我们只介绍最基本的人工神经网络算法原理及其简易的R语言实现方式。
在前几期的推文中,我们介绍的朴素贝叶斯和贝叶斯网络算法就是一种分类算法,先给两个例子让大家对分类这个概念有直观的认识。
·
是否拖欠银行贷款:银行根据一个人有房与否,婚姻状况和年收入来 判断客户是否会拖欠贷款。
·
垃圾邮件分类:机器会根据邮件里面的词汇来判断一封邮件是否为垃圾邮件。
如果一个机器能对输入的内容进行分类的话这个机器就称为
分类器
。分类器的输入是一个数值向量,叫做
属性
或者
特征
。在是否拖欠银行贷款的例子中,我们的输入是有房(1)无房(0)、已婚(1)未婚(0)收入区间这样的一个向量;垃圾邮件分类中我们的输入向量是一些0/1值,表示每一个单词是否出现。分类器的输出也是数值,拖欠贷款输出为1,不拖欠输出为0;垃圾邮件输出为1,非垃圾邮件输出为0。
分类器的目的就是要使正确分类的可能性尽可能的高,错分的概率尽可能的低,一般我们会人为的划分一些样本做好标记作为
训练样本
,训练好的样本拿来对
测试样本
进行检验,这就是一个分类算法的基本原理。人工神经网络作为一种分类算法,其背后的原理大抵如此,因训练样本中要有标记,所以人工神经网络是一种
监督分类算法
。
神经网络简介
人工神经网络是在现代神经科学的基础上提出和发展起来的一种旨在反映人脑结构及功能的抽象数学模型。它具有人脑功能基本特性:学习、记忆和归纳。
除去输入层和输出层之外,一般神经网络还具有隐藏层,隐藏层介于输入层和输出层之间,这些层完全用于分析,其函数联系输入层变量和输出层变量,使其更好地拟合训练样本。隐藏层的功能主要是增加ANN的复杂性,使算法能够模拟更为复杂的非线性关系,但隐藏层过多会导致过度拟合的问题。
神经网络的基本原理:(编辑器不方便输入公式,只好从word里截图放上来。另f(x)为传递函数。)
简单神经网络的拓扑结构如图所示:
神经网络的训练:
人工神经网络在进行学习前,必须建立一个训练样本使ANN在学习过程有一个参考,训练样本的建立来自于实际系统输入与输出或是以往的经验。举个简单的例子:
洗衣机洗净衣服的时间与衣服的衣料、数量和肮脏程度等因素有关,因此我们必须针对不同的衣料、数量和肮脏程度统计出洗衣所需时间,建立一个训练样本,不同衣服的衣料、数量和肮脏程度就是ANN的输入,而洗衣所需时间则为ANN的目标值,即输出。
ANN的学习就是不断调整权重的过程:
1) 通过输入节点将输入变量加以标准化,标准化后的变量数值落在0和1之间,或者-1到1之间。