Python+Tensorflow机器学习实战
上QQ阅读APP看书,第一时间看更新

1.2 机器学习

1.2.1 机器学习的发展

为了让计算机能够实现类似人类的智能,在计算机的实际实现上出现了两种完全不同的方向:一种是采用传统的编程技术,使系统呈现智能的效果;另一种是采用计算机训练学习的方式来实现智能的效果。一般来说,现在我们使用的机器学习都是通过算法来解析数据、学习数据的,然后据此对真实世界中的事件做出决策和预测。

“机器学习”这一术语由IBM的科学家亚瑟·塞缪尔提出。他在1952年开发了一个跳棋程序,该程序能够观察当前位置,并学习一个隐含的模型,从而为后续动作提供更好的指导,并且随着该程序运行时间的增加,可以实现越来越可靠的后续指导。他针对这种计算机的实现能力提出了“机器学习”。

在机器学习领域,计算机科学家不断探索,基于不同的理论创建出不同的机器学习模型。从发展历程来说,大致经历了三个阶段:符号主义时代、概率论时代以及联结主义时代。

符号主义时代(1980年左右)。以知识工程为主要理论依据,使用服务器或大型机进行架构运算,通过符号、规则和逻辑来表征知识和进行逻辑推理,常用的算法有规则和决策树,实用性有限。

概率论时代(1990—2000年)。以概率论为主要理论依据,使用小型服务器集群进行架构运算,通过获取发生的可能性来进行概率推理,常用的算法有朴素贝叶斯或马尔可夫算法,具有可扩展的比较或对比功能,对许多任务都表现得足够好。

联结主义时代(2010年左右)。以神经科学和概率为主要理论依据,使用云计算架构,通过使用概率矩阵和加权神经元来动态地识别和归纳模式,常用的算法有神经网络,能够让计算机“看懂图像”“听懂语言”,甚至能够分析人类在语言背后表达的情绪。

不同算法在不同应用场景下有着不同的表现,每一个阶段仅仅取得了某些领域的突破性进展,并没有完全颠覆前一阶段的成果。相信在后续的发展中,将会把符号规则理论、概率论、神经科学和进化论等理论相融合,并演变出不同的算法,通过多种学习方式获得知识或经验,推动机器学习继续发展。

1.2.2 机器学习的分类

机器学习是计算机进行数据处理,找到数据间映射关系的过程。在进行数据处理分析时,对于输入的数据,有的是经过人工来定义数据标签的,方法是先找到数据的特征与其标签的映射关系,再凭借这种映射关系,对未进行标签定义的数据进行标签定义。输入的初始数据也有一些是没有经过人工定义数据标签的,只是单纯依靠数据处理分析来找到数据之间的标签映射关系。

可以按照输入的数据本身是否已被标定特定的标签将机器学习区分为有监督学习、无监督学习以及半监督学习三类。

1.有监督学习

有监督学习(Supervised Learning)就是样本数据集中的数据,包括样本数据以及样本数据的标签。

进行学习的目的就是找到样本数据与样本数据标签的映射关系。通过对样本数据的不断学习、不断修正学习中的偏差,使得找到的映射关系更准确,从而不断提高学习的准确率。当学习完成后,再给予新的未知数据,能够依据学习的映射关系计算出相对正确的结果。由于样本数据中既包括数据也包括标签,因此训练的效果往往都不错。

有监督学习主要用于解决两大类问题:回归问题(Regression Problem)和分类问题(Classification Problem)。

回归问题就是通过对现有数据的分析,找到映射关系,对以后的事情进行预测的情况。比如,我们想预测未来房价会是多少。我们获取以前的房价与时间的数据,可以将这些数据看作多维度坐标系中的坐标点,通过回归分析,建立数据的关系模型,求出一个最符合这些已知数据集的解析函数,然后通过这个解析函数来预估未来的房价。对于解决回归问题,主要有线性回归(Linear Regression)、决策树(Decision Tree)、随机森林(Random Forest)、梯度提升决策树(Gradient Boosting Tree)、神经网络(Neural Network)等算法可供使用。

分类问题就是通过对现有数据的分析,找到数据间的联系与区别,对数据进行分类。比如,判断某地房价的“涨”与“跌”的问题。我们获取以前的房价、地区、户型和时间等数据,通过这些数据建立数据与“涨”和“跌”的关系模型。当输入新的值时,能够根据关系模型判断房价是“涨”还是“跌”了。对于解决分类问题,主要有逻辑回归(Logistics Regression)、决策树(Decision Tree)、随机森林(Random Forest)、梯度提升决策树(Gradient Boosting Tree)、核函数支持向量机(Kernel SVM)、朴素贝叶斯(Naive Bayes)、SVM线性分类(Linear SVM)、神经网络(Neural Network)等算法可供使用。

2.无监督学习

无监督学习(Unsupervised Learning)就是在样本数据中只有数据,而没有对数据进行标记。无监督学习的目的就是让计算机对这些原始数据进行分析,让计算机自己去学习、找到数据之间的某种关系。

无监督学习与有监督学习的明显区别就是在样本数据中只有数据,没有标记。由于没有对数据进行标记,因此学习的结果也难以验证是否正确,也难以对学习的模型进行正确率的判断。对于无监督学习的这种特点,学习的思路和目的主要有两类:聚类(Clustering)和强化学习(Reinforcement Learning,RL)。

聚类就是对于未标记的数据,在训练时根据数据本身的数据特征进行训练,呈现出数据集聚的形式,每一个集聚群中的数据,彼此都有相似的性质,从而形成分组。比如我们使用的今日头条,它每天会收集大量的新闻,然后把它们全部聚类,就会自动分成娱乐、科技和政治等几十个不同的组,每个组内的新闻都具有相似的内容结构。

强化学习是游戏中常用的一种学习方式,是指在学习中增加一种延迟奖赏机制。通过学习过程中的延迟奖赏激励函数,可以让机器学习到当前状态下,执行哪一种操作使得最终的奖赏最多,从而让机器学习获得一种类似于决策的能力,比如AlphaGo也使用了这种强化学习方式。

用于无监督学习的经典算法有聚类算法、EM算法和深度学习算法等。

3.半监督学习

半监督学习(Semi-Supervised Learning)是介于有监督学习和无监督学习之间的学习。一般来说,在半监督学习输入的数据样本中,存在一部分进行了标记的数据,但是大量存在的是没有进行标记的数据。

为了利用未标记的样本,必须先对未标记样本揭示的数据分布信息与类别进行假设,最常见的两种假设方式是聚类假设(Cluster Assumption)和流形假设(Maniford Assumption)。

对于聚类假设,是假设数据存在簇结构,同一个簇的样本属于同一个类别。对标记数据和未标记数据进行聚类,如果待预测样本与标记样本聚在一起,则认为待预测样本属于标记样本类。

对于流行假设,是假设数据分布在一种流行结构上,邻近的样本拥有相似的输出值。邻近的程度常用相似程度进行刻画。流行假设对输出值没有限制,相对于聚类假设而言,它的适用范围更广,可用于更多类型的学习任务。

1.2.3 机器学习的经典算法

随着机器学习的不断发展,出现了许多经典算法,这些算法为我们解决实际问题提供了强大的支持。

1.线性模型

线性模型就是使用简单的公式通过一组数据点来查找最优拟合线。然后,通过已知的变量方程,求出需要预测的变量。对于不同形式的线性模型算法,主要包括线性回归(Linear Regression)和逻辑回归(Logistic Regression)。

线性回归从二维几何平面的角度可以理解为,在平面中存在已知的数据点,通过学习处理,找到一条线能够建立这些点之间的关系的模型。线性回归用于解决回归问题,是最简单的线性模型,易于理解。同时,由于模型太简单而不能反映变量之间复杂的关系,因此容易出现过拟合的情形。

逻辑回归是给定样本属于类别“1”和类别“-1”的概率,用于解决分类问题,与线性回归的特点一样,易于理解但无法反映变量间的复杂关系,易出现过拟合的情形。

2.树型模型

树型模型用于探索数据集中数据的特性,并且能够对数据按照数据特征进行分类处理,可以用于解决分类和回归问题。树型模型高度精确、稳定且易于解释,可以映射非线性关系以求解问题,主要包括决策树(Decision Tree)、随机森林(Random Forest)和梯度提升决策树(Gradient Boosting Tree)。

决策树是使用分支方法来显示决策的每个可能结果的图,它对所有的可能性进行梳理。这种算法易于理解和实现,但是由于决策树有时太简单,无法处理复杂的数据,因此一般不会单独使用。

随机森林是许多决策树的平均,每个决策树都用数据的随机样本训练。森林中每个独立的树都比完整的决策树弱,但是通过将它们结合在一起,可以通过多样性获得更高的整体表现。该算法非常容易构建并且表现往往良好,但是相比于其他算法输出预测可能较慢。

梯度提升决策树和随机森林类似,都是由弱决策树构成的,但最大的区别在于:梯度提升决策树中,树是一个接一个被相继训练的,每个随后的树主要用被先前树错误识别的数据进行训练。这使得梯度提升更少地集中于容易预测的情况并更多地集中于困难的情况。该算法训练速度快且表现非常好,但是训练数据即使出现小的变化,也会在模型中产生彻底的改变,因此可能会产生不可解释的结果。

3.支持向量机

支持向量机(SVM)基于统计学理论而提出,是机器学习中一种大放光彩的经典算法。

支持向量机算法通过给予严格的优化条件获得分类界线,并且通过与高斯核等核函数的结合,通过非线性映射,把样本空间映射到高维乃至无穷维的特征空间,使得原来样本空间中非线性可分的问题转变为特征空间中线性可分的问题。它几乎不增加计算的复杂性,而且在某种程度上避免了“维数灾难”,训练较为简单,是一种广泛应用的机器学习方式。

4.人工+神经网络

人工+神经网络算法起步较早,但是发展坎坷。

在20世纪20年代就已经提出了人工神经网络模型以及关键的反向传播算法。但是由于受当时计算机运算能力的限制,难以在多层神经网络中进行训练,通常都是只有一层隐层节点的浅层模型。这种模型的神经网络算法比较容易出现过训练现象,而且训练速度比较慢。在层次比较少的情况下,训练效果往往不如其他算法。

在2006年,Hinton提出了深度学习算法,增加了神经网络的层数和一些处理技巧。在丰富的训练数据以及强劲的计算机运行能力的帮助下,神经网络的能力大大提高。

目前,深度学习模型在目标识别、语音识别、自然语言处理等领域取得了突飞猛进的成果,是目前最热门的机器学习方法,也是本书讲解的主要内容。但是也有使用前提,一是深度学习模型需要大量的训练数据,才能展现出神奇的效果;二是深度学习对计算能力要求更高。在有些领域采用传统的、简单的机器学习方法可以很好地解决问题,就没必要非得使用复杂的深度学习方法。

1.2.4 机器学习入门

对某个领域进行学习的第一步就是要尽快了解全貌以搭建出整体的知识体系,然后在实践中不断提升对该领域的认识。对于机器学习领域,整体的知识体系如下。

1.数学知识

机器学习的目标是通过现有数据构建和训练模型,用于数据的分析与预测。计算机能够做的只有计算,而如何将训练过程抽象为数学函数就是需要我们掌握的能力。在现有的经典算法中涉及概率统计、矩阵运算、微积分导数等数学知识。对于这些知识学过最好,没有学过也没关系,本书会讲解在实际应用中所需要的原理和结论,其中会涉及必要的公式推导证明。

2.编程语言

Python是一种面向对象的解释型高级编程语言,众多的机器学习框架都支持Python,因此它成了机器学习的首选语言。本书也将使用Python作为实现语言进行讲解,希望读者已经掌握了Python语言。

3.经典机器学习理论和基本算法

经典的机器学习算法包括线性回归、逻辑回归、SVM支持向量机、神经网络算法等,以及通过各种基本算法处理数据时存在的正则化需求、过拟合现象等基本的算法特性和适用环境。本书将对这些基本算法进行详解并通过实例来说明这些算法的使用。

4.动手实践机器学习

掌握了机器学习的基础知识后,就可以动手实践机器学习模型。首先需要选择一个开源的机器学习框架。在选择机器学习框架方面的主要考虑因素就是哪个框架的使用范围广、使用人数多。目前,TensorFlow由于由谷歌进行开源推广且有着大量的开发者群体,更新和发布速度非常快,是非常不错的选择。