AI智能
改变未来

银行客户流失预警模型(四) | 神经网络的应用


什么是神经网络?

神经网络也是机器学习的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。

简单理解就是它试图模仿人类大脑信息在神经元上的传递,以及信息处理的方式。

一个计算模型要被称为神经网络,需要大量的彼此连接的节点(也叫做神经元)。神经元具备以下特点
(1)每个神经元通过某个特定的输出函数(激励函数)来处理来自其他神经元加权处理的输入值
(2)神经元之间的信息传递用加权值定义,算法会不断自我学习,调整这个加权方式

一般来说,神经网络的架构可以分为三类

前馈神经网络

这是实际应用中最常见的神经网络类型。第一层是输入,最后一层是输出。如果有多个隐藏层,我们称之为“深度”神经网络。他们计算出一系列改变样本相似性的变换。各层神经元的活动是前一层活动的非线性函数。

循环网络

循环网络在他们的连接图中定向了循环,这意味着你可以按照箭头回到你开始的地方。他们可以有复杂的动态,使其很难训练。他们更具有生物真实性。

循环网络的目的是用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。

循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

对称连接网络

对称连接网络有点像循环网络,但是单元之间的连接是对称的(它们在两个方向上权重相同)。比起循环网络,对称连接网络更容易分析。这个网络中有更多的限制,因为它们遵守能量函数定律。没有隐藏单元的对称连接网络被称为“Hopfield 网络”。有隐藏单元的对称连接的网络被称为玻尔兹曼机。

什么是感知机?

感知机是一个人工神经元,其工作原理如下: 感知机的输入是几个二进制,
x1,x2,…x1,x2,…,输出是一位单独的二进制:

本例中的感知机有三个输入x1,x2,x3。通常,它可以有更多或者更少的输入,感知机引入了权重(weight):w1,w2,…w1,w2,…,等实数来表示各个输入对于本神经元输出的重要程度。神经元的输出是0还是1,由加权和∑jwjxj是否小于或者大于某一个阈值决定。这就是感知机的工作方式。

下面举一个简单的例子帮助理解感知机如何工作:
你所在的城市将会举办一个奶酪节。你非常喜欢奶酪,你可能需要权衡以下几个因素来作出决定是否参加奶酪节:

  1. 天气好不好?
  2. 你的男朋友会陪你去吗?
  3. 坐公共交通方便去吗?(假设你自己没有车)

我们可以使用x1,x2和x3这几个二进制变量来表示这三个因素。

  • 天气很好:x1=1;天气不好: x1=0。
  • 你的男朋友也想去:x2=1,否则x2=0
  • 公共交通方便X3=1,否则X3=0

假设你真的超级喜欢奶酪,即便是你的男朋友对此没兴趣并且交通也不方便的情况下,你也依然很想去。不过,你非常在意天气情况,如果天气不好的话你就不会去参加了。你可以用感知机来为这样的决策建立模型。为天气赋予权重w1=6,为另外两个条件赋予权重w2=2和w3=2。

对来说值比较大的w1表明了天气情况对你的决策影响更大,胜过了你的男朋友是否会陪你去,以及交通的便捷程度。最后,假设你选择5作为感知机的阈值。这样,这个感知机就构建起了一个决策模型,只要天气好就输出1,只要天气不好就输出0。你的男朋友是否会去,以及公共交通是否方便,都不会影响输出的结果。

通过调整权重和阈值的大小,我们可以得到不同的决策模型。例如,假设我们选择的阈值为3。那么此时,如果要让感知机做出你应该去参加这个节日的决策,就需要满足天气很好或者交通方便的同时你的男朋友也会陪你去。也就是说,这个决策模型与之前不同了。阈值的降低意味着你参加这个节日的意愿越强。这就是简单感知机的工作原理。

但是这个单层感知机并不能完全模拟人的决策系统。为了让决策更加精细化,通常会构建一个由多个感知机组成的复杂网络系统。

在这个网络中,

  • 第一列感知机——通常称为第一层感知机——通过赋予输入的权重,做出三个非常简单的决策。

  • 第二层感知机呢?每一个第二层感知机通过赋予权重给来自第一层感知机的决策结果,来做出决策。通过这种方式,第二层感知机可以比第一层感知机做出更加复杂以及更高层次抽象的决策。

  • 第三层感知机能够做出更加复杂的决策。通过这种方式,一个多层网络感知- 机可以做出更加精细的决策。

让我们来简化一下对感知机的描述,∑jwjxj>threshold的条件太笨重了,我们可以通过使用两个新记法来简化它。第一是使用点乘来代替∑jwjxj。我们有w⋅x=∑jwjxj,其中w和x都是向量,它们的元素分别代表了权重和输入。第二是将阈值移到不等号的另一侧,并使用偏置(bias)来代替阈值threshold,b=−threshold。于是,感知机规则可以被重写为:

可以将偏置(bias)理解为感知机为了得到输出为1的容易度的度量。如果从生物的角度来理解,偏置是使神经元被激活的容易度的度量。

一个神经元有n个输入,每一个输入对应一个权值w,神经元内会对输入与权重做乘法后求和,求和的结果与偏置做差,最终将结果放入激活函数中,由激活函数给出最后的输出,输出往往是二进制的,0 状态代表抑制,1 状态代表激活,是否激活,取决于偏置大小。

什么是激活函数?

激活函数用于隐层输出。

神经网络神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。为什么要用激活函数?主要作用是提供网络的非线性建模能力。

假设一个示例神经网络中仅包含全连接运算,那么该网络仅能够表达线性映射,即便增加网络的深度也依旧还是线性映射,难以有效建模实际环境中非线性分布的数据。加入(非线性)激活函数之后,神经网络才具备了分层的非线性映射学习能力。

激活函数通常有如下一些性质
(1) 非线性:如果不用激励函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。当激活函数是非线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。
(2) 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
(3) 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。

tensorflow

tf.contrib.learn 是 TensorFlow 提供的一个机器学习高级 API 模块,让用户可以更方便的配置、训练和评估各种各样的机器学习模型,里面内置了很多模型可以直接调用,使用类似 scikit-learn 的 API 。

  • K-means 聚类 tf.contrib.learn.KMeansClustering
  • 神经网络分类器 tf.contrib.learn.DNNClassifier
  • 神经网络回归器 tf.contrib.learn.DNNRegressor
  • 广度深度回归 tf.contrib.learn.DNNLinearCombinedRegressor
  • 广度深度分类 tf.contrib.learn.DNNLinearCombinedClassifier
  • 线性分类tf.contrib.learn.LinearClassifier
  • 线性回归 tf.contrib.learn.LinearRegressor
  • 逻辑斯谛回归 tf.contrib.learn.LogisticRegressor

神经网络分类器 tf.contrib.learn.DNNClassifier的使用方法:

(1)载入数据
(2)定义 FeatureColumn
(3)定义 classifier
(4)训练
(5)评估
(6)预测

  • 1.载入数据
modelData =  pd.read_csv(\'./Desktop/data/modelData.csv\',header=0,index_col=0)
  • 2.定义 FeatureColumn
import tensorflow as tffeature_columns = [tf.contrib.layers.real_valued_column(k) for k in allFeatures]
  • 3.定义 classifier

1)# hidden_units 隐藏层层数 和 每层的节数,长度表示层数,第i个元素表示该层的节数,深度神经网络体现在层

2)隐藏层联接状态
每次迭代中,每个隐藏层节点被忽略的概率(本轮迭代完成后会恢复),主要是防止过拟合

classifier = tf.contrib.learn.DNNClassifier(feature_columns = feature_columns,hidden_units=[50,80],n_classes=2,dropout = 0.5)
  • 4.训练
classifier.fit(X_train, y_train, batch_size=256,steps = 100)
  • 预测
classifier._estimator.predict_proba(x_test)
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 银行客户流失预警模型(四) | 神经网络的应用