基于 PCA 的异常情况检测
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用主体组件分析创建异常检测模型
类别: 异常情况检测
模块概述
本文介绍如何使用 机器学习 Studio (经典) 中基于 PCA 的异常情况检测模块,以基于 PCA (主体组件分析创建异常情况) 。
此模块可帮助你构建一个模型,该方案很容易从一个类获取训练数据,例如有效事务,但难以获取目标异常的足够样本。
例如,为了检测欺诈性交易,通常没有足够的欺诈示例进行训练,但有很多良好的交易示例。 基于 PCA 的异常 情况检测模块通过分析可用特征来确定构成"正常"类的内容,并应用距离指标来识别表示异常的情况,从而解决此问题。 这样,可以使用现有的不均衡数据来训练模型。
详细了解主成分分析
主体组件分析(通常缩写为 PCA)是机器学习中已建立的一种技术。 PCA 常用于探索性数据分析,因为它可以显示数据的内部结构并解释数据差异。
PCA 会分析包含多个变量的数据。 它将查找变量间的相关性,并确定最能捕获结果差异的值的组合。 这些组合的特征值用来创建一个更精简的特征空间,称为“主体组件”。
对于异常情况检测,将分析每个新输入,异常情况检测算法计算其对特征函数的投影,以及规范化的重构错误。 此规范化误差用作异常情况得分。 错误级别越高,实例越异常。
有关 PCA 工作原理以及异常情况检测实现的其他信息,请参阅以下文章:
用于主体组件分析的随机算法。 作者 Rokhlin、Szlan 和 Tygert
查找随机结构:用于 构造近似矩阵分解的概率算法 (PDF 下载) 。 作者 Halko、Martinsson 和 Tropp。
如何配置 PCA 异常情况检测
将基于 PCA 的异常情况检测 模块添加到工作室中的试验 (经典) 。 可以在异常情况检测机器学习"初始化模型"下找到此模块。
在基于 PCA 的异常情况检测模块的"属性"窗格中,单击"训练模式"选项,并指示是要使用一组特定的参数来训练模型,还是使用参数扫描来查找最佳参数。
单个参数:如果知道自己想要如何配置模型,请选择此选项并提供一组特定的值作为参数。
参数范围:如果不确定最佳参数并想要使用参数扫描,请使用优化模型超参数模块 选择此选项 。 训练程序会对指定的一系列设置进行一次测试,并确定生成最佳结果的设置组合。
PCA 中要使用的组件数, PCA 组件数的范围:指定要输出的输出功能或组件的数量。
决定要包含的组件数是使用 PCA 进行试验设计的重要组成部分。 一般指导原则是,不应包含与变量数相同的 PCA 组件数, 相反,应从较少数量的组件开始,并增大这些组件,直到满足某些条件。
如果不确定最佳值是什么,我们建议使用"参数范围"选项训练 异常情况检测 模型。
当输出组件的数量小于数据集中提供的特征列的数量时,将获得最佳结果。
指定在随机 PCA 训练期间要执行的过度抽样的量。 在异常情况检测问题中,数据不均衡导致难以应用标准 PCA 技术。 通过指定一定数量的过度抽样,你可以增加目标实例的数目。
如果指定 1,则不会执行任何过度抽样。 如果指定了高于 1 的任何值,则会生成更多用于训练模型的示例。
有两个选项,具体取决于是否使用参数扫描:
- 随机 PCA 的过度抽样参数:键入一个整数,用以表示少数类与正常类相比的过度抽样比率。 (单个参数训练方法 时 可用。)
- 随机 PCA 中使用的过度采样参数的范围:键入要尝试的一系列数字,或使用范围生成器通过滑块选择值。 (参数范围训练方法.)
注意
无法查看过度采样的数据集。 有关如何将过度采样与 PCA 一起使用的其他详细信息,请参阅 技术说明。
启用输入特征均值规范化:选择此选项以将所有输入特征规范化为平均值 0。 对于 PCA,通常建议规范化或缩放为零,因为 PCA 的目标是最大程度地提高变量之间的差异。
默认情况下选择此选项。 如果值已使用不同的方法或规模规范化,则取消选择此选项。
连接标记的训练数据集和训练模块之一:
- 如果将“创建训练器模式”选项设置为“单一参数”,请使用训练异常情况检测模型模块。
- 如果将"创建训练 程序模式" 选项设置为 "参数范围",请使用 "优化模型超参数" 模块。
注意
如果将参数范围传递给 训练异常情况检测模型,则它仅使用参数范围列表中的第一个值。
如果将一组参数值传递给优化模型超参数模块,则当它需要每个参数的一系列设置时,它会忽略这些值,并且使用学习器的默认值。
如果选择" 参数 范围"选项并输入任何参数的单个值,则即使其他参数在一系列值中更改,该单个值也在整个扫描过程中使用。
运行试验,或选择模块,然后单击"运行 所选项"。
结果
训练完成后,可以保存已训练的模型,或将其连接到评分 模型 模块以预测异常分数。
若要评估异常情况检测模型的结果,还需要执行一些额外的步骤:
确保评分列在两个数据集中都可用
如果尝试评估异常情况检测模型并收到错误"评分数据集中没有要比较的分数列",则意味着使用的是包含标签列但没有概率分数的典型评估数据集。 需要选择与异常情况检测模型的架构输出匹配的数据集,其中包括评分 标签 和评分 概率 列。
确保标记标签列
有时,与标签列关联的元数据在试验图中被删除。 如果发生这种情况,使用"评估模型"模块比较两个异常情况检测模型的结果时,可能会收到错误"评分数据集中没有标签列"或"评分数据集中没有要比较的标签列"。
可以通过在"评估模型"模块 之前添加"编辑元数据 " 模块来避免此错误 。 使用列选择器选择类列,在"字段" 下拉列表中选择" 标签 "。
规范化不同模型类型的分数
PCA 异常情况检测模型的预测始终在 [0,1] 范围内。 相比之下,单类 SVM 模块的输出是可能没有限制的未缩放分数。
因此,如果根据不同的算法比较模型,则必须始终规范化分数。 有关不同异常情况检测Azure AI 库规范化的示例,请参阅示例。
示例
有关如何在异常情况检测中使用的 PCA 的示例,请参阅Azure AI 库:
- 异常情况检测:信用风险:演示如何在数据中查找离群值。 此示例使用参数扫描来查找最佳模型。 然后,它将该模型应用于新数据,以识别可能表示欺诈的风险交易,并比较两个不同的异常情况检测模型。
技术说明
此算法使用 PCA 来近似包含普通类的子空间。 与数据协方差矩阵的顶部特征值相关联的特征向量横跨该子空间。 对于每个新输入,异常情况探测器首先计算其在特征向量上的投影,然后计算规范化的重构误差。 此误差是异常情况得分。 误差越大,实例越异常。 有关如何计算正常空间的详细信息,请参阅维基百科: 主体组件分析
模块参数
名称 | 类型 | 范围 | 可选 | 说明 | 默认 |
---|---|---|---|---|---|
训练模式 | CreateLearnerMode | 列表:单个参数|参数范围 | 必选 | 单个参数 | 指定学习器选项。 使用“单个参数”选项可以手动指定所有值。 使用“参数范围”选项可以整理可调参数。 |
要在 PCA 中使用的成分数 | Integer | 模式:单个参数 | 2 | 指定要在 PCA 中使用的成分数。 | |
随机化 PCA 的过度采样参数 | Integer | 模式:单个参数 | 2 | 指定随机化 PCA 训练的准确性参数。 | |
启用输入特征平均值规范化 | 逻辑类型 | 列表:True|False | 必须 | False | 指定是否将输入数据规范化为平均值为零。 |
PCA 成分数的范围 | ParameterRangeSettings | [1; 100] | 模式:参数范围 | pps-24共8万 | 指定要在 PCA 中使用的成分数的范围。 |
随机化 PCA 使用的过度采样参数的范围 | ParameterRangeSettings | [1; 100] | 模式:参数范围 | pps-24共8万 | 指定随机化 PCA 训练使用的准确性参数的范围。 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
未训练的模型 | ILearner 接口 | 未训练的基于 PCA 的异常检测模型 |
例外
异常 | 描述 |
---|---|
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
错误 0062 | 尝试将两个具有不同学习器类型的模型进行比较时,会出现异常。 |
错误 0047 | 如果传递给模块的某些数据集的特征列数过少,将出现异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。