机器学习的核心是“使用算法解析数据,从中学习,然后对世界上的某件事情做出决定或预测”。这意味着,与其显式地编写程序来执行某些任务,不如教计算机如何开发一个算法来完成任务。机器学习主要可以分为3个类型:监督学习、非监督学习和强化学习。我们在这里仅介绍监督学习和非监督学习,强化学习的内容请参考第9章。
监督学习要求数据必须被标记过,计算机可以通过使用特定的模式来识别被标记的样本。监督学习可以分为两种类型:分类和回归。分类,即机器被训练来完成对一组数据进行特定的分类。生活中最常见的一种分类问题是垃圾邮件的分类。机器首先分析以前被用户标记为垃圾邮件的类型、特征等,然后将新邮件与这些曾被标记为垃圾邮件的邮件进行对比,根据设定的匹配度来做决定。假设将匹配度的阈值设为90%,即表示匹配度大于或等于90%的邮件被分类为垃圾邮件,而匹配度小于90%的邮件被认为是正常邮件。回归,即机器根据先前(标记)的数据来预测未来。天气预测是最好的回归例子,根据气象事件的历史数据(平均气温、湿度和降水量)和当前天气的数据,对未来的天气进行预测。
无监督学习,其数据是不需要被标记的,在我们的现实世界中的数据大多数也都是不带标签的,标记数据会浪费大量的人力物力,因此这类算法是非常有用的。无监督学习主要分为聚类和降维。聚类是指,根据数据的特征和行为对象进行分组,这里说的分组与分类算法是不同的,分类算法的组是人为规定的,而聚类算法中的组,则是由计算机自定义的,不是人为规定。聚类,将一组数据划分成不同的子组,如年龄、性别这样的特性,然后再将其应用到特定问题中。降维,则是通过找到数据间的共同点,来减少数据集的变量,减少冗余的发生。降维也是后文将会提到的特征工程中的一个重要方面。
下面我们将逐一介绍机器学习中一些经典问题,分别是分类问题、回归问题和聚类问题。
在机器学习中,最常见的问题就是分类问题了。所谓分类问题,就是对输入数据,进行分类。通常,将能够完成分类任务的算法,称为分类器(Classifier)。即找到一个函数判断输入数据所属的类别,可以是二分类问题(是或不是),也可以是多分类问题(在多个类别中判断输入数据具体属于哪一个类别)。分类问题的输出值是离散的,其输出结果是用来指定其属于哪个类别。
分类问题的求解过程可以分为以下3个步骤:
1)确定一个模型f(x),输入样本数据,最后输出其类别;
2)定义损失函数L(f);
3)找出使损失函数最小的那个最优函数。
通过这种方法,可以直接计算出寻找到的最优函数p(c|x),即样本x属于每个类别c的概率,这种方法被称为判别式(Discrimination)方法,因为其可以直接对样本所属类别进行判断,相应的模型也可以称为判别式模型。如果借助概率论的知识,分析每一类的特征,这样就可以将二分类问题应用到多分类问题中。以最简单的二分类为例,建模p(c|x),使用条件概率,进行如下转换:
基于贝叶斯定理,p(c|x)被写为:
对于给定的样本数据x,p(x)与类别无关,因此只需要考虑p(c|x)和p(c),这两个分布正好是每一类样本的特征,因此只对这两个分布进行研究。
p(c)是类先验概率,即在未知其他条件下对事件发生概率的表示,这个值是通过以往经验和分析(历史数据)得到的结果。根据大数定律,当训练样本中包含充足的独立同分布样本时,p(c)可以通过各类样本的出现频率进行估计;与类先验概率相对应的是类后验(Posterior)概率p(c|x),即需要建模的目标,表示在已知条件下事件发生的概率。
p(x|x)是类条件(class-conditional)概率,即在某个特定类别下,样本x的发生概率。它是涉及关于样本x所有特征的联合概率,如果x有d个特征且取值均为二值,那么样本空间大小将是2d,现实中训练样本的大小往往远小于这个值,因此通过频率估算p(x|c)显然是不可行的,因为“未被观测到”不等于“出现概率为0”。那么p(x|c)就需要应用其他方法进行求解了,如高斯分布、极大似然估计、朴素贝叶斯分类等。
1.高斯分布
通常,假定类条件概率p(x|c)符合某种确定的概率分布,训练样本都是从这个分布中随机采样得到的,“未被采样到的点”也对应一个发生概率。某种确定的概率分布通常被假设为高斯分布(Gaussian Distribution),现在就需要根据训练样本确定高斯分布的参数。多元高斯分布的概率密度函数如下:
其中k是x的维数,μ是均值向量,∑是协方差矩阵,μ决定了分布的最高点,∑决定了分布的形状。
2.极大似然估计
任何一个高斯分布都可以采样出训练样本,但是分布的不同,采样出训练样本的可能性是不一样的,对给定μ和∑采样出训练样本的可能性可以写作:
D c 表示训练样本中属于类别c的样本数目。最大化上面的似然函数,找出的μ和∑就是最佳参数。
该方法被称为最大似然估计(Maximum Likelihood Estimation,MLE),参数μ和∑的最大似然估计为:
也就是说,最佳μ * 是样本均值,协方差矩阵是(x-μ * )(x-μ * ) T 的均值。现在已经计算出每个类别的p(c)和p(x|c),这样就可以选择p(x|c)p(c)较大的那个类别作为x的类别。
3.朴素贝叶斯分类
如果假设样本的所有特征值都是相互独立的,那么p(x|c)可以写成:
其中,n是特征数目,x i 是第i个属性。同样可以假设每一维特征上的概率分布仍然服从高斯分布,此时的高斯分布是一个一维高斯分布,∑对应一个实值,组成协方差矩阵也只在对角线位置有值,进一步减少了参数数目,得到了更简单的模型。这样的模型被称作朴素贝叶斯分类器(Naive Bayes classifier,NB)。最后,对于样本分布不一定要选择高斯分布,例如如果是二值分布,可以假设符合伯努利分布,具体应用中要根据样本特点具体而定。
回归(Regression)模型是指机器学习方法学到的函数的输出是连续实数值,它主要适用于预测问题,常见模型包括基础的线性回归模型和多项式回归模型。
线性回归
按照机器学习建模的3个步骤,首先需要确定选用的模型,基于问题我们很容易知道此处应使用线性回归(Linear Regression)模型,然后将其形式化表达:
其中,x 1 ,x 2 ,x 3 ,x n 是样本数据的n维特征描述,每一组w和b能确定一个不一样的h(x),w和b的所有取值组合就构成了可选函数集合,而回归任务要做的就是如何从这个函数集合中选出“最好”的那个函数。
对于训练数据集D描述如下:
其中, 是样本的n维特征向量表示,y (i) ∈R是样本标记。线性回归的目标是学到一个线性函数以尽可能准确地预测实值输出标记。
因此需要确定一个衡量标准,来度量一个函数的好坏,这就需要损失函数(Loss Function)。根据线性回归的目标,只需要度量h(x)与y之间的差距,均方误差(Mean Square Error,MSE)是回归任务中最常用的损失函数。
常见的聚类问题的算法当属k-means算法了,k-means算法的核心思想是簇识别。假定有一些数据,把相似数据归到一起,簇识别会告诉我们这些簇到底是什么。簇的个数是用户给定的,每一个簇都有一个“心脏”——聚类中心,也叫质心(centroid)。聚类与分类的最大不同是,分类的目标事先已知,而聚类则不知道分类标签是什么,只能根据相似度来给数据贴上不同的标签。相似度的度量最常用的是欧氏距离。k-means算法的基本流程如下:
1)给定输入训练数据:
2)随机选择初始的k个聚类中心:
3)对每个样本数据,将其类别标号设为距离其最近的聚类中心的标号:
4)将每个聚类中心的值更新为该类别所有样本的平均值:
5)重复第3步与第4步,直到算法收敛为止,此时的聚类中心将不再移动。
k-means算法的优化目标函数表示如下:
由于这个目标函数不是凸函数,因此不能保证算法会收敛到一个全局最优值,只能保证收敛到一个局部最优值。解决这个问题有两种方法:一是随机初始化多次,以最优的聚类结果为最终结果;二是二分k-means算法。