相关标签

基于Python随机森林算法分析与研究

发布时间:2019-12-03 15:39

  摘要

  在大数据盛行的时代背景下,机器学习这门学科的广泛应用。并且列举运用Python语言进行数据处理的优势,将其与传统语言进行对比,充分体现了Python语言在语言简洁,效率高等方面的优势。这也是本文最后选择Python语言实现SVM算法的主要原因。

  本文主体内容阐述了支持向量机算法(SVM)的基本内涵,并且用图示和数学方法形象具体讲解了SVM的基本原理。具体分析了SVM算法中线性可分数据、线性不可分数据和含有outlier点的数据集的分类方式。通过对偶问题求解法、核函数、及SMO算法等实现了对最优超平面的求解。并且完成了二分类问题向多标签分类问题的推广。

  文章通过,使用手写数字数据集在Python上进行SVM模型的训练与测试,体会SVM算法如何解决实际问题。具体的表现了用Python语言实现SVM算法的优势,直观的展现了实验成果。

  关键字:机器学习 Python SVM 最优超平面 核函数

  1.1机器学习

  随着互联网计算机技术的普及应用与发展,随处可见的数据信息数量日益庞大,数据与信息与人们的生活愈发的息息相关。数据量的不断扩大和信息获取方式的不断增多,带来了信息处理日益困难的问题。伴随着硬件性能的快速增长,人们寄希望于计算机可以帮助人类处理越来越庞大的数据。因此,机器学习在近年来得以迅速兴起与发展。

  机器学习(Machine Learning, ML)是集合了多种领域知识的一门学科,涵盖统计学、概率论、算法复杂度理论等多个领域。用于研究计算机通过模拟人类的学习行为,并且由此去的新知识和技能的能力。

  机器学习是计算机人工智能的核心,被应用于人工智能的多个领域。

  顾名思义,机器学习是使用机器来模拟人类学习行为的一项技术。具体来说,机器学习是一门训练机器获取新知识或新技能,包括获取现有知识的学科。这里所说的“机器”,指的就是计算机、电子计算机、中子计算机、光子计算机或神经计算机等等。

  机器学习已经在很多领域进行了广泛应用,例如:计算机视觉、DNA序列测序、语音识别、手写识别、医学诊断。

  机器学习算法是一种能够从数据中进行持续学习的算法。Mitchell (1997)为其提供了一个简洁的定义:对于某类任务T和性能度量 P,一个计算机程序被认为可以从经验E中学习是指,通过经验 E 改进后,它在任务 T 上由性能度量 P 衡量的性能有所提升。其中任务T指的是人们希望机器可以实现的功能。在分类、回归、异常检测、转录、机器翻译等任务上,机器学习已经有了广泛的应用。而获取经验E的过程可以分为无监督算法和有监督算法。两者的区别在于是否对数据集中的数据样本给予标签。

  1.2支持向量机

  在监督学习中,支持向量机是影响力最大的机器学习方法之一。支持向量机由Corinna Cortes和Vapnik等人于1995年提出,其创新的核技术使其不再局限于对线性数据的处理,在对于非线性数据的分类上也有了良好的表现,并已被广泛应用于文本识别、手写字体识别、及时间序列预测等小型分类任务中。

  支持向量机(Support Vector Machines,SVM)这种机器学习方法是以统计学理论、VC维理论和结构风险最小化原理为基础的。在解决特定问题,如小样本、非线性和高维模式问题时表现优异,并且大大优化克服了机器学习中会遇到的“维数灾难”问题与“过学习”问题。SVM具有如下特点:

  (1)以非线性映射为理论基础,利用内积核函数实现由低维空间到高维空间的非线性映射。

  (2)以寻找最优超平面为目标,核心思想为最大化分类间隔。

  (3)以少数支持向量为训练结果,去除了大量冗余样本,具有良好的鲁棒性。

  (4)理论基础坚实、数学模型简单明了,可以归结为一个受约束的二次型规划(Quadratic Programming,QP)的求解问题 。

  (5)可以运用牛顿法、内点法等经典优化算法,方便快捷地求得最优解。

  SVM作为一类二分类模型,可以处理以下三类数据:

  (1)线性可分数据。使硬间隔最大化,进行线性分类器学习

  (2)近似线性可分数据。使软间隔最大化,进行线性分类器学习

  (3)线性可分数据。使核函数与软间隔最大化,进行非线性分类器学习。

  平面内的直线,对应线性分类器;平面上的曲线,对应非线性分类器。硬间隔虽然可以将线性可分数据集中的样本正确分类,但是受到outlier样本的很大影响,不推荐使用。软间隔可以对近似线性可分数据和非线性可分数据进行分类,离超平面很近的outlier点可以允许被错误分类,从而可以更广泛的应用。

  1.3 Python语言

  Python这门语言已经产生并发展了30余年,是目前最受欢迎的程序设计语言,也是通用编程语言中最接近自然语言的。Python侧重于求解计算问题,其具有语法简单,语言表达层次高等特点,这与计算机问题解决中的思维理念相吻合。Python语言将问题和问题的解决方案进行简化,从而达到问题的自动化求解,是当下最直观的利用计算机解决复杂信息系统的工具。Python语言的适用群体广泛,任何需要使用计算机来解决计算问题的人群都可以使用,即使是非计算机专业从业人员。

  Python语言是一种轻化语法,弱化类型的计算机语言,同C语言等相比较,不需要指针和地址等计算机系统内必须的结构元素;可以不定义变量就直接使用(解释器会自动匹配);语言内部通过UTF-8编码来实现,字符串类型独立,操作多语言文本时,语言大大简化,可以优秀的支持中文;运用变长列表代替定长数组,可以将多种数据类型进行兼容并可以灵活地表示集合长度。Python语言除了有基本语法,还是一个脚本语言,直接运行源代码便可以执行,这可以让程序运行和源代码相融合。这种模式的优势在于:

  (1)有利于源代码维护。

  (2)可以跨操作系统操作。

  (3)可以实现代码的交流与设计。

  Python具有简洁的语言代码,能支持两种设计方法,即:面向过程与面向对象这两种设计方法,且不需要通过函数封装程序,因此代码长度仅为C语言代码长度的十分之一到五分之一。

  综合以上所谈,总结Python语言的优点如下:

  (1)Python这种解释语言可大大方便编程。解释语言具有先天优势,即:不需要编译时间,可以大大提高工作效率。

  (2)Python有很多非常成熟的库可以利用,开发生态优秀。如:NumPy(存储和处理大型矩阵)、SciPy(高效的数学运算)、pandas(处理数据的函数和方法)、matplotlib(数据操作、聚合和可视化)等。

  (3)Python的运行效率不低。与Python友好的库可以提高程序运行的速度,在团队的有力支撑下,库的效率可比程序员用C语言调试优化一个月的效率还高。

  在本文中,介绍了支持向量机可解决的线性数据分类、近似线性数据分类和非线性数据分类这三类问题,并且通过使用具有编写效率高、语言简洁和可直接使用的第三方支持库种类全面等特点的Python来实现SVM算法,快捷便利地实现数据样本的分类问题,展现了SVM与Python在机器学习方面的优势所在。

  1.4 论文主要研究内容

  本文分析了在信息化飞速发展的大数据背景下,运用Python语言处理数据的优势与可行性,重点讲解了SVM算法的基本原理,和在面临不同数据集的分类问题时所用的具体方法,对此进行了详尽的数学分析和原理阐述。并最终用Python语言实现了多标签的SVM分类训练。

  第二章 支持向量机的原理

  2.1线性可分问题

  对于一个给定的数据样本,支持向量机的基本原理就是要在给定的样本空间中找到一个超平面将不是同一类型类型的数据样本分开。

  如图2.1所示,在如下的二维平面中,将两种不是同一类型的数据分别用图形O和X进行表示,对于线性可分的两类数据,可以用一条直线将两类数据分开。这样的直线就是一个超平面。将这条直线一侧的数据点标记为y=-1 ,另一侧的数据点标记为y=1。  数据在原始空间内不线性可分的问题,可以通过将其投射到高维空间这一办法来解决。其原理是当数据线性不可分时,SVM会优先在低维空间中进行计算,然后使用核函数将原始空间映射到高维空间,达到在高维空间中找到最优超平面的效果,成功地实现在低维空间本身将不能分类的非线性数据分类。

  如图3.2所示,这些数据在二维空间中无法进行线性分类,因此将原始数据投射到三维空间中进行分类。

  然而,若一遇到非线性数据就将其投射到高维空间,那么一个原始二维空间经映射将成为一个五维空间;一个原始三维空间经映射将成为一个19维度空间。新空间的维数呈爆炸式增长,带来了庞大而困难的计算量。并且,在无穷维的情况下,无法进行计算。

  核函数的优势在于,由于在SVM的求解过程中只用到内积计算,而核函数的值恰好等于其在高维空间内的内积值,因此可以大大简化SVM的计算过程。

  此外,与传统算法Logistic回归算法、Decision Tree算法相比,利用核函数进行数据分类时,效果更加完美。在图3.3中的三种分类方式效果对比图可以很直观的体现这一优势。

  如表3.1所示,常用的核函数有多项式核函数、高斯核RBF函数、Sigmoid核函数  在选择核函数时,需要依靠先验领域知识或交叉验证等方法,若没有更多信息,普遍选用高斯核函数。

  3.2松弛变量

  在前文中,已经讨论了线性可分数据和非线性可分数据的处理方式,即当数据为线性可分时,可找到一个超平面将数据直接进行分类;当处理非线性数据时,可以使用核函数将原始数据投射到更高维空间后进行分类。

  然而,还是存在一些特殊情况对于以上两种方法都不适用。如图3.4所示有若干蓝色小球与粉色小球,其中有一个蓝色小球(outlier)M偏向于粉色小球堆。黑色虚线为根据数据计算得到的超平面,此时该超平面严格地将红色小球与蓝色小球进行了分类,然而GAP的值却变得很小。甚至在某些情况下,当蓝色小球M混入粉色小球堆中,SVM无法找到一个合适的超平面将两类小球进行分离。如果将偏离的蓝色小球忽略后进行分类,可以获得图中的GAP更宽的红色超平面

  为了应对这样的由于个别数据点严重偏离大多数数据点所在区域的情况, SVM允许有个别数据点偏离超平面,即某些数据点的函数间隔小于1。

  3.3高斯核函数与松弛变量的综合应用

  综合核函数与松弛变量的使用,可以更好的解决分类问题。如图3-5所示有若干红球与绿球,且个别红色小球混入了绿色小球堆中,而个别绿色小球混入了红色小球中。通过使用高斯核,获得超平面后映射回原空间中,得到曲线将两类小球分离,而通过引入松弛变量,允许有个别小球偏离超平面。

  在已经使用高斯核的基础上,选择不同的C和ξ可以获得不同的分类效果,观察图3.5(a)和图3.5(e)、图3.5(b)和图3.5(f)、图3.5(c)和图3.5(g)、图3.5(d)和图3.5(h)四组图片可知,惩罚因子C越大,意味着对outlier点约重视,越不愿意放弃outlier点;而观察图3.5(a)、图3.5 (d)和图3.5(e)、图3.5(h)两组图片可知,ξ值越大,意味着outlier点的数量和GAP值越小。

  在实际应用中,需要选择合适的核函数、惩罚因子C与松弛变量ξ的值以获得合适的超平面。

  3.4多标签分类(multilabel classification)

  多标签分类可以转换为单标签分类。其中一种方法是将每个多标记实例的所属标记联合起来创建为一个新的标记。 这种方法被称Label-Powerset。由此,多标签分类问题转换为了单标签分类问题。转换后的分类问题可以使用任何分类器进行分类。另一种方法是采用一对多(OAA)策略:训练针对类别i的二元分类器,将类别i训练样本与其他样本分离。在分类过程中,x被分为了多标签类。其中n为类别数。这种方法称为二元相关方法,此方法是单标签一对多策略的扩展。

  3.5 SMO求解对偶问题

  在第三章中得到了SVM的目标函数式(3-6),为了实求解结果同时适用于线性可分与线性不可分问题,首先将目标函数式(3-6)中的

  第四章 SVM分类实例

  4.1 使用Python运行SVM分类实例

  在前文中介绍了SVM分类算法的基本理论。SVM的基本思想为寻找样本空间的超平面并在最大化数据间隔的基础上进行分类。当处理非线性问题时,SVM引入了核函数,将低维数据映射至高维数据后使其变为线性可分后进行分类。考虑到数据样本中可能存在“噪声”,引入了松弛变量,使分类器有一定的容错能力。本章通过使用mnist手写数字数据集在Python上进行SVM模型的训练与测试,体会SVM算法如何解决实际问题。

  Mnist手写数字数据集是机器学习的一个典型数据集,其数据来源于250个不同的人的手写数字,共包含70000张28*28像素的图片。如图4-1所示为一个典型的手写数字,对于人眼而言可以轻易地识别出该数字为“0”——高度比宽度稍长的一个椭圆。然而对于计算机而言很难将人类的这种直观感受用算法表达出来。  机器学习通过大量样本学习认知规律这一方法与人类类似,但其具体地学习认知规律的过程与人类有所不同。对于SVM,解决本问题的思路是首先读取大量带有标签的手写数字,之后寻找出可将不同标签数据进行分类的超平面,即获得了预测函数——可以识别出新的手写数字的规则。此外,随着样本数量的增加,SVM可以学习到更准确地认知规律。然而,当样本数过多时,也可能出现过拟合的情况,即模型过度地拟合了训练数据,而对于测试数据而言,其分类效果却较差。

  图4.2为样本集中的部分图像,由于mnist手写数字数据集原始数据为图像,而SVM无法识别图像,因此首先对数据进行预处理。原始图像为28×28灰度图,其每一个像素为一个0~255的灰度值,0为纯黑,255为纯白。因此将读取灰度图的每一个像素的灰度值,并将其存入一个1×785的一维数组中(第一个元素为标签),则数据就由图像转为了数据,之后将所有训练数据与测试数据分别保存至csv文件中。

  本文使用了将70000张手写数字图中的42000张作为训练集,28000张作为测试集,训练集与测试集的比例为3:2。同时,为了避免过拟合,还加入了交叉验证集,交叉验证集中,测试集占训练集的80%。训练集、测试集数据的读取以及交叉验证集的生成代码如图4.3所示。在SVM中,为了判断训练生成模型的效果,如表4.1所示,根据实际值与准确值是否相符,将结果分为四类:TF、FN、FP和TN,根据这四类结果,引入了三项指标:Precision、Recall和Accuracy,该三项指标的具体计算代码如下所示

  在训练过程中,将惩罚系数C设置为1000,核函数的选择为高斯核(RBF)。选择高斯核时,根据表3.1中常用核函数的高斯核公式,需要设置γ值。γ值设置越小,则分类界面越连续,γ值设置越大,分类界面越分散,可能带来更好的分类效果的同时,也可能会导致过拟合现象地产生,本文设置γ=1×10-10。模型训练的相关代码如下所示

  第五章 总结与展望

  支持向量机算法是一种当下应用非常广泛的算法,SVM不仅可以解决简单的线性可分的数据分类问题,并且通过核函数、对偶性算法、SMO算法等数学工具,可以完成对线性不可分,存在噪音点的数据集,多标签分类等复杂问题的分类求解。这在需要大量图像识别,数据分类的当代社会,是一种非常具有使用价值的算法。SVM算法已经发展了三十多年,理论与应用都十分的成熟,以本文作者的水平很难达到创新与发展,只能通过详尽的数学推导,形象的图像展示,和具体的实例分析为各位读者讲解SVM的基本原理。并且通过谷歌手写数字识别这一经典数据集案例来展现数据集训练的成果。

  在本文中,关于原理的阐述与Python语言SVM算法的具体优势,已经基本阐述完全,然而,基于SVM算法应用十分广泛这一特点,在今后的学习研究中,仍需通过大量不同样本集的实验训练,来更加透彻的领悟SVM算法的有点。并且提高运用Python语言实现SVM算法的熟练程度。希望在日后的学习与研究中,能与本文读者一起交流进步。

毕业论文:http://www.3lunwen.com/jsj/dzjs/5395.html

上一篇:基于Python的支持向量机分类算法研究

下一篇:没有了

     移动版:基于Python随机森林算法分析与研究

本文标签:
最新论文