原文:http://sebastianraschka.com/Articles/2014_intro_supervised_learning.htmlhtml
摘要:本文全面地介绍了机器学习里的监督学习的主要概念,并对监督学习的典型工做流程进行了详细的解析,具备很好的实践指导意义。python
模式分类(pattern classification)和机器学习(machine learning)是很是热的话题,几乎在全部的现代应用程序中都获得了应用:例如邮局中的光学字符识别(OCR),电子邮件过滤,超市条形码扫描,等等。git
在这篇文章中,我会简要描述一个典型的监督学习任务的主要概念,这些概念将做为未来的文章和实现各类学习算法的基础。github
预测建模是创建一个可以进行预测的模型的通用概念。一般状况下,这样的模型包括一个机器学习算法,以便从训练数据集中学习某些属性作出这些预测。算法
预测建模能够进一步分红两个子集:回归和模式分类。回归模型基于变量和趋势之间的关系的分析,以便作出关于连续变量的预测,如天气预报的最高温度的预测。数组
与回归模型不一样,模式分类的任务是分配离散的类标签到特定的observation做为预测的结果。回到上面的例子:在天气预报中的模式分类任务多是一个晴天、雨天或雪天的预测。网络
抛开全部的可能性,本文的重点将放在“模式分类”,分配预先定义的类标签到特定实例将它们分红不一样的类别的通常方法。“实例”是“observation”或“样本”的同义词,描述由一个或多个特征(或称为“属性”)组成的“对象”。app
模式分类任务可被分红两个主要的子类别:监督学习和无监督学习。在监督学习中,用于构建分类模型的数据的类标签是已知的。例如,一个垃圾邮件过滤的数据集,它里面将包含垃圾邮件以及“火腿”(=不是垃圾邮件)消息。在有监督的学习问题中,咱们已经知道了训练集中的邮件要么是垃圾邮件,要么是火腿。咱们将会使用这些信息来训练咱们的模型,以达到能对新增的不明确的邮件进行分类。机器学习
上图显示了一个典型的分类任务,用到的样本具备两个随机变量;训练数据(带有类标记)用图中的散点表示。红色点划线代表了线性决策(左侧)或者二次决策(右侧)的边界,这些边界决定了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次迭代后,咱们能够计算出最终模型的平均错误率(和标准差),这个平均错误率可让咱们看到模型的泛化能力如何。
为了可以比较不一样的属性(好比,在聚类分析中经过计算距离或类似性),特别是当属性具备不一样的度量时(好比,温度具备开尔文和摄氏表达方式),就须要用到规范化和其余的一些属性变换技术。对特征进行恰当的变换,是大多数机器学习算法的一个要求。
“规范化”经常使用的代名词是“最小-最大变换”:属性值被变换到一个特定的范围内,好比0到1之间。
另外一种常见的方法是(Z值)“标准化”或“变换到单位方差”的过程:每一个样品减去属性的平均值,而后除以标准差,这样属性将具备标准正态分布(μ= 0,σ= 1)的性质。
咱们必需要记住其中很重要的一点:若是咱们在训练集上使用了任何一种规范化或变换技术,那么咱们就必须在测试集和未知数据集上使用相同的方法。
更详细的描述能够看另外一篇的文章:About Feature Scaling and Normalization and the effect of standardization for machine learning algorithms .
乍一看,特征选择和降维之间的区别彷佛违反直觉,由于特征选择,最终会致使(降维)到一个较小的特征空间。在实践中,术语“特征选择”和“降维”之间的主要区别在于:咱们在特征选择中保持了“原始特征坐标轴”,而降维一般涉及变换技术。
这两种方法的主要目的是为了去除噪声,经过只保留“有用的”(可区分的)信息提升计算效率,并避免过分拟合(“维数灾难”)。
在特征选择中,咱们感兴趣的是只保留那些“有意义”的功能,也就是那些能够帮助创建一个“好”的分类器的功能。举例来讲,若是咱们有一大堆描述花鸢尾的属性(颜色,高度等),那么特征选择可能最终会只保留4种测量数据,也就是描述花瓣和萼片尺寸的数据。或者,若是咱们一开始就有了4个属性(萼片和花瓣长度和宽度),咱们能够进一步缩小咱们的选择,只保留花瓣的长度和宽度,从而将咱们的特征空间从4维减小到2维。特征选择每每是基于领域知识的(能够看到,咨询领域内的专家对特征选择老是有帮助的),或探索性分析的,如咱们在前面看到的直方图或散点图。想要找到一个特定大小的特征子集,用来最优化分类模型的性能,每每须要一个穷举搜索——搜索采样的全部可能组合。然而,在实际使用中,因为运算的限制,这种方法可能不具备可行性。因此经常使用序列特征选择或遗传算法来选出一个次优的特征子集。
经常使用的降维技术是线性变换,如主成分分析(PCA)和线性判别分析(LDA)。PCA能够当作是一个“无监督”算法,由于它“忽略”了类别,它的目标是找到数据集中方差最大的方向(所谓的主成分)。相对于PCA,LDA是带“监督”的,它计算出多个类之间的最大区分的方向(“线性判别式”)。
关于PCA和LDA更多细节能够在这两篇文章中找到:
下面的图像显示了经过线性判别分析(LDA)将Iris数据转换到二维特征子空间后的情形。黑线表示了线性决策边界,它将特征空间分红了3个决策区域(R1,R2,R3)。在此决策区域的基础上,新的观测结果可被分为三个不一样的花种之一:R1 → Virginica , R2 → Versicolor , and R3 → Setosa .
学习算法各式各样,数量庞大,有各类文章和应用对最流行的算法作了详细的介绍。下面仅是对四种经常使用的监督学习算法所作的一个很是简短的总结:
可使用Iris获得一个很是简单的决策树,像这样:
若是分类器或者评估器的参数不是从机器学习步骤中直接获得的,而是利用单独的优化获得,那么这些参数称为超参数。超参数优化的目标是提升分类器的性能,实现学习算法的良好泛化能力。一种经常使用的超参数优化方法是网格搜索。一般状况下,网格搜索是经过对候选参数进行穷举搜索(相对于随机参数优化)而实现的。当模型的全部参数组合都被评估以后,最佳组合将被保留下来。
混淆矩阵是一种用于性能评估的方便工具,它是一个方阵,里面的列和行存放的是样本的实际类vs预测类的数量。
“垃圾邮件与火腿”分类问题的混淆矩阵能够是这样的:
一般,使用预测“准确率”或“差错率”来报告分类性能。准确率定义为正确分类的样本占总样本的比值;它常常被用做特异性/精密性的同义词,尽管它的计算方法不一样。准确率的计算公式是:
其中,TP =真阳性,TN =真阴性,P =阳性,N =阴性。
分类模型的经验偏差能够经过计算1-准确率获得。
然而,如何选择一个适当的预测偏差度量是高度依赖于具体问题的。在“垃圾邮件”分类的状况中,咱们更加关注的是低误报率。固然,垃圾邮件被分红了火腿确定是烦人的,但不是那么糟糕。要是一封邮件被误分为垃圾邮件,而致使重要信息丢失,那才是更糟糕的呢。
在如“垃圾邮件”分类的二元分类问题中,有一种方便的方式来调整分类器,称为接受者操做特性(ROC或ROC曲线)。
分类性能的其余指标还有灵敏度,特异性,查全率和精密性。
在一个典型的监督学习的工做流程中,为了可以选出一个具备满意性能的模型,咱们将会评估特征子空间、学习算法和超参数的各类不一样的组合。正如前面提到的,交叉验证法是一种好的方法,能够避免过拟合咱们的训练数据。