1.1 机器学习
1.1.1 概述
机器学习简单地讲就是让机器模拟人类的学习过程,来获取新的知识或技能,并通过自身的学习完成指定的工作或任务,目标是让机器能像人一样具有学习能力。
机器学习的本质是样本空间的搜索和模型的泛化能力。目前,机器学习研究的主要内容有3类,分别是模式识别(Pattern Recognition)、回归分析(Regression Analysis)和概率密度估计(Probability Density Estimation)。模式识别又称为模式分类,是利用计算机对物理对象进行分类的过程,目的是在错误概率最小的情况下,尽可能地使结果与客观物体相一致。显然,模式识别的方法离不开机器学习。回归分析是研究两个或两个以上的变量和自变量之间的相互依赖关系,是数据分析的重要方法之一。概率密度估计是机器学习挖掘数据规律的重要方法。
机器学习与统计学习、数据挖掘、计算机视觉、大数据和人工智能等学科有着密不可分的联系。人工智能的发展离不开机器学习的支撑,机器学习逐渐成为人工智能研究的核心之一。大数据的核心是利用数据的价值,机器学习是利用数据挖掘价值的关键技术,数据量的增加有利于提升机器学习算法的精度,大数据背景下的机器学习算法也迫切需要大数据处理技术。大数据与机器学习两者是互相促进、相互依存的关系。
1.1.2 评价准则
评价指标是机器学习非常重要的一个环节。机器学习的任务不同,评价指标可能就不同。同一种机器学习算法针对不同的应用,可以采用不同的评价指标,每个指标的侧重点不一样。下面介绍常用的机器学习评价指标。
1.准确率
样本分类时,被正确分类的样本数与样本总数之比称为准确率(Accuracy)。与准确率对应的是错误率,错误率是错分样本数与总样本数之比。
显然,准确率并没有反映出不同类别错分样本的情况。例如:对于一个二类分类问题,准确率并不能反映出第一类和第二类分别对应的错分样本的个数。但是,在实际应用中,因为不同类别下错分样本的代价或成本不同,往往需要知道不同类别错分样本的情况。例如:在医学影像分类过程中,未患有乳腺癌被错分类为患有乳腺癌,与患有乳腺癌被错分类为未患有乳腺癌的重要性显然是不一样的。另外,数据分布不平衡时,样本占大多数的类主导了准确率的计算等情况,这就需要求出不同类别的准确率。
2.召回率
召回率(Precision-Recall)指分类正确的正样本个数占所有的正样本个数的比例。它表示的是数据集中的正样本有多少被预测正确。
3.ROC曲线
ROC(Receiver Operating Characteristic)曲线是分类器的一种性能指标,可以实现不同分类器性能比较。不同的分类器比较时,画出每个分类器的ROC曲线,将曲线下方面积作为判断模型好坏的指标。ROC曲线的纵轴是“真正例率”(True Positive Rate,TPR),横轴是“假正例率”(False Positive Rate,FPR)。ROC曲线下方面积(The Area Under The ROC Curve,AUC)是指ROC曲线与x轴、点(1,0)和点(1,1)围绕的面积。ROC曲线如图1-1所示。显然,0≤AUC≤1。假设阈值以上是阳性,以下是阴性,若随机抽取一个阳性样本和一个阴性样本,分类器正确判断阳性样本的值高于阴性样本的概率。在图1-1示例中,有3类分类器,AUC值分为0.80、0.78和0.80,AUC值越大的分类器正确率越高。
图1-1 ROC曲线
4.交叉验证
交叉验证(Cross-Validation)的基本思想是将数据分成训练集和测试集。在训练集上训练模型,然后利用测试集模拟实际的数据,对训练模型进行调整或评价,最后选择在验证数据上表现最好的模型。
交叉验证法的优点是可以在一定程度上减小过拟合,还可以从有限的数据中获取尽可能多的有效信息。常用的交叉验证的方法如下。
(1)K折交叉验证
K折交叉验证的基本思想:将数据随机地划分为K等份,将其中的K-1份作为训练集,剩余的1份作为测试集,计算K组测试结果的平均值作为模型精度的估计,并作为当前K折交叉验证下模型的性能指标。
K折交叉验证实现了数据的重复利用。一般情况下,K的取值为 10。针对不同的应用场景,可以根据实际情况确定K值,数据量或样本数较大时,K的取值可以大于10。 数据量或样本数较小时,K的取值可以小于10。
(2)留一交叉验证
留一交叉验证(Leave One Out Cross Validation)的基本思想:假设有N个样本,将每一个样本作为测试样本,其他N-1个样本作为训练样本,得到N个分类器和N个测试结果。用这N个结果的平均值来衡量模型的性能。留一交叉验证是K折交叉验证的特例。
5.过拟合与欠拟合问题
机器学习过程中,模型对未知数据的预测能力称为泛化能力(Generalization Ability),是评估算法性能的重要评价指标(Evaluation Metrics)。泛化指的是训练模型对未知样本的适应能力。优秀的机器学习模型其泛化能力强。
过拟合(Over-fitting)是由于训练模型中涉及的参数过多,或参加训练的数据量太小等原因,导致了微小的数据扰动都会产生较大的变化或影响,造成了模型对已知数据预测精度很高,而对未知数据预测精度较低的现象,即测试样本输出和期望的值相差较大,也称为泛化误差较大。
通常情况下,解决过拟合问题的方法有以下两种。
(1)利用正则化来控制模型的复杂度,改善或减少过度拟合的问题。
(2)根据实际问题增加足够的训练数据。
欠拟合(Under-fitting)是模型在训练和预测时,其准确率都较低的现象。产生的原因可能是模型过于简单,没有充分地拟合所有的数据。解决欠拟合问题的方法是优化和改进模型,或采用其他的机器学习算法。
1.1.3 分类
根据机器学习算法的学习方式,机器学习分为以下3种。
1.有监督学习
有监督学习(Supervised Learning)是利用一组已知类别的样本调整分类器的参数,使其达到所要求性能的学习过程,也称为有老师的学习。有监督学习的过程是:首先利用有标号的样本进行训练,构建相应的学习模型。然后,再利用这个模型对未知样本数据进行分类和预测。这个学习过程与人类认识事物的过程非常相似。常用有监督学习的算法有:贝叶斯分类、决策树和支持向量机等。
2.无监督学习
无监督学习(Unsupervised Learning)是对无标号样本的学习,以发现训练样本集中的结构性知识的学习过程,也称为无老师的学习。无监督学习事先并不需要知道样本的类别,而是通过某种方法,按照相似度的大小进行分类的过程。它与监督学习的不同之处在于,事先并没有任何训练样本,而是直接对数据进行建模。常用无监督学习的算法有:聚类算法和期望最大化算法。
3.半监督学习
半监督学习(Semi-Supervised Learning)是有监督学习和无监督学习相结合的学习,是利用有类标号的数据和无类标号的数据进行学习的过程。其特点是利用少量有标号样本和大量无标号样本进行机器学习。在数据采集过程中,采集海量的无标号数据相对容易,而采集海量的有标号样本则相对困难,因为对无标号样本的标记工作可能会耗费大量的人力、物力和财力。例如,利用计算机辅助医学图像分析和判读的过程中,可以从医院获得海量的医学图像作为训练数据,但如果要求把这些海量图像中的病灶都标注出来,则是不现实的。现实世界中通常存在大量的未标注样本,但有标记样本则比较少,因此半监督学习的研究是非常重要的。
此外,根据算法的功能和形式可把机器学习算法分为:决策树学习、增量学习、强化学习、回归学习、关联规则学习、进化学习、神经网络学习、主动学习和集成学习等。
1.1.4 常用工具
1.WEKA
WEKA 是一款常用的、开源的机器学习和数据挖掘工具,主要功能有数据预处理、分类、回归和关联规则等。WEKA 内集成了决策树和贝叶斯分类等众多机器学习算法,是数据分析和挖掘的技术人员常用的工具之一。
2.Python语言
Python是一种面向对象的编程语言,由荷兰人吉多·范罗苏姆(Guido van Rossum)发明,最早的公开发行版诞生于1991年。Python提供了大量的基础代码库,极大地方便了用户进行程序编写。Python 语言在数据挖掘和分析、机器学习和数据可视化等方面发挥了巨大的作用。目前,Python 是最热门的人工智能和机器学习的编程语言。
3.Matlab
Matlab是美国MathWorks公司出品的一款商用软件,是科研工作者、工程师和大学生必备的数据分析工具之一,主要用于科学计算,如数值计算、数据分析、数据可视化、数字图像处理和数字信号处理等。
4.R语言
R语言是一种为统计计算和图形显示而设计的语言环境,是贝尔实验室开发的S语言的一种实现。它提供了有弹性的、互动的环境分析,也提供了若干统计程序包,以及一系列统计和图形显示工具,用户只需根据统计模型,指定相应的数据库及相关的参数,便可灵活机动地进行数据分析等工作。目前,R 语言在数据挖掘和分析、机器学习和数据可视化方面发挥了巨大的作用。
5.深度学习框架
深度学习的发展离不开高性能的框架与硬件的支持。随着半导体工艺和微电子等技术的飞速发展,支持深度学习的硬件环境也在飞速发展,出现了以多核CPU(Central Processing Unit)、高性能图形处理器GPU(Graphics Processing Unit)、APU(Accelerated Processing Unit)等处理器为代表的高性能并行计算系统,为深度学习分析和挖掘奠定了硬件基础。目前,深度学习大都使用GPU在各种框架上进行模型训练,深层神经网络在GPU上运算的速度要比CPU快一个数量级。
随着深度学习研究和应用的不断深入,各种开源的深度学习框架不断涌现,目前常用的深度学习框架有Caffe、TensorFlow、Theano、Torch和CNTK等。下面简单介绍几种常用的深度学习框架。
(1)Caffe
Caffe是一种被广泛使用的开源深度学习框架,由加州大学伯克利分校的贾扬清开发。Caffe是首个主流的工业级深度学习工具,运行稳定,代码质量高,适用对稳定性要求高的生产环境。目前在计算机视觉领域Caffe依然是最流行的工具包,并且有很多扩展。Caffe最开始设计时的目标只针对图像,没有考虑文本、语音等数据,因此对卷积神经网络的支持非常好,但对时间序列RNN、LSTM等的支持不是特别充分。许多研究人员采用Caffe做人脸识别、位置检测和目标追踪等,很多深度学习的论文也都是使用Caffe来实现其模型的。
(2)TensorFlow
Google公司开源的TensorFlow框架是相对高阶的机器学习库,用户可以方便地用它设计各种神经网络结构,是理想的深度学习开发平台。TensorFlow 使用了向量运算的符号图方法,使指定新网络变得比较容易,但是不支持双向RNN和3D卷积。TensorFlow移植性高,一份代码几乎不经过修改就可轻松地部署到有任意数量CPU或GPU的PC、服务器或者移动设备上。TensorFlow框架针对生产环境高度优化,产品级的高质量代码和设计可以保证其在生产环境中稳定运行。
(3)Theano
Theano由Lab团队开发并维护,是一个高性能的符号计算及深度学习库。Theano因其出现时间早,一度被认为是深度学习研究和应用的重要标准之一。Theano 专门为处理大规模神经网络训练的计算而设计,其核心是一个数学表达式的编译器,可以链接各种可以加速的库,将用户定义的各种计算编译为高效的底层代码。
(4)Torch
Torch是一个高效的科学计算库,含有大量的机器学习、计算机视觉、信号处理和网络的库算法。Torch对卷积网络的支持非常好,通过很多非官方的扩展支持大量的RNN模型。
(5)CNTK
CNTK 是由微软公司推出的开源深度学习工具包,性能优于 Caffe、Theano、TensoFlow,支持CPU和GPU两种模式。
各种框架的底层语言和操作语言的比较,详见表1-1所示。
表1-1 各种深度学习框架的比较
续表