本节介绍机器学习的基础知识,包括机器学习的定义、常见的机器学习分类、机器学习流程和典型的机器学习算法。
计算机执行任何任务都需要遵循特定的指令,但它无法从过去的数据中主动学习经验,并根据过去的错误进行改进。机器学习领域正是要研究如何通过数据和算法,使得计算机能从大量历史数据中学习规律,从而对新样本做分类或者预测。机器学习在近30多年已发展为一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科,也是人工智能(Artificial Intelligence,AI)的核心领域。机器学习领域主要有三个子研究领域:第一,面向任务研究,即面向解决预定任务集的学习系统的开发和分析(也称为工程方法研究);第二,认知模拟研究,即对人类学习过程和计算机模拟的研究(也称为认知建模方法研究);第三,理论分析,即对可能的学习方法和算法独立应用领域的空间的理论探索。
机器学习的分类方法有很多,主要的一种分类方法是将机器学习分成 监督学习 (Supervised Learning)、 无监督学习 (Unsupervised Learning)、 半监督学习 (Semi-Supervised Learning)和 强化学习 (Reinforcement Learning)四大类别。
(1)监督学习
在监督学习中,训练集要求包括输入和输出,即特征和目标。也可以说是每个训练数据都要有一个明确的标注。训练集中的目标是由人标注的。监督学习是从有标记的训练数据中学习一个模型,然后根据这个模型映射新数据,对未知样本进行预测。常见的监督学习算法包括回归分析(Regression)和统计分类(Classification)等,前者包括线性回归、K最近邻算法、Gradient Boosting和AdaBoost等,后者包括逻辑回归、决策树、随机森林、支持向量机和朴素贝叶斯等。
(2)无监督学习
在监督式学习下,训练集中的数据没有明确的标注。无监督学习本质上是一种统计手段,是在没有标签的数据里可以发现潜在结构的一种训练方式。常见的无监督学习算法包括聚类(Clustering)和关联分析等。
(3)半监督学习
半监督学习是在有标签数据+无标签数据混合成的训练数据中使用的机器学习算法。一般假设,无标签数据比有标签数据多,甚至多得多。常见的算法包括:1)伪标签法:用有标签数据训练一个分类器,然后用这个分类器对无标签数据进行分类,这样就会产生伪标签(Pseudo-Label)或软标签(Soft Label),挑选认为分类正确的无标签样本用来训练分类器;2)自训练+微调:使用无标签数据进行预训练之后再使用有标签数据进行微调(Fine-Tune)。
(4)强化学习
在这种学习模式下,输入数据作为对模型的反馈。不像监督学习,输入数据仅仅是作为一个检查模型对错的方式。在强化学习中,输入数据直接反馈到模型,模型对此须立刻做出调整行为,并评估每一个行动之后所得到的回馈是正向的或负向的。强化学习主要的应用场景包括动态系统,以及机器人控制等,常见算法包括Q-Learning以及时间差学习(Temporal Difference Learning)。
从实际应用问题出发,训练出来一个能够适应某场景的机器学习模型需要两个阶段,包括开发阶段和部署阶段。一般的机器学习的开发阶段需要经过以下几步:收集数据、数据预处理、开发机器学习模型、模型训练、测试及评估机器学习模型;而机器学习的部署阶段包括部署训练好的机器学习模型、处理预测请求、监测模型的预测、管理模型以及模型版本等步骤,如图1-3所示。
● 图1-3 机器学习流程
(1)收集数据
在明确目标任务之后,需要根据具体问题,收集数据集,作为训练数据或测试数据。监督学习每一个数据样本还有对应的数据标签。
(2)数据预处理
先对数据进行一些探索,了解数据的大致结构、数据的统计信息、数据噪声以及数据分布等。在此过程中,为了更好地查看数据情况,可使用数据可视化方法或数据质量评价对数据质量进行评估。然后将原始数据转换成更好的表达问题本质的特征,将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。
(3)模型训练
机器学习可以实现的目标被分为:分类、回归、聚类、降维、异常检测等。前期算法工程师需要通过测试集和训练集,在几种可能的算法中做一些Demo测试,再根据测试的结果选择具体的算法,这样可以规避大范围的训练模型改动带来的损失。根据目标选定模型之后,需要对模型的一些超参数进行调优,这需要对每个模型的参数有所了解,当然也可以使用网格搜索等方法暴力选择最优参数。在训练过程中,机器学习算法会更新一组称为参数或权重的数字。目的是更新模型中的参数,使计算或预测的输出尽可能接近真实的输出。如果输出误差随着每次连续迭代而逐渐减小,可以说该模型已收敛,训练成功。如果误差在迭代之间增大或随机变化,则需要重新评估构建模型时的假设。
(4)模型评估
机器学习算法设计中的重要一环就是模型评估,常用的模型评估方法包括留出法和交叉验证法。留出法(Hold-Out):将数据按照一定的比例进行切分,预留一部分数据作为评估数据集,用于模型评估。交叉验证法(Cross-Validation):将数据集 D 切分为 k 份,每一次随机使用其中的 k -1份数据作为训练数据,剩余的1份数据作为评估数据。这样就可以获得 k 组不同的训练数据集和评估训练集,得到对应评估结果,然后取均值作为最终评估结果。
前面介绍了机器学习的分类和开发流程。机器学习的核心问题是如何从经验数据中学习,从而应用在某一个任务中。
首先考虑监督学习的场景,给定数据集 D ={( x ( i ) , y ( i ) )| i =0,1,…, N },这个数据集包含 N 个数据样本,其中 x ( i ) ∈R D 。在回归任务中,往往 y ( i ) ∈R,而在分类任务中,二分类的 y ( i ) ∈{0,1},多分类的 y ( i ) ∈[ C ]( C 为类别数量),此外,记 X =( x 1 , x 2 ,…, x N )和 Y =( y 1 , y 2 ,…, y N )。希望能够通过某个函数(模型) f θ ( x )来拟合 y ,而机器学习则是通过算法优化损失函数,找到最优的参数 θ * 。
机器学习包含了很多种不同的算法。本节将介绍一些常见的传统机器学习算法,从回归算法(比如线性回归)到分类算法(比如支持向量机和决策树等),再到聚类算法和降维算法(比如K-Means和主成分分析等)。
(1)线性回归算法
线性回归(Linear Regression)就是通过一个线性模型 f ( x )去拟合数据 y 。线性模型是一种比较简单的模型,可以用函数 f ( x )= w T x = w 0 + w 1 x 1 + w 2 x 2 +…+ w D x D 来表达。我们通过平均平方误差(Mean Square Error,MSE)来定义模型预测和真实值之间的距离,即损失函数,则由正规方程(Normal Equation)可以推导得出, w 的最优解 w * =( XX T ) -1 X T Y 。
通常会在损失函数中添加一个正则项来限制模型参数,公式如下所示,这样的损失函数被分别叫作L2和L1损失函数,而基于它们的线性回归又被分别叫作岭回归(Ridge Regression)和Lasso回归(Lasso Regression)。
(2)支持向量机算法
支持向量机(Support Vector Machine, SVM)是一种典型的监督学习算法,对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面。
假设给定数据集 D ={( x ( i ) , t ( i ) )| i =0,1,…, N |},其中 x i ∈R D , t i ∈{-1,+1}。当 t ( i ) =+1时, x 为正例;当 t ( i ) =-1时, x 为负例,且数据集是线性可分的。我们定义一个线性超平面 w T x + b =0,则线性超平面 w T x + b =0关于点( x i , y i )的几何间隔被定义为 γ i =
如图1-4所示,蓝色为2维的超平面,而2维直线可以用方程 w 1 x 1 + w 2 x 2 + b =0表示,也可用法向量 n =( n 1, n 2 )和原点到直线的距离 d 表示: n 1 x 1 + n 2 x 2 = d ,其中 n 2 = 平面上的点到直线的距离则等于点到法向量的投影减去原点到线段的距离(几何间隔考虑到距离的非负性,所以上式通过 y 调整),即:
● 图1-4 支持向量机
支持向量机算法最大化线性超平面与正负样本的最小几何间隔,即 ,而这个距离也叫作支持向量(Support Vector)到线性超平面的几何间隔。那么支持向量机可以表述成最优化问题: ,使得满足约束条件:
如果将约束条件两边同时除以 γ ,那么可以得到:
为了使表达式更加简洁,因为‖ w ‖和 γ i 都是标量,所以令 和 此时,最大化 γ i ,等价于最大化 ,为了方便后续求导形式简便,也等价于最大化 。此时,最优化问题就变成了一个含有不等式约束的凸二次规划问题,即在满足以下约束条件的情况下,最小化‖ w ‖ 2 。
t i ( w T x i + b )-1≥0
可以对其使用拉格朗日乘子法求解,即引入正拉格朗日乘子 a i ≥0,此时,最优化问题可以改写成最小化拉格朗日原始问题(Lagrangian primal form)即:
通过求导等于0,可以得到:
然而,此时问题的解还需要满足著名的Karush-Kuhn-Tucker条件,简称KKT条件,即:
a i ≥0
t i w T x i -1≥0
以及:
a i ( t i w T x i -1)≥0
具体求解过程暂时不在此进行推导。通常可以通过拉格朗日的对偶问题(Lagrangian dual problem)进行推导。
当二次规划问题的变量过多时,对偶问题可以更加高效地求解。对于非线性分类问题,可以通过非线性变换将它转换为某个维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。由于在线性支持向量机学习的对偶问题里,目标函数和分类决策函数只涉及样本点之间的内积,所以通常是通过用核函数替换当中的内积,而不需要显式地指定非线性变换,同时也可以在高维的非线性变化情况下减少计算量。
(3)决策树算法
决策树(Decision Tree)是一种预测模型,主要用于分类任务中,当然它也可以用于回归任务中,本小节主要讨论分类任务。分类决策树模型通过树的结构,非常直观地表示决策过程,是一种可解释性比较强的机器学习模型。决策树是由节点(Node)和边(Edge)组成的有向图,其中节点包括两种,分别是叶节点(Leaf Node)和内部节点(Internal Node)。每个节点表示对象的某个特征或属性,而每个分叉路径则代表一个属性值,而每个叶节点则表示一个类,从根节点到叶节点所经历的路径可以理解为被分类过程。决策树学习的内容主要是如何选取决策特征,常见的算法包括ID3、C4.5和CART等。决策树内部节点可以通过信息增益、信息增益率、基尼系数等进行特征选取。我们主要介绍信息增益的方法。
首先可以看到以下定义。
在信息论中,熵(Entropy)用来描述随机变量的不确定性。如果一个离散随机变量 X 有限多个取值,且其概率分布为 P ( X = x i )= p i ,∀ i =1,2,…, N ,那么这个随机变量的熵 H ( x )定义为
其中,当 p i =0时,定义 p i log p i =0。
条件熵(Conditional Entropy)是用来描述在已知一个随机变量 X 的值的前提下,另一个随机变量 Y 的不确定性。假设随机变量 X 和 Y 的联合概率分布为 P ( X = x i , Y = y i )= p ij ,随机变量 X 的边缘分布为 P ( X = x i )= p i ,那么条件熵 H ( Y|X )被定义为
接下来介绍一下链式法则和贝叶斯法则。假设两个随机变量 X 和 Y 组合的系统的联合熵为 H ( X , Y ),当已知变量 X 的熵 H ( X )时,可以求出条件熵:
H ( Y|X )= H ( X , Y ) -H ( X )
根据贝叶斯法则又可得到:
H ( Y|X )= H ( X|Y ) -H ( X )+ H ( Y )
信息增益表示当知晓一个随机变量的条件下,另一个随机变量的不确定性减少的程度。给定一个数据集 D 的某个特征 A 的信息增益 g ( D , A )被定义为集合 D 的熵 H ( D )与特征 A 给定条件下集合 D 的条件熵 H ( D A )的差值,即:
g ( D , A )= H ( D ) -H ( D|A )
假设数据集 D 包含 D 个样本, K 个类别,记 C k ( k =1,2,…, K )为属于类 k 的样本集合,则 。假设特征 A 有 n 个可能取值{ a 1 , a 2 ,…, a n },则数据集 D 可以被划分成 n 个子集 D 1 , D 2 ,…, D n ,| D i |为 D i 的样本数量,其中子集 D i 中属于类 C k 的集合为 D ik 。通过以下三个步骤,可以计算特征 A 的信息增益 g ( D , A )。
1)计算数据集 D 的熵 H ( D )。
2)计算特征 A 对数据集 D 的条件熵 H ( D A )。
3)计算特征 A 的信息增益 g ( D , A )。
g ( D , A )= H ( D ) -H ( D A )
(4)K均值算法
K均值(K-Means)算法是常用的一种通过迭代求解的聚类分析算法。
假设给定一个数据集 D ={ x 1 , x 2 ,…, x n },其中 x i ∈R d ,K均值算法的目的是将 n 个观测值分成 k 个子集 S ={ S 1 , S 2 ,…, S k },其中 k ≤ n ,使得聚类内的平方和(With-in Cluster sum of squares, WCSS)最大化: ,其中 μ Si 为 S i 的均值。而算法的具体步骤如下。
1)首先随机选取K个对象作为初始的种子聚类中心。
2)然后计算每个数据与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。
3)一旦全部对象被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。
4)回到步骤2)不断重复该过程,直到满足某个终止条件。
终止条件可以是以下任何一个:没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。值得注意的是,K均值算法是基于欧几里得空间距离的。选取聚类中心的方法,除了可以根据均值(Mean),还可以选择中位数(Median)、众数(Mode)等。
(5)主成分分析算法
主成分分析(Principal Component Analysis,PCA)是一种使用最广泛的数据降维算法。PCA的主要思想是将 N 维特征映射到 K 维上, K 维是全新的正交特征,也称为主成分,是在原有 N 维特征的基础上重新构造出来的 K 维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选择是与第一个坐标轴正交的平面中方差最大的,第三个轴是与第1、2个轴正交的平面中方差最大的,如图1-5所示。依此类推,可以得到 n 个这样的坐标轴。通过这种方式获得新的坐标轴,我们发现,大部分方差都包含在前面 k 个坐标轴中,后面的坐标轴所含的方差几乎为0。
● 图1-5 主成分分析