机器学习和神经网络 - 页 73

 

11.4 算法比较的统计检验(L11 模型评估。第 4 部分)


11.4 算法比较的统计检验(L11 模型评估。第 4 部分)

在之前的视频中,我们讨论了如何使用统计推断来比较已经适合给定数据集的不同模型。现在,我们将探索使我们能够比较算法的统计测试。这意味着我们可以比较适合不同训练集或训练子集的模型。本次讨论的重点是统计推断的应用和算法比较的各种统计测试。

有几种统计测试可用于比较算法,每种都有其优缺点。在讲义中,您可以找到这些测试的更详细说明以及其他材料。在这里,我将概述测试并强调一些要点。

一种常见的测试是 McNemar 测试,它主要用于比较模型而不是算法。值得一提的是,它的误报率低且计算效率高。但是,它并不是专门为算法比较而设计的。

另一个测试是比例差异测试,不幸的是它的误报率很高。本次测试需要拟合多个模型,更适合做算法对比。但是,由于需要多个模型拟合,计算量可能很大。

K 折交叉验证 t 检验是用于算法比较的另一种方法。它提供了更准确的评估,但误报率仍然略高。尽管有这个缺点,它仍然是一个有用的测试。

具有重复交叉验证的配对 t 检验是另一种需要拟合多个模型的方法。虽然它的误报率低于其他一些测试,但由于重复的模型拟合,它的计算量仍然很大。

一种更高级的技术是 5x2 交叉验证配对 t 检验,与 McNemar 检验相比,它具有较低的误报率和略高的统计功效。它提供了一种更强大的算法比较方法。此外,还有更新的方法,例如 5x2 交叉验证配对 f 检验,可以提供进一步的改进。

在讲义中,我深入研究了这些测试和其他统计方法的更多细节。此外,我已经在 MLA extend 中实现了大部分测试,这是一个随讲座材料提供的库。您可以找到 McNemar 检验、Cochrane 的 Q 检验、重采样配对 t 检验(不推荐)、K 折交叉验证配对 t 检验、5x2 交叉验证组合 t 检验等的实现。

虽然统计测试提供了有价值的见解,但也有用于算法比较的计算或经验方法。在下一个视频中,我们将探讨在实际应用中算法选择和比较背后的动机。例如,我们可能希望比较不同的算法,以确定在开发电子邮件应用程序或创建研究文章推荐系统等场景中表现最佳的算法。

总之,有几种统计测试可用于比较算法,每种都有其优点和局限性。这些测试可以深入了解适合不同训练集的算法之间的性能差异。然而,在选择合适的测试时,重要的是要考虑计算效率、误报率和统计功效。此外,经验方法可以补充算法比较中的统计测试。

 

11.5 用于算法选择的嵌套 CV(L11 模型评估。第 4 部分)


11.5 用于算法选择的嵌套 CV(L11 模型评估。第 4 部分)

好了,下面进入计算算法选择的话题。在本次讨论中,我们将重点关注一种称为嵌套交叉验证的技术,并在接下来的视频中探索一些代码示例。在我们深入研究嵌套交叉验证之前,让我们快速回顾一下我们之前介绍的一些关键点。

之前,我们讨论了三向保持法作为模型选择的一种方法。以下是该过程的简要总结:我们首先将原始数据集拆分为训练集和测试集。接下来,我们将训练集进一步划分为更小的训练集和验证集。训练集与机器学习算法和特定的超参数值一起用于训练模型。通过迭代各种超参数设置,我们获得了具有各自性能的多个模型。最后,我们选择在验证集上测量的具有最高性能的模型,并评估其在测试集上的最终性能。重要的是要包括一个独立的测试集,以减轻在模型选择过程中引入的任何选择偏差。

现在,让我们使用不同的图形来重新审视这个概念,以帮助我们理解。在这张图中,我们可以想象三种场景。在第一种情况下,我们评估在训练集上训练并在测试集上测试的单个模型,没有任何模型调整。这种方法适用于不需要模型调整的情况。

在第二种情况下,我们在相同的训练和测试集上评估多个模型。每个模型都使用不同的超参数设置进行训练,我们根据测试集性能选择性能最佳的模型。但是,多次使用测试集进行模型选择会引入选择偏差,从而使这种方法不太理想。

第三种情况对应于我们之前讨论的三向保持方法。使用不同的超参数设置在训练集上训练多个模型。然后使用验证集选择性能最佳的模型,随后在测试集上对其进行评估。这种方法通过使用单独的模型排名验证集来帮助减轻选择偏差。

虽然三向保持方法很有效,但更好的方法是 k 折交叉验证,我们在之前的讨论中对此进行了介绍。该方法将数据分成k折,每折轮流作为验证集,其余作为训练集。当数据集大小有限时,这种方法特别有用。对于较大的数据集,三向保持仍然是一个可行的选择,特别是在深度学习中,数据集通常较大,并且需要考虑模型收敛等其他考虑因素。

现在,让我们继续讨论嵌套交叉验证,它通过比较不同的算法使我们更进一步。假设我们想要比较 K 最近邻、决策树、梯度提升和随机森林等算法。每个算法都会进行超参数调整以选择最佳模型。我们在交叉验证过程中引入了另一个循环,从而导致嵌套交叉验证。外循环负责模型评估,而内循环则专注于超参数调整。这个两步过程使嵌套交叉验证比常规 k 折交叉验证更复杂,因为它基本上包含两个嵌套 k 折交叉验证。

为了更好地理解这个过程,让我们从原始数据集开始看一个插图。想象一下,我们有一个独立的测试集用于最终评估,但就目前而言,我们的主要训练集就足够了。与 k 折交叉验证类似,我们通过循环迭代指定的折数,在本例中假设为 5 次。在每次迭代中,数据被分成训练折叠和测试折叠。然而,我们并没有仅在训练折叠上训练模型并在测试折叠上对其进行评估,而是继续下一步。

在下一步中,我们采用其中一个训练折叠,例如图底部的那个,并将其进一步划分为较小的训练集和验证集。较小的训练集用于训练具有各种超参数设置的不同模型,而验证集用于选择性能最佳的模型。

一旦当前训练折叠的内部循环完成,我们就有了一个选定的模型及其相应的超参数设置。然后我们在外循环的测试折叠上评估这个模型,在内循环期间没有使用它。

对于外环中的每个折叠,该过程都会继续。每次,一个不同的折叠被保留为测试折叠,而剩余的折叠用于训练和验证。这确保了每个折叠都被用作测试集和验证集,并且每个模型都在不同的数据集上进行评估。模型的最终性能是通过对所有折叠的性能进行平均来确定的。

嵌套交叉验证通过提供更稳健的性能估计来帮助我们比较不同的算法。通过多次重复嵌套交叉验证过程,我们可以获得更可靠和稳定的性能估计。

总而言之,嵌套交叉验证是一种结合了模型选择和超参数调整优势的技术。它允许我们通过评估不同算法在多重数据上的性能并根据交叉验证的嵌套迭代选择最佳模型来比较不同的算法。这种方法有助于减轻选择偏差并提供更准确的算法性能估计。

在接下来的视频中,我们将探索代码示例来演示嵌套交叉验证在实践中是如何实现的。请继续关注本系列的下一部分。

 

11.6 算法选择代码示例的嵌套 CV(L11 模型评估。第 4 部分)


11.6 算法选择代码示例的嵌套 CV(L11 模型评估。第 4 部分)

好了,现在我们已经讨论了嵌套交叉验证背后的概念,让我们深入研究一个代码示例。这个例子将帮助您从计算的角度更好地理解嵌套交叉验证。此外,在比较算法时,它对你的课堂项目很有用。

首先,代码示例可以在 GitHub 上找到。我已将它们上传到名为“l11_code”的常规类存储库。共有三种笔记本可用:“verbose_one”、“verbose_two”和“compact”。所有三个笔记本都产生相同的结果,但它们的实现方法不同。

在“verbose_one”笔记本中,我通过手动使用分层 k-fold 方法采取了更手动的方法。另一方面,在“verbose_two”笔记本中,我使用了 cross_validate 函数。最后,在“紧凑型”笔记本中,我使用了 cross_val_score。每个笔记本在分析时都会提供不同级别的信息。现在,我建议从“verbose_one”笔记本开始,因为您已经熟悉分层 k 折对象。

在我们继续之前,值得一提的是,您选择的实施方法不会对结果产生重大影响。但是,我不建议使用“紧凑型”笔记本,因为它提供的有关超参数集的信息较少。稍后,在我们讨论以下内容后,我可以简要地向您展示超参数集的外观。

现在,让我们检查一下“verbose_one”笔记本,它演示了嵌套交叉验证的手动方法。在此笔记本中,您将找到嵌套交叉验证及其工作原理的图示。该过程涉及运行内部循环的外部循环。对于每个外循环,折叠被分成训练和测试部分。然后将训练部分传递到执行超参数调整或模型选择的内循环。正如我们在上一课中学到的,这可以使用网格搜索来实现。

在笔记本中,您将找到必要的设置步骤,例如导入所需的库和模块。这些包括用于内部循环中模型调整的网格搜索、使用分层 k 折交叉验证、管道、标准标量和我们要比较的分类器拆分数据集。出于本示例的目的,我们使用较小版本的“emnes”数据集,它由 5000 个训练示例组成,以保持计算可行性不变。此外,20% 的数据集被留作测试数据,使我们能够将嵌套交叉验证的性能与测试集性能进行比较。

展望未来,我们初始化我们将使用的分类器。第一个分类器是逻辑回归分类器,具体是多项逻辑回归分类器。这个分类器在深度学习中也被称为 softmax 回归。虽然我们没有在本课程中介绍它,但我们将在“统计 453”中介绍它。使用这个分类器的原因是为了有更广泛的算法来比较。此外,与其他算法相比,它相对较快。我们考虑的另一种相对快速的分类器是支持向量机,特别是线性分类器。通过包含这些分类器,我们旨在比较各种超参数设置。

需要注意的是,基于决策树的分类器(例如决策树本身和随机森林分类器)不需要参数缩放。因此,我们只对其他分类器进行缩放。为了促进这一点,我们使用管道,它将标准缩放器与相应的分类器结合在一起。因此,管道可以看作是分类器本身。对于每个分类器,我们定义了一个我们将搜索的超参数网格。这些网格包含我们要为每个分类器调整的参数。例如,在逻辑回归中,我们考虑了正则化权重惩罚和不同的正则化强度。最近邻涉及考虑最近邻的数量和距离。

在“verbose_one”笔记本中,在定义分类器及其各自的超参数网格后,我们继续为嵌套交叉验证设置外循环和内循环。

外循环使用分层 k 折交叉验证将数据集拆分为训练集和测试集。它遍历折叠并跟踪折叠索引、训练索引和测试索引。对于每个折叠,训练数据进一步分为内循环的训练和验证集。

内循环使用网格搜索执行模型选择或超参数调整。它遍历每个分类器的超参数网格,并使用来自外循环的训练和验证集来为每个组合找到最佳超参数。网格搜索详尽地搜索指定的超参数网格,并使用交叉验证评估每个组合的性能。

内循环完成后,记录每个分类器的最佳超参数。然后,在一开始搁置的测试集上评估所选模型的性能。为每个分类器计算准确率、精确率、召回率和 F1 分数等评估指标。

最后,显示嵌套交叉验证和测试集评估的结果,让您可以比较不同分类器的性能及其超参数设置。

请务必注意,“verbose_two”和“compact”笔记本分别使用 cross_validate 函数和 cross_val_score 函数提供嵌套交叉验证的替代实现。这些函数自动处理一些交叉验证步骤,简化了代码。但是,与“verbose_one”笔记本相比,它们可能提供的信息不太详细。

我希望这个概述能帮助您理解代码示例以及嵌套交叉验证是如何实现的。随意探索笔记本并尝试不同的数据集和分类器,以更好地理解这个概念。

 

12.0 讲座概述(L12 模型评估 5:性能指标)


12.0 讲座概述(L12 模型评估 5:性能指标)

大家好,

我希望你们都度过了一个美好的感恩节假期,并能够在学期的最后几周之前放松和充电。虽然很遗憾学期即将结束,但仍有很多值得期待的地方,尤其是您的项目展示。我很高兴看到您根据我们在本课程中介绍的内容构建了哪些内容,并见证了您对机器学习知识的创造力和应用。

在接下来的两周里,我对我们剩下的时间有一些计划。本周,我将介绍模型评估并重点关注五个性能和评估指标。目标是拓宽您的视野,而不仅仅是分类准确性和错误。我们将探索有助于有效评估机器学习模型的各种指标。我预计这个主题不会占用太多时间,所以如果我们有更多时间,我还会谈到功能选择。我之前分享了一些关于这个主题的自学材料,因为我知道我们可能没有时间广泛介绍它。我想注意在线学习带来的挑战,不要在短时间内用太多的话题让你不知所措。我知道你们都有很多事情要做,包括 12 月 4 日到期的家庭作业 3,以及 12 月 6 日以视频形式进行的项目演示。

关于项目演示,下周,我将创建 Canvas 页面,您可以在其中嵌入您的演示。此外,我将设置一个小测验形式来投票选出项目奖项,包括最具创意的项目、最佳口头报告和最佳可视化。这些奖项将由您的投票决定。我相信它会给这个过程增添乐趣。我会安排下周的一切,这意味着不会有任何讲座。但是,我强烈建议大家观看项目介绍。填写与演示相关的调查将获得积分。观看彼此的演示也很公平,因为你们都付出了巨大的努力。我们可以在 Piazza 上进行讨论和提问,或者探索其他允许互动的平台。我将考虑促进这种参与的最佳方式。

在我们开始今天的讲座之前,我想提醒大家注意课程评估。我们部门要求您提供有关学期如何进行的反馈。由于在线形式,今年有所不同,因此您的见解将很有价值。我将在 Canvas 上发布课程评估的链接。如果您能抽出时间填写,我们将不胜感激。但是,我想强调的是,如果您选择不完成它们,则不会受到任何惩罚。这只是收集您的反馈的请求。

话虽如此,让我们从关于性能和评估指标的第 5 讲开始。我们在模型评估方面取得了长足的进步,从偏差-方差分解开始理解过拟合和欠拟合。我们探索了数据集划分的 holdout 方法及其缺陷,使用正态近似法构建置信区间,重复 holdout 和 bootstrapping 等重采样技术,以及模型选择的交叉验证。上周,我们讨论了模型和算法比较的统计测试,包括嵌套交叉验证。今天,我们的重点将放在评估指标上。

我们将从讨论混淆矩阵开始,它与上周介绍的 McNemar 混淆矩阵不同。从混淆矩阵中,我们可以推导出假阳性率、真阳性率等指标,这在我们深入研究接受者操作特征时很有用。此外,我们将探讨精确度、召回率、F1 分数、Matthews 相关系数和平衡准确度。后者在数据集中存在类不平衡的情况下特别有用。最后,我们将解决将二元指标扩展到多类设置的问题,平衡精度除外,它已经与多类分类兼容。

在下一个视频中,我们将从混淆矩阵开始讨论。

 

12.1 混淆矩阵(L12 模型评估 5:性能指标)



12.1 混淆矩阵(L12 模型评估 5:性能指标)

让我们从讨论混淆矩阵及其意义开始。在讲座中,演讲者提到由于学期末很忙,以及在一本 Python 机器学习书籍中涵盖了该主题,他们没有准备讲义。他们建议参阅本书的第 6 章以了解更多详细信息。

混淆矩阵是用于评估机器学习分类器性能的工具。它显示了监督分类问题中预测类标签与实际类标签之间的比较。该矩阵帮助我们了解分类器的性能以及它容易混淆的类别标签。

混淆矩阵通常以二乘二的格式表示,也称为列联矩阵。它由四个部分组成:真阳性(TP)、假阴性(FN)、假阳性(FP)和真阴性(TN)。 “正”类是指我们要预测的兴趣类,而“负”类是指其他类。

真阳性 (TP) 是属于正类并且被分类器正确识别的实例。另一方面,假阴性 (FN) 是来自阳性类的实例被错误地预测为阴性。

类似地,误报 (FP) 是来自负类的实例被错误地预测为正类。最后,真负类 (TN) 是来自负类的被正确识别为负类的实例。

通过分析这些组件,我们可以计算出各种性能指标。讲座提到了两个常见的指标:分类准确率和分类错误率。分类准确度是通过将真阳性和真阴性之和除以预测总数来计算的。另一方面,分类误差的计算方式为 1 减去准确率。

演讲者随后介绍了乳腺癌威斯康星数据集,其中包含有关乳腺癌诊断的信息。他们解释说,该数据集有多个列,包括每个患者的 ID 号和从癌细胞核数字化图像中提取的特征。

为了准备分类数据集,演讲者使用 scikit-learn 的标签编码器将字符串类标签(恶性和良性)转换为整数标签(0 和 1)。他们将数据集分成训练集 (80%) 和测试集 (20%)。

接下来,演讲者演示了如何使用 k 最近邻分类器绘制混淆矩阵。他们强调了 KNN 分类器特征缩放的重要性,并提到了使用标准标量和管道进行预处理。

为了可视化混淆矩阵,演讲者使用了 mlxtend 库中的 confusion_matrix 函数。使用 matplotlib 显示生成的混淆矩阵,右下角为真阳性,左上角为真阴性。

此外,演讲者还提到了 confusion_matrix 函数的一些可选参数,例如 show_absolute 和 show_normed。这些参数允许自定义可视化,包括显示绝对数字或标准化值。

最后,演讲者讨论了从混淆矩阵得出的指标,例如真阳性率、假阳性率、假阴性率和真阴性率。这些指标对于评估分类器性能很重要,将在后续讨论中进一步探讨与接受者操作特征 (ROC) 曲线相关的问题。

总的来说,混淆矩阵为分类器的性能提供了有价值的见解,使我们能够评估其正确预测类别标签的能力。

 

12.2 精确率、召回率和 F1 分数(L12 模型评估 5:性能指标)


12.2 精确率、召回率和 F1 分数(L12 模型评估 5:性能指标)

在上一个视频中,我们讨论了混淆矩阵,它是评估分类模型的有用工具。它允许我们计算真阳性、假阳性、真阴性和假阴性的数量。我们还探讨了真阳性率和真阴性率。现在,我们将通过引入三个额外的指标来扩展我们的理解:精度、召回率和 F1 分数。

让我们从精度开始。精确度的计算方法是将真阳性的数量除以真阳性和假阳性的总和。真阳性是被正确预测为阳性的实例,而假阳性是被错误预测为阳性的实例。例如,在垃圾邮件分类的上下文中,真阳性表示将电子邮件正确识别为垃圾邮件,而误报则表示将非垃圾邮件错误地分类为垃圾邮件。 Precision 衡量积极预测的准确性,回答这个问题:有多少预测的垃圾邮件实际上是垃圾邮件?

接下来,我们有召回率,也称为真阳性率。召回率的计算方法是将真阳性的数量除以真阳性和假阴性的总和。真阳性表示正确预测为阳性的实例,假阴性表示错误预测为阴性的实例。召回率表示有多少实际的阳性实例被正确识别为阳性。换句话说,它衡量分类器捕获正例的有效性。

另一个重要指标是 F1 分数,它将精确度和召回率结合为一个值。它是通过取精确率和召回率的调和平均值计算的,并以两倍为权重。 F1 分数提供了分类器性能的平衡度量,同时考虑了精度和召回率。当我们想要评估一个在精度和召回率上都表现良好的模型时,它特别有用。

所有这些指标的范围都在 0 到 1 之间,1 是可能的最佳值。在术语方面,敏感性和特异性在计算生物学中更常用,而精确度和召回率在信息技术、计算机科学和机器学习中比较流行。在选择在论文或研究中使用哪些指标时,重要的是要考虑特定领域的惯例。

为了更好地理解准确率和召回率,让我们使用来自维基百科的有用图表将它们可视化。在此可视化中,我们将正面类别(例如,垃圾邮件)视为左侧的所有内容,将负面类别视为右侧的所有内容。精确率由真阳性除以所有预测阳性表示,而召回率由真阳性除以所有实际阳性表示。

此外,我们还有另外两个常用指标:敏感性和特异性。灵敏度是召回率的另一个术语,代表真阳性率。另一方面,特异性是真阴性的数量除以阴性的数量。它与敏感性相辅相成,侧重于准确识别负面实例。

现在,让我们讨论马修斯相关系数。该系数最初设计用于评估生物学中的蛋白质二级结构预测,它衡量真实标签和预测标签之间的相关性。它可以被认为是 Pearson 相关系数的二元分类对应物。与 Pearson 的 r 类似,Matthews 相关系数的范围从 -1 到 1,其中 1 表示真实标签和预测标签之间的完美匹配。它在不平衡类别问题中特别有用,其中一个类别的示例明显多于另一个类别。

要计算这些指标,您可以使用 scikit-learn 提供的函数,例如 precision_score、recall_score、f1_score 和 matthews_corrcoef。这些函数将真实标签和预测标签作为输入并返回相应的度量值。或者,您可以在网格搜索和超参数调整中使用这些指标,将所需的指标作为字符串参数提供。

对于多类问题,当您想使用精度、召回率、F1 分数或马修斯相关系数等指标时,您需要应用变通方法。一种方法是使用 scikit-learn 中的 make_scorer 函数。此函数允许您为特定指标创建评分对象。

例如,如果要对多类问题使用 F1 分数,可以使用 make_scorer 创建一个 scorer 对象,并将 average 参数设置为“macro”或“micro”。 “宏观”选项为每个类别独立计算指标,然后取平均值,而“微观”选项考虑所有类别中真阳性、假阴性和假阳性的总数。

重要的是要注意,“宏观”和“微观”平均之间的选择取决于问题和分析的具体要求。

除了单独使用这些指标外,您还可以将它们应用于网格搜索和超参数调整。您可以在网格搜索过程中提供所需的指标作为字符串参数,而不是使用分类准确度作为评分指标。这使您可以根据所选指标优化模型,提供比仅依赖准确性更全面的评估。

请记住,在处理多类问题和应用这些指标时,了解平均选项并根据您的特定需求选择合适的方法至关重要。

总之,在本视频中,我们介绍了分类模型的其他评估指标,包括精度、召回率、F1 分数和 Matthews 相关系数。这些指标提供了对分类器性能的宝贵见解,考虑了真阳性、假阳性和假阴性等因素。通过使用这些指标,您可以更深入地了解您的模型的执行情况,并在您的分析或研究中做出明智的决策。在下一个视频中,我们将深入研究平衡精度、接受者操作特征 (ROC) 曲线,并将二元指标扩展到多类设置,扩展我们在分类任务中的评估技术知识。

 

12.3 平衡精度(L12 模型评估 5:性能指标)


12.3 平衡精度(L12 模型评估 5:性能指标)

好了,现在让我们深入研究平衡精度的概念,这在处理分类任务中的类不平衡问题时特别有用。当一个类别的标签数量明显多于另一个类别时,就会出现类别不平衡。为了说明这一点,让我们以鸢尾花为例考虑一个多类分类问题,特别是 Iris setosa、Iris versicolor 和 Iris virginica。

通常,我们通过将混淆矩阵对角线上的值相加并将其除以示例总数来计算预测精度。在给定的示例中,零级有 3 个标签,一级有 769 个标签,二级有 18 个标签。如您所见,类之间存在不平衡,与其他两个类相比,第一个类具有更多的示例。如果我们计算常规准确率,它会在 80% 左右,主要是受到大量 Class One 示例的影响。

但是,常规精度可能无法准确表示模型的性能,尤其是当重点应该放在实现所有类别的平衡预测上时。在这种情况下,平衡精度指标旨在通过对每个类赋予相同的权重来提供更公平的评估。

为了计算平衡精度,我们将每个类都视为正类,并将其余类合并到负类中。例如,让我们先关注零级。我们将零类视为正类,将一类和二类合并为负类。通过分析混淆矩阵,我们可以确定零类的真阳性、真阴性、假阳性和假阴性。对每个类别重复此过程,从而创建单独的二元分类问题。

在 Python 中,您可以使用 mlxtend 库中的 accuracy_score 函数来计算平衡精度。此函数的运行方式与 scikit-learn 的 accuracy_score 类似,但包括计算二元分类准确度的附加功能。通过将方法指定为二进制并提供正标签,您可以计算每个类的二进制精度。此外,您可以将平均参数用作“宏观”或“微观”来直接计算每类的平均准确度。

在提供的示例中,重新创建了混淆矩阵,并计算了常规准确度、每类平均准确度(平衡准确度)和二进制准确度。二元精度对应于分别被视为正标签的每个类。通过平均二进制精度,您可以获得平衡精度。在这种情况下,平衡精度约为 86%。

平衡准确度,或平均每类准确度,提供了对分类器在具有类不平衡的多类问题中的性能的公平评估。它平等地考虑每个类别,并深入了解模型准确预测所有类别的能力。

继续,现在让我们讨论接受者操作特征 (ROC) 曲线,这是机器学习中的另一个重要评估指标。 ROC 曲线是二元分类器性能的图形表示,它为不同分类阈值下真阳性率 (TPR) 和假阳性率 (FPR) 之间的权衡提供了有价值的见解。

要理解 ROC 曲线,我们首先定义真阳性率 (TPR) 和假阳性率 (FPR)。 TPR,也称为敏感度或召回率,衡量被分类器正确识别的实际正例的比例。它的计算方法是真阳性数除以真阳性和假阴性之和:

TPR = 真阳性 /(真阳性 + 假阴性)

另一方面,假阳性率 (FPR) 衡量的是被错误分类为阳性的实际阴性实例的比例。它的计算方法是误报数除以误报数和真负数之和:

FPR = 误报 / (误报 + 真阴性)

为了构建 ROC 曲线,分类器的预测根据其分类分数或概率进行排序。通过改变分类阈值,我们可以生成不同的 TPR 和 FPR 值。从将所有实例分类为阳性的阈值(导致 TPR 为 1 和 FPR 为 1)开始,我们逐渐降低阈值,将更少的实例分类为阳性,从而降低 TPR 和 FPR。

针对每个阈值绘制 TPR 与 FPR 的关系图,得到 ROC 曲线。该曲线说明了分类器在各种操作点上的性能,理想情况是一条紧贴左上角的曲线,表示所有阈值的高 TPR 和低 FPR。

除了 ROC 曲线之外,从中衍生出的另一个重要指标是 ROC 曲线下面积 (AUC-ROC)。 AUC-ROC通过计算ROC曲线下的面积来量化分类器的整体性能。完美分类器的 AUC-ROC 为 1,表明它在保持 FPR 为 0 的同时实现了 1 的 TPR。相反,随机分类器的 AUC-ROC 为 0.5,因为它的性能并不比随机分类器好。

ROC 曲线和 AUC-ROC 提供了二元分类器性能的综合分析,与所选分类阈值无关。它允许我们比较不同的分类器或同一分类器的不同设置,从而做出有关模型选择的明智决策。

为了在 Python 中计算 ROC 曲线和 AUC-ROC,scikit-learn 等各种库提供了方便的函数。这些函数将真实标签和预测概率或分数作为输入,并返回 FPR、TPR 和 ROC 曲线的阈值,以及 AUC-ROC 值。

总之,ROC 曲线和 AUC-ROC 是评估和比较二元分类器性能的有价值的工具。它们提供了对不同分类阈值下真阳性率和假阳性率之间权衡的见解,允许在模型选择中做出明智的决策。

 

12.4 接收器操作特性(L12 模型评估 5:性能指标)



12.4 接收器操作特性(L12 模型评估 5:性能指标)

讨论的主题围绕接受者操作特征 (ROC) 曲线展开。这条曲线,也称为接受者操作特征 (ROC) 曲线,由于其复杂的名称,听起来可能像绕口令。术语“接收器操作特性”起源于雷达接收器操作员领域,他们使用无线电方向测距等技术。最初,它是在这种情况下使用的。然而,由于它能够结合两个基本指标:真阳性率和假阳性率,它在机器学习领域得到了普及。

ROC 曲线是通过改变预测阈值构建的。为了说明这一点,让我们考虑一个例子。在二元分类问题中,我们有两类:零类和一类。我们可以为每个示例分配一个类成员概率,而不是简单的二元分类决策。可以使用各种分类器(例如逻辑回归、k 最近邻或决策树)来确定该概率。例如,在 k 最近邻的情况下,类成员概率可以计算为邻域中一个类与另一个类出现的比率。

让我们考虑一个使用 k 最近邻算法的例子。假设我们有一组邻居,我们想要确定特定示例的类成员概率。如果我们观察到在五个最近的邻居中,三个属于零类,两个属于一类,则零类的类成员概率将计算为 3/5,即 0.6,一类的类成员概率为 2/5 ,即 0.4。这些概率可以根据阈值进行调整。

阈值表示我们在零级和一级之间做出决定的点。例如,如果我们将阈值设置为 0.5,则任何高于 0.5 的概率都将被归类为一级,而任何低于 0.5 的概率将被归类为零级。在逻辑回归中,通常使用 0.5 作为阈值。然而,阈值可以是任意的,取决于我们的目标,我们是否要针对真阳性率、假阳性率或任何其他标准进行优化。阈值的选择还包括决胜局规则,例如在平局的情况下选择较低的类别。

受试者工作特征 (ROC) 曲线通过在 y 轴上绘制真阳性率 (TPR) 和在 x 轴上绘制假阳性率 (FPR) 来说明分类器的性能。曲线上的每个点对应不同的阈值。通过改变阈值,我们可以观察分类器的性能在真阳性率和假阳性率方面是如何受到影响的。该曲线描绘了分类器对不同阈值的敏感性,使我们能够全面分析其行为。

在准确性方面,我们通常使用一个固定的阈值,比如 0.5,来确定类别分配。然而,对于接受者操作特性曲线,我们通过改变阈值来探索分类器的灵敏度。通过这样做,我们可以评估不同阈值对假阳性率和真阳性率的影响。曲线显示不同的点对应不同的阈值,如0.3、0.4、0.5、0.6等。曲线上的每个点代表分类器针对特定阈值的性能。

现在,让我们深入研究阈值的概念及其与类成员概率的关系。之前,我们看到一个图描绘了 x 轴上的一个特征和正在移动的决策边界。然而,这仅仅是帮助理解的抽象。实际上,x 轴表示类别成员概率。

因此,从我们中断的地方继续,我将进一步解释代码片段。在计算出第一类的概率后,我们使用 scikit-learn 中的 roc_curve 函数来计算不同阈值的误报率 (fpr) 和真阳性率 (tpr)。 roc_curve 函数将真实标签 (y_true) 和预测概率 (y_scores) 作为输入并返回 fpr、tpr 和阈值。

接下来,我们使用 roc_auc_score 函数来计算接受者操作特征曲线 (AUC-ROC) 下的面积。该指标提供了一个单一值,该值总结了分类器在所有可能阈值下的性能。 AUC-ROC 越高表示分类性能越好。我们分别计算训练集和测试集的 AUC-ROC。

最后,我们使用 Matplotlib 绘制 ROC 曲线。该图以蓝色显示训练集的 ROC 曲线,以橙色显示测试集。我们还在图中添加标签和图例以便更好地解释。

通过可视化 ROC 曲线并计算 AUC-ROC,我们可以评估分类器的性能并在训练集和测试集之间进行比较。如果 AUC-ROC 接近于 1,则表明分类器很好,真阳性率高,假阳性率低。另一方面,接近 0.5 的 AUC-ROC 表明分类器是随机的或无效的。

总之,代码片段演示了如何使用接受者操作特征 (ROC) 曲线和曲线下面积 (AUC) 作为二元分类问题的评估指标。 ROC 曲线可视化了不同预测阈值下真阳性率和假阳性率之间的权衡,而 AUC-ROC 提供了一个单一的值来量化分类器的性能。

 

12.5 将二元度量扩展到多类问题(L12 模型评估 5:性能度量)


12.5 将二元度量扩展到多类问题(L12 模型评估 5:性能度量)

在本课程中,我们讨论了可以扩展以处理多类设置的各种分类器。决策树、k 最近邻、梯度提升、随机森林和其他分类器自然地处理多类问题。但是,您可能会遇到更适合二元分类的分类器,例如逻辑回归或支持向量机。在这种情况下,我们需要找到扩展这些二元分类器以处理多个类的方法。

一种方法是“one versus rest”或“one versus all”策略,也称为 OvR 或 OvA。这种方法涉及将多类问题划分为单独的二元分类问题。每个类在一个二元分类器中被视为正类,而其余类被视为负类。例如,如果我们有三个类别(黄色圆圈、红色方块和蓝色三角形),我们将创建三个二元分类器:一个用于将黄色圆圈与其余部分进行分类,一个用于将红色方块与其余部分进行分类,一个用于将蓝色三角形与其余部分进行分类休息。在训练期间,我们拟合所有三个分类器,在预测期间,我们运行所有三个分类器并选择置信度得分最高的分类器。

另一种方法是“一对一”策略,我们为每对类配备一个二元分类器。如果我们有三个类别,我们将有三个二元分类器:一个用于对黄色圆圈与红色方块进行分类,一个用于对黄色圆圈与蓝色三角形进行分类,一个用于对红色方块与蓝色三角形进行分类。在预测期间,我们运行所有分类器并使用多数表决来确定最终的类标签。

OvR 和 OvO 策略都允许我们扩展二元分类器来处理多类问题。然而,OvO 的计算量可能很大,尤其是当类别数量很大时,因为它需要拟合多个分类器。

在评估多类分类器的性能时,我们需要扩展二元分类指标来处理多个类。执行此操作的两种常见方法是微平均和宏观平均。微平均涉及通过汇总所有类别的真阳性和假阳性来计算精度、召回率和 F1 分数。宏平均涉及分别计算每个类别的精度、召回率和 F1 分数,然后对它们进行平均。微平均平等对待每个实例或预测,而宏观平均对所有类别加权。此外,还有一种加权方法,它通过考虑每个标签的真实实例数来考虑类不平衡。

在 scikit-learn 中,您可以在使用精度、召回率和 F1 分数等分类指标时指定平均方法(微观、宏观或加权)。例如,您可以使用 average='micro' 或 average='macro' 分别计算微观或宏观平均指标。还有接收器操作特征 (ROC) 和曲线下面积 (AUC) 分数,可以使用 roc_auc_score 函数计算。 ROC AUC 的默认平均方法是宏。

处理类不平衡是多类分类中的另一个挑战。可以使用过采样和欠采样等技术来解决此问题。不平衡学习库提供了处理类不平衡的额外方法,并且与 scikit-learn 兼容。

总体而言,多类分类中的模型评估涉及扩展二元分类器、为评估指标选择合适的平均方法以及考虑类不平衡。虽然我们无法在本课程中涵盖所有详细信息,但不平衡学习库文档等资源提供了有关这些主题的更多信息。

 

13.0 特征选择简介(L13:特征选择)


13.0 特征选择简介(L13:特征选择)

大家好!我希望你们都度过了一个富有成效的学期,并从这门课中获得了宝贵的知识。我知道这个学期对我们大多数人来说都非常紧张,所以我不想用额外的内容让你不知所措来增加压力。但是,对于无法涵盖教学大纲中承诺的某些主题,我深表歉意。为了弥补这一点,我准备了一些寒假的奖金讲座,从今天开始。

在这一系列视频中,我将重点介绍降维,具体是两种方法:特征选择和特征提取。这些技术非常有用,理解起来也很重要。在今天的讲座中,我们将深入探讨特征选择,探索它的工作原理、它的重要性及其实际应用。在下一组视频中,我们将介绍特征提取作为一种替代方法。

在我们深入研究特征选择和特征提取的细节之前,让我们简要讨论一下降维的概念及其重要性。降维旨在减少数据集中的特征数量。例如,考虑著名的 Iris 数据集,它包含四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。在特征选择中,我们选择这些特征的一个子集,例如萼片宽度和花瓣长度,以用于我们的机器学习算法。另一方面,特征提取涉及通过线性变换等技术创建新特征。主成分分析 (PCA) 就是这样一种方法,它将多个特征组合到一个较小的特征空间中。

在本系列讲座中,我们的主要重点是特征选择,我们从数据集中选择原始特征。通常,降维涉及创建更小的特征空间。现在,我们为什么要关心这些更小维度的特征空间?让我们探讨一些原因:

  1. 维数灾难:随着特征数量的增加,机器学习分类器常常会遇到困难。它们可能会过度拟合,尤其是像 K 最近邻和决策树这样的算法。减少特征集可以提高此类算法的性能。

  2. 计算效率:处理具有众多特征的大型数据集的计算成本可能很高。通过减少特征集,我们可以在不牺牲预测性能的情况下提高计算性能。

  3. 更容易的数据收集:有时,与更大的特征子集相比,更简单的特征子集可以产生相似的性能。这可以使数据收集更容易且更具成本效益,因为收集某些特征可能更便宜或更容易获得。

  4. 存储空间:存储大量数据可能具有挑战性且成本高昂。特征提取和选择技术有助于降低数据的维度,使存储更加可行和高效。

  5. 可解释性:了解这些特征有助于解释复杂的机器学习算法。在需要解释的领域尤其重要,例如客户信用卡申请,客户有权知道自动化系统做出决策的基础。

总结一下,降维可以分为两个子问题:特征选择和特征提取。在今天的讲座中,我们将重点关注特征选择。在下一讲中,我们将更详细地讨论特征提取。

为了说明特征选择的重要性,让我分享一个与研究七鳃鳗鱼的生物化学家合作项目的例子。目标是找到一种联邦 mon 受体抑制剂来控制五大湖区的七鳃鳗种群。我们使用特征选择来了解哪些分子特征至关重要。通过使用机器学习分类器评估不同特征子集的性能,我们发现某些简单的特征(例如硫氧的数量)具有很高的信息量。添加更多特征并没有显着提高性能,这表明这些简单的特征对我们的分类任务来说是最重要的。这些知识指导我们筛选了数百万个分子,并最终找到了一种具有良好抑制作用的化合物。

在信息素信号中,很大一部分仅使用选定的特征。此示例展示了特征选择在识别有助于实现预期结果的关键组件或特征方面的强大功能。

现在,让我们更深入地研究特征选择及其相关性。特征选择是降维的一个子类,旨在减少数据集中特征或变量的数量,同时保留相关且有意义的信息。最终目标是简化数据集并提高计算效率、可解释性和预测性能。

特征选择之所以重要且有益,有几个原因。首先,维数灾难对机器学习提出了挑战。随着特征数量的增加,某些算法的性能可能会下降或变得更容易过度拟合。通过减少特征集,我们可以缓解这些问题并提高模型的准确性和可靠性,尤其是对于像 K 最近邻和决策树这样的算法。

其次,在处理大型数据集时,计算效率是一个重要的考虑因素。训练和测试机器学习模型的计算成本随着特征数量的增加而增加。通过选择相关特征的子集,我们可以在不牺牲性能的情况下减少计算负担并加快过程。

此外,特征选择允许更容易的数据收集。有时,与较大的特征集相比,简化的特征子集可以提供相似的预测性能。当收集数据变得具有挑战性或成本高昂时,这尤其有价值。例如,在医学诊断的背景下,识别易于获得但仍能产生准确结果的特征可以节省资源并使患者更容易获得该过程。

此外,特征选择有助于存储空间优化。随着数据生成的指数级增长,存储和管理大型数据集成为一个重要问题。通过选择相关功能,我们可以减少存储需求,而不会影响整体性能或从数据中获得的洞察力。

此外,可解释性起着至关重要的作用,尤其是在处理自动化系统或受监管领域时。特征选择有助于识别最具影响力和可解释性的特征,从而更好地理解和解释决策过程。在法律或道德要求要求对决策进行解释的情况下,特征选择可以促进合规性和问责制。

总而言之,降维,特别是特征选择,在各个领域提供了许多优势。通过选择信息量最大的特征,我们可以减轻维数灾难、提高计算效率、简化数据收集、优化存储空间并增强可解释性。这些优势有助于构建更准确、更高效的机器学习模型,并有助于更深入地理解复杂问题。

在接下来的讲座中,我们将探索特征提取作为另一种降维技术。特征提取涉及通过主成分分析 (PCA) 等方法将原始特征转换为一组新特征。这个过程使我们能够在降低维度的同时捕获相关信息。通过理解特征选择和特征提取,我们可以根据数据集和手头问题的具体特征和要求利用适当的技术。

因此,在下一讲中,我们将深入研究特征提取并探索其技术、优势和应用。请继续关注我们,继续探索降维的迷人世界及其对机器学习的影响。