打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
一文秒懂机器学习:数据 任务 性能度量

1.前言

A computer program is said to learn from experience E with respect to

some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E

有点抽象难懂对吗?但首先注意黑色粗字 computer programlearn不就是机器(计算机程序)和学习的意思吗?之后我把这段话翻译成中文就可以发掘该定义里更多深层的内容了,中文定义为:

假设用性能度量 P 来评估计算机程序在某类任务的性能,若一个程序通利用经验 E在任务 T 中改善其性能,我们就说关于性能度量 P 和任务 T程序对经验 E 进行了学习

在该定义中,除了核心词机器学习, 还有关键词经验 E,性能度量 P 和任务 T。在计算机系统中,通常“经验”是以“数据”形式存在,而机器学习就是给定不同的任务从数据中产生模型的算法,即“学习算法” (leanring algorithm)。于是两个问题应运而生:

  1. 模型的性能到底怎么评估?这就需要根据不同类型任务 T 定义不同的性能度量 P
  2. 模型的性能的好坏通常要从没有见过的数据 (unseen data) 上体现,但是这就很矛盾了,因为在学习算法就是基于看到的数据,你根本不知道你没看到的数据(未来发生的)是什么样的。难道这意味着我们在现在这个时点就没能力评估模型性能?

好奇不?想学不?接下来三节我会从数据,任务和性能度量三个方面高层的介绍机器学习。你不需要了解任何算法就可以理解它们,它们非常简单但又非常重要。

2. 数据

2.1 干净数据

对于任何模型,“垃圾进垃圾出” (GIGO, garbage in garbage out) 这个公理永远成立。如果用于建模的算法基于的数据是没有代表性,低质量,不干净的等等,那就千万不要浪费时间建模而首要事情是处理数据 (tidy data)。处理数据是一门很深的学问,今后在《数据科学》那个课题下我在会详细描述。在《机器学习》这个课题下,我们主要还是关注算法,因此假设数据是有代表性高质量的。对于一个大问题,这样假设其他环节没问题,一次集中解决一个环节到最后再总结整合会更高效些。

假设我们收集了勒布朗詹姆斯 (Lebron James) 在最近四场的数据,如下图。

根据大神 Hadley Wickhan 在他 2014 年在 Tide Data 文中对干净数据的定义:

  • 每一列代表一个变量 (each variable forms a column),例如“得分”,“篮板”和“助攻”。
  • 每一行代表一个记录 (each observation forms a row),例如 [得分 = 27, 篮板 = 10, 助攻 = 12]。

上面表格中的数据是干净的。

2.2 术语

下面术语大家在深入了解机器学习前一定要弄清楚:

  • 这组记录的集合称为一个“数据集” (data set)。
  • 其中每条记录是关于一个对象 (这里是一场比赛詹姆斯的个人统计)的描述,称为一个“示例” (instance) 或“样本” (sample)。
  • 反映对象在某方面的表现或性质,例如“得分”,“篮板”,“助攻”,成为“属性” (attribute) 或“特征” (feature) 或“输入变量” (input variable)。
  • 属性上的取值,例如 27, 10, 12 (第一行的值) 成为“属性值” (attribute value)。

假设我们想学习的问题是詹姆斯的得分篮板助攻到达什么水平可以帮助骑士赢球?我们可以在上表加多一列数据标记“输赢”,见下图。

咋一看可以发现先好像詹姆斯助攻上10就可赢球,反之得分再多也不行。这也合理,因为助攻多就让队友全部参与整个队配合就流畅,赢球也不奇怪了。但是这个只是第一眼直觉 (hunch),不是模型。如果希望学到一个根据詹姆斯个人统计来判断骑士输赢的模型,我们须获得一个结果信息 (输赢),如 [[得分 = 27, 篮板 = 10, 助攻 = 12], 赢]。

更多术语:

  • 关于示例结果的信息,例如“赢”,成为“标记” (label) 或 “输出变量” (output variable)。
  • 拥有标记信息的示例,则称为“样例” (example)。
  • 从数据中学得模型的过程成为“学习” (learning) 或 “训练” (training)。
  • 在训练数据中,每个样例成为一个“训练样例” (training example),它们的集合称为“训练集” (training set)。

所有东西浓缩为一张图如下:

2.3 数学符号

接下来是数学符号 (mathematical notation),我个人喜欢用一致性的符号,在接下来算法研究的帖子里,我都会用本贴定义的符号。如果你现在不想看可以跳过不影响整篇的阅读,以后随时需要可以查阅本贴。

通常令

表示包含 m 个样例的输入变量和输出变量。每个示例由 d 个属性描述 (例如詹姆斯个人统计使用了 3 个属性),则每个示例

是 d 维的一个向量,其中 x(i)j 是 x(i) 在第 j 个属性上的取值 (例如詹姆斯第 3 场在第 2 个属性上的值是 10),而 y(i) 是示例 x(i) 的标记。一般的,用 (x(i), y(i)) 表示第 i 个样例,而 {(x(i), y(i)); i = 1,2, ..., m} 表示训练集。

所有东西浓缩为一张图如下:

3. 任务

根据训练数据是否拥有标记,学习任务可大致分两类:监督学习 (有标记) 和无监督学习 (无标记)。还有一种叫强化学习 (有一些评级标记)。我们先把注意力放在前两个。

3.1 监督学习 (supervised learning)

在监督学习中,数据不包含输出变量或标记,而其主要任务是预测和分类。以上述詹姆斯为例:

  • 如果我们预测的是离散值 (discrete value),例如“赢”,“输”,此类学习任务称为 “分类” (classification)
  • 如果我们预测的是连续值 (continuous value),例如詹姆斯效率 65.1, 70.3 等等,此类学习任务称为 “回归” (regression)

在分类任务中:

  • 对只涉及两个类别的,称其为“二分类” (binary classification) 任务,通常一个类为“正类” (positive class),比如赢球;另一个类为“反类” (negative class),比如输球。
  • 对只涉及两个以上类别的,称其为“多分类” (multi-class classification) 任务。一个例子就是加入詹姆斯去踢足球,这样标记会有三类,赢输平。

3.2 无监督学习 (unspuervised learning)

在无监督学习中,数据包含输出变量或标记,而其主要任务是发掘模式。除了根据詹姆斯个人统计来预测骑士队输赢或者他个人效率值,我们还可以对他做“聚类” (clustering), 即将训练集中的数据分成若干组,每组成为一个“” (cluster)。比如生成了下面四个簇:

  1. 最佳防守阵容,不是得分王,最有价值球员 (MVP)
  2. 不是最佳防守阵容,不是得分王,不是最有价值球员
  3. 不是最佳防守阵容,得分王,不是最有价值球员
  4. 最佳防守阵容,得分王,最有价值球员

聚类一个用处就是可以找到一个潜在的原因来解释为什么詹姆士在第 2, 3 种情况不是最有价值球员。难道真的是 defense wins MVP? Just saying ...

4. 性能度量 (performance measure)

对模型进行评估,不仅需要有效可行的实验估计方法,还需要衡量模型泛化能力的评价标准,称之为性能度量。性能度量是个任务相关的,接下来我们就拿监督学习里的回归和分类任务和无监督学习里的聚类任务为例,来给出它们相对应的性能度量。

4.1 回归任务 (regression)

在回归任务中,给定训练数据集

要评估模型 h 的性能,就要把模型预测结果 h(x) 与真实标记 y 进行比较。回归任务最常用的性能度量是“均方误差” (MSE, mean square error)

4.2 分类任务 (classification)

精度和错误率 (accuracy & error)

通常我们把分类错误的样本数占样本总数的比例称为“错误率” (error),相应的分类正确的样本数占样本总数的比例称为“精度” (accuracy)。假设在 m 个样本中有 a 个样本分类错误,则错误率为 a/m,而精度为 1 - a/m。

查准率和查全率 (precision & recall)

错误率和精度虽然常用,但是不能满足所有任务需求。以詹姆斯问题为例,假定我们用训练好的模型预测骑士赢球,显然,错误率衡量了多少比率的比赛实际是赢了但判断成输了。但是若我们关心的是“预测出的比赛中有多少比例是赢球”,或者“赢球的比赛中有多少被预测出来了”,那么错误率显然就不够用了,这是需要使用其他的性能度量,也就是“查准率” (precision) 和“查全率” (recall)。有人也称它们为准确率和召回率,但我觉得前者定义更直观,因为查准率就是查准的 (查出东西多少是有用的不就是吗?),而查全率就是查全的 (有用的东西有多少被查出不就是吗?)。

对于二分类问题,可将样例根据其真实类别与模型预测类别的组合划分为真正例 (true positive, TP),真反例 (true negative, TN), 假正例 (false positive, FP) 和假反例 (false negative, FN)。其中

  1. 预测类别的真假来描述“正例反例”,如果“预测为真”就是“正例”,如果“预测为假”就是“反例”。
  2. 真实类别和预测类别的同异来描述“真假”,如果“相同”就是“”,如果“不同”就是“”。
  3. 真正例就是预测类别为真且和真实类别相同,真反例就是预测类别为假且和真实类别相同,假正例就是预测类别为真但和真实类别不同,假反例就是预测类别为假但和真实类别不同。
  4. 如果我们目标是挑选真实类别为真的例子,那么真正例和假正例是实际挑出的集合 (因为你挑出的真实类别总会有真假,但是目标是正例,正负得负,负正得负)。而真正例和假反例是梦想挑出的集合 (因为梦想挑出的是真实类别为真的例子,只不过一部分挑对了划分为真正例,一部分挑错了划分为假反例,正正得正,负负得正)。
  5. TP + TN + FP + FN = 样本总数

一旦你捋顺上诉绕口 (mouthful) 的划分,下图的意义不言而喻;如果没有捋顺,希望下图能直观的帮助你。

著名的“混淆矩阵” (confusion matrix) 如下表:(这名字起得真TM好,混淆死我了)

查准率 P 和查全率 R 定义如下:

P = TP / (TP + FP)

R = TP / (TP +FN)

查准率和查全率是一对矛盾的度量。一般来说:

  • 查准率高时,查全率往往低
  • 查全率高时,查准率往往低

比如,打三国杀时,你是主公,你想杀反贼而不错杀忠臣,你可以只选最有把握的杀,就是不杀任何人,因此查准率 100% 而查全率 0%; 或者你想杀掉所有反贼,你可以通过增加杀人的数量把所有人杀了,这样你的确杀掉所有反贼了,因此查全率 100% 而查准率 60% (假设6人场1主公1忠1内3反)。通常在一些非常简单的任务或者你作弊时,查准率和查全率都很高。比如你知道每个人的身份牌,那你当然一杀一个准直到清场,查准率和查全率都是 100%。

F1 度量

F1 度量是基于查准率和查全率的调和平均 (harmonic mean) 定义的:

跟算术平均 (arithmetic mean, P+R) 和几何平均 (geometric mean, sqrt(PR)) 相比,调和平均更重视较小值。可从上式左边部分看出,P 和 R 都在分母位置,较小那个的变动比较大那个的变动对 F1 值影响更大些。F1 度量的一个弊端是对查准率和查全率重视程度相同,但是在实际的机器学习问题中,我们通常会对查准率和查全率有不同的重视程度。比如:

  • 例子 1:在亚马逊推荐商品时,为了尽可能打扰用户,更希望推荐内容是用户感兴趣的,此时查准率更重要。
  • 例子 2:在 FBI 追逃犯时,更希望的是少漏掉逃犯,宁可错杀一千也不放走一个,此时准率更重要。
  • 例子 3:在癌症诊断时,如果你跟一个没有癌症的病人说得了癌症 (追求查全率), 病人会压力很大而且花费很多在测试上;如果你跟得了癌症的病人说没得癌症 (追求查准率),这可能是个生死攸关的做法。此时似乎查准率和查全率都重要 (个人认为查准率更重要,毕竟生死大过金钱),我们只能不断改进模型咯。
  • 例子 4:目前作者还没有找到查准率和查全率都不重要的例子,如果你二者都不重视,你还玩毛机器学习?

为了区分不同重视程度,我们介绍一个 F1 度量一个一般形式 Fβ

其中 β 度量了查准率和查全率的相对重要性,根据公式有

  1. 当 β = 1, Fβ 公式退化成 F1, 适用于癌症诊断的例子。
  2. 当 β > 1, 查全率有更大影响,更希望查全,适用于 FBI 抓逃犯例子。
  3. 当 0 < β < 1, 查准率有更大影响,更希望查准,适用于亚马逊推荐商品例子。

4.3 聚类任务 (clustering)

聚类任务是将全部数据集划分为若干互不相交的子集,即蔟。那么什么样的聚类结果比较好呢?直观来讲,我们希望物以类聚,即同一簇的样本尽可能彼此相似,而不同簇的样本尽可能不同。换言之,聚类结果的“簇内相似度” (intra-cluster similarity) 要高而“簇外相似度” (inter-cluster similarity) 要低。

聚类的性能度量有两类。一类是将聚类结果与某个参考模型比较,称为“外部指标” (external index) 比如 Jaccard 系数,FM 指数和 Rand 指数; 另一类是直接考察聚类结果而不利用任何模型,称为“内部指标(internal index) 比如 DB 指数和 Dunn 指数。作者会在专门讲聚类任务时细讲这些度量指标。

对于相似度计算,通常我们会用两种“距离度量” (distance measure),欧式距离 (Euclidean distance) 和余旋相似 (cosine similarity):

前者计算的距离是没有单位化的,后者计算的相似度是有单位化的。单位化 (normalization) 有好处也有坏处:

  • 用欧式距离很可能没把一篇文章和一篇内容复制两遍的文章归为一类。
  • 用余旋相似很可能一篇很长的文章和一句很短的微博归为一类。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
文本分类与聚类(text categorization and clustering)
图解72个机器学习基础知识点
机器学习入门笔记(二)
【转】 分类模型评估指标汇总
机器学习笔记(一)
分类模型评估
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服