首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一个基于多层感知机的神经网络模型应用-旧车拍卖交易数据分析

戳蓝色字关注我们哟!

内容简介

神经网络和深度学习技术的突破,极大地改变传统统计分析模型和机器学习模型在实际数据分析工作中的应用。

本文尝试使用一个基于多层感知机的神经网络模型对旧车拍卖数据进行分析,并对得到的结果与逻辑回归模型得到的结果进行比较。作者在以前发布的文章中讲述了构建逻辑回归模型并分析旧车拍卖交易的结果,在此文中不再赘述,读者请参阅《逻辑回归算法模型在旧车拍卖交易中的应用》。使用逻辑回归对二选项事件进行分析实质是模拟生成了该事件发生的概率,只需设置合适的阈值即可实现一个简单的二元分类器。而该分类器的本质还是一个线性分类器,实际效果基本取决于数据本身的线性可分性。神经网络可以做非线性分类(两层的感知机理论上可以模拟任何函数而不局限于线性函数),理论上可以得到更好的数据分析结果。但本文所述模型只取得了与逻辑回归模型近似的结果。文中后来尝试从不同角度对该结果进行解释,以期加深读者对模型原理和适用范围限制的理解。

神经元,感知机及神经网络

人工智能神经网络的工作机制源于科学家对大脑工作机制的模拟。人脑由亿万个互相连接的神经元细胞组成,虽然完整的大脑工作机制对人类来说还属未知,但一些得以验证过的简单的研究结果帮助数学家和计算机专家构建出了神经网络模型。单个的神经元完成的工作较为简单:接收外部刺激(来自外界环境或其他神经元),对特定的刺激种类和强度做出反应,当结果符合一定条件时,生成刺激信号传递给与其相连的下一个(一些)神经元。亿万多个相连的神经元细胞一起进行这样的工作,就能完成我们称之为“智能”的大脑活动。专家们基于神经元细胞的工作原理提出了计算机神经元的模型,如下图:

神经元接收外部刺激(表现为数据输入组X1,X2,…Xm),并对特定的刺激种类和强度做出反应(表现为对输入数据做加权求和W1X1+W2X2+…+WmXm),在反应满足特定条件时生成刺激信号向下一级传递(表现为将加权求和的结果和特定的阈值ϴ比较,若大于ϴ则对外输出刺激)。

有了神经元,我们可以用多个神经元组成感知机。所谓感知机就是连接在一起的多个神经元组成的网络,入下图:

在上图的感知机模型中我们使用了单独的Bias单元(图顶标有-1的单元)来实现对阈值ϴ的比较,而把加权、阈值比较合成在一个圆形单元中了。每一神经元输出的数学表达为:

在输入层和输出层之间加入更多的中间层会使得这样一个网络更为强大(实际上,数学家们证明了两层以上的感知机模型可以模拟任何函数,是理论上的万能函数模拟器,在Michael Nielsen所著的一书中有一个易于理解的简单不严谨证明)。最终我们使用多层感知机构建出下图所示的神经网络:

在实际的神经网络实现中,神经元的输出激活函数被Sigmoid函数取代,以使得激活函数与阈值函数有相似的特性并连续可微分(其中W项是加权后的ϴ移到等式左侧而来):

细心的读者可能已经发现,神经网络中所使用的Sigmoid函数,其实就是我们在逻辑回归模型中使用的逻辑函数(Logit Function)。

下面是我们在本文中使用的神经网络模型的Python代码实现:

使用神经网络分析旧车拍卖交易数据

和在《逻辑回归算法模型在旧车拍卖交易中的应用》中一样,我们使用car.csv的数据集来训练该神经网络。该数据集来源于历史的拍卖数据,一共有59,754行数据,每行代表一次拍卖交易。对任何一次交易,数据集中也含有该次交易所购车辆是否为“坏车”的标签。我们选用了”size”,”make”,”VNST”,”IsOnlineSale”,”VehicleAge”等等8个参数作为神经网络的输入。在训练的过程中,我们使用单独预留好的,含有10,000个数据样本的car_test.csv数据集来监控训练程度和评估模型的预测效果。

和用R语言构建逻辑回归模型不同的是,这一神经网络模型使用的输入一维数组必须全是数值变量,必须先将数据集里的“make”,”VNST”等类型变量转变为数值变量(我们使用哑变量方法用0,1值来进行转换。具体来说就是当变量值为类型A时,我们对哑变量A赋值1,其余类型为0;当变量值为类型B时,我们对哑变量B赋值1,其余类型为0。)python语言的Pandas库里的get_dummies()函数能很容易地帮助我们完成此任务。

下面的代码帮我们生成合适的训练数据集。

生成的训练数据集中每一个记录将是一个有93个数值元素的一维数组。利用类似的代码我们也可以生成测试数据集car_test。

我们使用如下代码开展我们的神经网络模型训练:

由于神经网络的超参数(hyper-parameter)的设置需要反复实验来选择,在某些情况下未良好设置的超参数将使得模型不能收敛,在训练模型的过程中,我们需要监控模型训练的效果。在模型代码中,我们使用evaluate_0() 方法来监控训练效果,同时列出了大多数神经网络分类器的通用评估方法evaluate()。Evaluate_0() 将得到的“坏车“概率值同0.1比较,大于0.1时判定为坏车,小于0.1时判定为好车。0.1的阈值是基于整个数据集坏车占比为0.1确定的,也就是说,在盲选的情况下,得到坏车的概率是0.1。这样的阈值设定无疑并非最佳,但是它能帮我们监控模型是否收敛。反过来,如果我们使用evaluate() 方法中的比较判别,只有当计算所得的坏车概率大于好车概率才判定坏车,在本例中,模型将几乎永不判定“坏车”,也即是说,无论任何情况,坏车的概率都不会大于好车的概率。

实际训练过程监控如下:

从结果中能看到判别正确率在向6400/10000左右的收敛过程。与之对应若使用evaluate() 方法评估训练,虽然模型本身随着训练的进行在提高,但是监控过程看不到结果收敛的过程。

而判别正确率始终在9009/10000这一数值上。

模型效果解读和预测结果评估

经过大于30轮训练,模型的评估结果收敛在6400/10000左右。我们将测试集数据输入模型,得到坏车、好车的模拟概率分布。代码和概率分布图如下所示:

可以看到,虽然模型对坏车的辨别概率对不同的输入产生了不同的输出值,但是坏车的概率始终分布在0-0.5之间,而与之对应,好车的判别概率分布在0.5-1之间。两者并无交集。也就是说,模型不能得到这样的结果:对于特定的某辆车,判定它是坏车的概率大于判定它是好车的概率。这也是用evaluate()方法看不到判别成功率变化的原因。模型对任意车都判别为好车,而测试数据集10000个样本里,好车的数量是9009台。

在实践中,如果以判别成功率来衡量模型,我们的模型似乎使得结果更糟了。不用任何模型,我们把任意车都当好车,我们有9009/10000的成功率。而用了模型,我们反而只有6400/10000的成功率了。这样的结论看似有理,但实际把人引入误区。模型的成功是把原来坏车的0.1左右的概率按输入数据做了细分,帮助我们提高了对坏车的辩识。对于小概率事件,把辩识率从1% 提高到10% 并不能改变该事件发生概率依然是较小概率一方的本质。事件发生概率始终是由基本概率决定的。熟悉条件概率的读者对基本概率的印象应该不陌生。而我们对模型的评价,依然应该使用《逻辑回归算法模型在旧车拍卖交易中的应用》的十分位评估法。

使用如下代码:

我们看到在十分位分类的结果:

在模型判定最有可能为坏车前1/10的车中,坏车占据了坏车总数的24%,而前2/10的车中,坏车占据了总数的40%。前文中的lift chart依然适用本次神经网络模型的结果。

由此可见,神经网络模型只得到了逻辑回归模型类似的结果,并没有对预测结果有大的提高。前文已说到,逻辑回归模型是线性分类的二元模型,而神经网络能做非线性分类,比之逻辑回归更为强大。本例中结果并无提升,笔者认为是由数据集本身的特点决定的。模型是否强劲取代不了数据本身的特征和规律,换言之,数据本身的可分性决定了最终的分类结果。模型是否更强更好,能够决定是否能更好地发掘数据中隐藏的规律,但是绝不能改变数据本身的联系规律。在本例中,逻辑回归把因变量和8个自变量的关系较好地反映出来,神经网络未能比逻辑回归做得更好。

参考书目:

《Neural Networks and Deep Learning》,Michael Nielsen,2016

《MACHINE LEARNING An Algorithmic Perspective》 2nd Edition , Stephen Marsland

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180720G0QOTL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券