机器学习初体验

认识相关定义

模型(Model):学习算法(Learning Algorithm),从数据中学习得到的结果。
假设(Hypothesis):从数据学习得到某种潜在的规律;这种潜在规律自身称为真相(Ground-truth), 学习过程就是通过模型,也叫学习器(Learner)找出或逼近真相。
数据集(Data set):关于一个事件或对象的记录的集合。
样本(Sample):反映了事件或对象在某方面的表现或性质,样本的集合叫样本空间(Sample space)或输入空间。
样例(Example):拥有了标记(Label)的示例。所有样例的集合称标记空间(Label space)或输出空间。
分类(Classification):预测的结果是离散值。包括二分类(Binary classification)和多分类(Multi-class classification)。
回归(Regression):预测的结果是连续值。
聚类(Clustering)
测试(Testing)
预测(Prediction):通过对训练集进行学习得到模型,建立一个从输入空间到输出空间的映射。
监督学习(Supervised learning):分类和回归。
无监督学习(Unsupervised learning):聚类。
泛化(Generalization):反映在训练集学得的模型对新样本的适应能力。具有强泛化能力的模型可以很好地适用于整个样本空间。我们假设样本空间中的每个样本都是从一个未知分布(Distribution)上采样获得的,即独立同分布(Independent and identically distribution,iid)。一般来说,训练样本越多,越能通过学习找到这个未知分布更多的信息,获得具有强泛化能力的模型。

归纳学习(Inductive learning):从样例中学习
归纳偏好(Inductive bias):可以看做学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式。选择正确的归纳偏好可以增强模型的泛化能力。

模型评估与选择

将数据集分为训练集和测试集的方法:

留出法(hold-out)

直接将数据集D划分为两个互斥的集合(8/2或者7/3),一个训练集S,一个测试集T满足D=S∪T,S∩T=空集。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
需要注意的是,训练和测试集的划分要尽可能保持数据分布的一致性,例如在分类任务中要保持样本的类别比例相似,这种保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。如果S、T中样本类别比例差别很大,则误差估计将由于训练和测试集的数据分布的差异而产生偏差。
还有一个要注意的问题是训练集和测试集中的样本排序,不同的排序会导致模型评估有所差别,所以单次使用留出法得到的估计结果往往不够稳定可靠,一般需要采用若干次随机排序、重复进行实验评估后取平均值作为留出法的评估结果。

交叉验证法(cross validation)

先将数据集D通过分层采样划分为k个大小相似的互斥子集。然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集。这样就可以获得k组训练/测试集,进行k次训练和测试,最终返回k个测试结果的均值。

10折交叉验证示意图

由于将数据集D划分为k个子集存在多种划分方式,为减少因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。
有一种特殊情况,假定数据集D中包含m个样本,若令k=m,那么每个子集都只包含一个样本,这是唯一的划分方法划分m个子集,所以不受随机样本划分方式的影响,这种方法称为“留一法(Leave-One-Out,简称LOO)”,在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似。在训练集不是很大的时候可以采用。

自助法(bootstrapping)

给定包含m个样本的数据集D,对它进行采样产生数据集D':每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集中,执行m次之后我们就得到与数据集D同样有m个样本的数据集D'。通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D'中。于是我们拿D'作为数据集,将D\D',即36.8%未出现在D'中的样本作为测试集,这种方法也称为“包外估计(out-of-bag estimate)”。自助法产生的数据集会改变初始数据集的分布,从而引入估计偏差。所以一般只适用于数据集较小、难以有效划分训练/测试集的时候有用,当数据集量足够时,留出法和交叉验证法更常用一些。

调参和最终模型

由于大多数学习算法都有些参数需要设定,参数配置不同,学习得到模型的性能往往有差别,所以除了要对适用学习算法进行选择,还需对算法参数进行设定,也就是“调参(parameter tuning)”
需要注意的是我们的最终模型,给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,实际上我们只使用了一部分数据训练模型。因此,在模型选择完成后,学习算法和参数配置已选定,此时还需用数据集D重新训练模型,得到与数据集同样的分布。(可以理解为留出测试集只是为了对模型进行评估,让我们选出最适合的学习模型)

性能度量

错误率与精度

错误率和精度是分类任务中最常用的两种性能度量,即适用于二分裂任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。

查准率、查全率与F1

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应例数,分类结果的“混淆矩阵(confusion matrix)”如:

分类结果混淆矩阵

查准率P与查全率R分别定义为:

查准率和查全率是一对矛盾的度量。一般来说查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。以查准率为纵轴、查全率为横轴作图就可以得到查准率-查全率曲线,简称“P-R曲线”。

P-R曲线

如图,A曲线和B曲线的性能明显由于C曲线,而A曲线和B曲线发生了交叉,可以用“平衡点(Break-Event Point,BEP)”来做度量,如图所示,可以认为学习器A由于B。

但是有时候用BEP来度量还是过于简单。更加常用的时F1度量:

不同的应用对查准率和查全率重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户吗,更希望推荐内容是用户感兴趣的,此时查准率就更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。所以加入了一个β参数,定义为:

β=1则为标准的的F1度量;β>1时注重查全率;β<1注重查准率。

ROC与AUC

ROC曲线是根据不同的应用任务需求来采取不同的截断点,来研究学习器的泛化性能。与P-R曲线不同,ROC曲线的纵轴时“真正例率(True Positive Rate, TPR)”,横轴是“假正例率(False Positive Rate, FPR)”,两者定义为:

而AUC(Area Under ROC Curve)指的是通过ROC曲线下各部分的面积求和而得。可以用来判断不同ROC曲线的性能好坏。

ROC曲线和AUC示意图

代价敏感错误率与代价曲线

对于假正例和假反例对实际任务造成的影响不同,我们可以对其定义一个代价矩阵:


二分类代价矩阵

而代价敏感错误率则是平均代价:

代价曲线则体现了期望总体代价。

未完待续!

你可能感兴趣的:(机器学习初体验)