模式分类(pattern classification)和机器学习(machine learning)是非常热的话题,几乎在所有的现代应用程序中都得到了应用:例如邮局中的光学字符识别(OCR),电子邮件过滤,超市条形码扫描,等等。
在这篇文章中,我会简要描述一个典型的监督学习任务的主要概念,这些概念将作为将来的文章和实现各种学习算法的基础。
机器学习和模式分类
预测建模是建立一个能够进行预测的模型的通用概念。通常情况下,这样的模型包括一个机器学习算法,以便从训练数据集中学习某些属性做出这些预测。
预测建模可以进一步分成两个子集:回归和模式分类。回归模型基于变量和趋势之间的关系的分析,以便做出关于连续变量的预测,如天气预报的最高温度的预测。
与回归模型不同,模式分类的任务是分配离散的类标签到特定的observation作为预测的结果。回到上面的例子:在天气预报中的模式分类任务可能是一个晴天、雨天或雪天的预测。
抛开所有的可能性,本文的重点将放在“模式分类”,分配预先定义的类标签到特定实例将它们分成不同的类别的一般方法。“实例”是“observation”或“样本”的同义词,描述由一个或多个特征(或称为“属性”)组成的“对象”。
监督学习、无监督学习和强化学习
模式分类任务可被分成两个主要的子类别:监督学习和无监督学习。在监督学习中,用于构建分类模型的数据的类标签是已知的。例如,一个垃圾邮件过滤的数据集,它里面将包含垃圾邮件以及“火腿”(=不是垃圾邮件)消息。在有监督的学习问题中,我们已经知道了训练集中的邮件要么是垃圾邮件,要么是火腿。我们将会使用这些信息来训练我们的模型,以达到能对新增的不明确的邮件进行分类。

上图显示了一个典型的分类任务,用到的样本具有两个随机变量;训练数据(带有类标记)用图中的散点表示。红色点划线表明了线性决策(左侧)或者二次决策(右侧)的边界,这些边界决定了R1和R2的决策区域。新的observation将会根据它们所在的区域而被分配类标签“w1”或“w2”。对于那些未知的实例,我们已经假定我们的分类方法不是完美的,会有一定比例的样本可能被错误分类。
如果你对决策边界是如何被算出来的有兴趣,你可以查看我的模式分类库中的“统计模式分类示例”这一节的关于“IPython”部分的内容。
与此相反,无监督学习任务处理未标记的实例,并且这些类必须从非结构化数据集中推断出来。通常情况下,无监督学习采用聚类技术,使用基于一定的相似性(或距离)的度量方式来将无标记的样本进行分组。
第三类的学习算法使用“强化学习”这个概念来描述。在这种算法中,模型是通过一系列的操作而最大化“奖励函数”来进行学习。奖励函数的最大化,可以通过惩罚“坏行为”,和/或通过奖励“好行为”来实现。强化学习的一个常见的例子是根据环境反馈而进行学习自动驾驶的训练过程。我最近还偶然发现了强化学习的另外一个很好的例子,就是训练游戏“Flappy Bird”,使它能够自己玩。
监督学习 – 一个典型的工作流程
现今,当在“数据科学”领域开始引入各种概念的时候,著名的“鸢尾花(Iris)”花数据集可能是最常用的一个例子。1936年,R.A.Fisher在他的判别分析中创建和使用了Iris数据集。Iris现在可以从UCI机器学习库中免费得到。

在一个监督分类任务中,它将会是一个很好的例子。Iris中的花被分为了三类:Setosa , Virginica , 和Versicolor .而这150个实例中的每一个样本(单花)都有四个属性:
萼片的宽度
萼片的长度
花瓣的宽度
花瓣的高度
(所有测量单位都是厘米)
可视化
当我们需要处理一个新的数据集时,采用简单的可视化技术来解释数据分析是非常有用的,因为人的眼睛在发现模式方面是非常强大的。然而,有时我们必须处理的数据由三个以上的维度构成,这样就无法在一副图像中表达出来了。为了克服这种限制,一种方式可以将属性集分解成成对的属性集,然后创建一个散点图矩阵。在实践中,“良好的且有用的”可视化技术的选择高度依赖于数据的类型,特征空间的维数,和现实情况。
下面是Iris数据集的可视化的几个例子,或多或少有用。


用来创建这些图形的代码可以在“可视化技术进行探索性数据分析”一节中的IPython部分Matplotlib例子中找到。
根据上面的那些图,特别是散点图和(1D)直方图,我们已经可以看到,相对于三种不同的花,花瓣包含的辨别信息相对于花萼来说要更多一些,因为图形中花萼的宽度和长度差别更小一些。那么,该信息就可以用于特征选择,以去除噪声和减少我们的数据集的大小。
工作流程图
在下面的章节中,我们将会看到一些典型的监督学习任务的主要步骤,下图可以让我们直观地了解它们是如何连接的。

原始数据采集和特征提取
当我们下载完Iris数据集后,我们注意到,它已经具有“良好的结构”了,看来是R.A.Fisher已经为我们做了一些初步的“预处理”了。没有丢失的数据和具有数字化的特征,使得它可以被一种学习算法所使用。
然而,让我们假设该Iris数据集的原始数据是一系列的图像。在这种情况下,首先进行的预处理步骤(特征提取)可能涉及到这些图像的缩放,平移,和旋转,这样才能够获得以厘米表示的萼片和花瓣的尺寸。
叶子闭塞就成为一个问题了,这种情况可能会导致数据丢失:如果数据集中的数据丢失,而算法没有忽略丢失数据的选项,那么很多机器学习算法将无法使用这些数据集正常工作。如果稀疏性(也就是,数据集中空缺数据的数量)并不太高,那么通常的建议做法是除去任何包含缺失值的样本的行,或者丢失数据的属性列。另一种处理丢失的数据的策略是估算:使用某些统计数据来补充丢失的数据,而不是彻底清除掉丢失数据的样本。对于分类数据,丢失的值可以从出现频率最高的类别中得到;对于一些数值型的属性,丢失的值可以使用样品的平均值来代替。在一般情况下,通过k近邻插补得到的值来替换丢失数据被认为是优于使用总体样本均值进行替换的。
另外的一个关于特征提取的有趣方法可能包括花瓣和萼片的聚合运算,如花瓣或萼片宽度和高度之间的比率。
采样
假设我们从原始数据中提取到了某些特征(在这里:萼片宽度,萼片长度,花瓣宽度和花瓣长度),我们现在将把我们的数据随机分成训练和测试数据集。训练数据集将被用于训练模型,而测试数据集的作用是评价每次训练完成后最终模型的性能。
重要的是,我们对测试数据集只使用一次,这样在我们计算预测误差指标的时候可以避免过度拟合。过度拟合导致分类器在训练的时候表现良好,但是泛化能力一般。这样会使得在新的模式上面得出的预测误差值相当高。因此,在模型的创建中使用一些像交叉验证这样的技术,就能够提高分类性能。另外的一种策略是重新使用测试数据集来对模型进行评估,这需要创建第三个数据集,即所谓的验证数据集。
交叉验证
交叉验证是评估特征选择,降维,以及学习算法的不同组合的最有用的技术之一。交叉验证有许多种,最常见的一种很可能是k折交叉验证了。
在k-折交叉验证中,原始训练数据集被分成k个不同的子集(即所谓的“折叠”),其中,1个折叠被保留作为测试集,而另外的K-1个折叠被用于训练模型。例如,如果我们设定k等于4(即,4折叠),原始训练集的3个不同的子集将被用于训练模型,而第四个折叠将用于评价。经过4次迭代后,我们可以计算出最终模型的平均错误率(和标准差),这个平均错误率可以让我们看到模型的泛化能力如何。

分类性能的其他指标还有灵敏度,特异性,查全率和精密性。
灵敏度(同查全率)和精密性用来评估二元分类问题中的“真阳性率”:也就是对“阳性/真”预测准确的概率(比如,当试图预测某种疾病的时候,如果一个病人长了这种病,那么正确的预测出这个人长了这种病,就是“阳性/真”)。

特异性描述了二元分类问题中的“真阴性率”:这指的是对“假/阴性”情况作出正确预测的概率(例如,在试图预测疾病时,对一个健康者,没有预测到疾病,就是这种情况)。

在一个典型的监督学习的工作流程中,为了能够选出一个具有满意性能的模型,我们将会评估特征子空间、学习算法和超参数的各种不同的组合。正如前面提到的,交叉验证法是一种好的方法,可以避免过拟合我们的训练数据。

BIM建筑网