规范化数据
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
重新缩放数字数据以约束数据集值符合标准范围
类别: 数据转换/缩放和减少
模块概述
本文介绍如何在 机器学习 Studio 中使用 Normalize Data 模块 (经典) ,通过规范化转换数据集。
规范化是一种通常用于机器学习数据准备的方法。 规范化旨在将数据集中数值列的值更改为使用通用范围,而不会扭曲值范围内的差异或丢失信息。 一些算法还需要通过规范化正确建立数据模型。
例如,假设输入数据集包含值范围从 0 到 1 的列以及另一个值范围从 10,000 到 100,000 的列。 如果在建模期间尝试将值作为特征合并,数字范围的巨大差异可能会导致问题。
“规范化”通过创建新值来保持源数据中的一般分布和比率,同时将值保持在模型中使用的所有数字列所采用的范围内,避免了这些问题。
本模块提供若干转换数值数据的选项:
- 可以将所有值更改为 0-1 范围,也可以将值转换为百分位数而不是绝对值。
- 可以将规范化应用于单个列或同一数据集中的多个列。
- 如果需要重复试验,或将相同的规范化步骤应用于其他数据,可以将步骤保存为规范化转换,并将其应用于具有相同架构的其他数据集。
警告
某些算法要求在训练模型之前对数据进行规范化。 其他算法执行自己的数据缩放或规范化。 因此,选择构建预测模型所使用的机器学习算法时,请务必在对训练数据应用规范化之前,查看算法的数据要求。
如何配置规范化数据
使用本模块时一次只能应用一个规范化方法。 因此,同一规范化方法会应用于所选的所有列。 若要使用不同的规范化方法,请使用“规范化数据”的第二个实例。
将 规范化数据 模块添加到试验中。 可以在“缩放和缩减”类别的“数据转换”下机器学习 Studio (经典) 中找到该模块。
连接包含所有数值的至少一列的数据集。
使用列选择器选择要规范化的数值列。 如果不选择单个列,则默认包括输入中的所有数值类型列,并对所有选定列应用同一规范化流程。
如果包括不应规范化的数值列,这可能会导致奇怪的结果! 请务必仔细检查列。
如果未检测到数值列,请检查列元数据,验证列的数据类型是否是支持的数值类型。
提示
若要确保将特定类型的列作为输入提供,请尝试使用选择数据集中的列模块,然后使用规范化数据。
选中时,对常量列使用 0:如果任何数值列包含一个不变值,请选择此选项。 这可确保在规范化操作中不会使用这样的列。
从 “转换方法 ”下拉列表中,选择要应用于所有选定列的单个数学函数。
Zscore:将所有值转换为 z-score。
使用以下公式转换列中的值:
分别针对每个列计算平均偏差和标准偏差。 使用总体标准偏差。
MinMax:min-max 规范化器将每个特征线性重缩放为 [0,1] 区间。
移动每个特征的值以重缩放为 [0,1] 区间,使最小值为 0,然后除以新的最大值(这是初始最大值和初始最小值之间的差异)。
使用以下公式转换列中的值:
Logistic:使用以下公式转换列中的值:
LogNormal:此选项将所有值转换为对数范围。
使用以下公式转换列中的值:
此处,μ 和 σ 为分布的参数,根据数据按经验计算为分别针对每一列的最大似然估计。
TanH:所有值转换为双曲正切。
使用以下公式转换列中的值:
运行试验,或双击 “规范化数据 ”模块,然后选择“ 运行选定”。
结果
“规范化数据”模块会生成两个输出:
若要查看已转换的值,右键单击模块,选择“已转换的数据集”,然后单击“可视化”。
默认情况下,值会立即转换。 如果要将转换的值与原始值进行比较,请使用 “添加列” 模块重新组合数据集并排查看列。
若要保存转换以便可以将同一规范化方法应用到另一类似数据集,请右键单击模块,选择“转换函数”,然后单击“另存为转换”。
然后,可以从左侧导航窗格的“转换”组中加载已保存的转换,并使用应用转换将其应用到具有相同架构的数据集。
示例
有关如何在机器学习中使用规范化的示例,请参阅 Azure AI 库:
- 信用风险预测:在此示例中,规范化应用于除类列以外的所有数值数据,即信用风险评分。 此示例使用 tanh 转换,它将所有数值特征转换为 0-1 范围内的值。
技术说明
此模块仅支持 How to 节中列出的标准规范化方法,并且不支持矩阵规范化或其他复杂转换。
如果需要创建自定义规范化方法,可以使用 执行 R 脚本 或 执行 Python 脚本 模块来计算和应用转换。
应用规范化的算法
规范化功能,使其使用通用缩放是许多机器学习算法的一般要求。
在线性分类算法中,各实例被视为多维空间中的向量。 由于原始数据的取值范围差别很大,如果不进行规范化,有些目标函数便无法正常工作。 例如,如果其中一个特征的取值范围特别广,则点之间的距离由此特定特征管理。
因此,数字特征应进行规范化,以便每个特征大约按比例影响最终距离。 这可显著提高速度,并可提供明显的精度优势。
使用 逻辑回归 和 平均感知器 算法时,默认情况下,特征在训练前规范化。
其他阅读材料和资源
如果不确定哪种类型的规范化适合数据,请参阅以下资源:
推荐“我的数据模块:Azure ML团队成员的此自定义模块评估数据集,并建议执行清理和缩放数据的步骤。
功能缩放:维基百科中的本文介绍了用于规范化数值数据的基本方法。
数据挖掘的数据准备 深入介绍了许多数据准备步骤。 有关数据规范化的讨论,请参阅第 7 章。
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
转换方法 | any | TransformationMethods | ZScore | 选择用于缩放的数学法 |
要转换的列 | any | ColumnSelection | NumericAll | 选择应向其应用所选转换的所有列 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
转换后的数据集 | 数据表 | 转换后的数据集 |
转换函数 | ITransform 接口 | 可以应用到其他数据集的转换函数的定义 |
例外
异常 | 描述 |
---|---|
错误 0001 | 如果找不到数据集的一个或多个指定列,将出现异常。 |
错误 0003 | 如果一个或多个输入为 NULL 或为空,将出现异常。 |
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
错误 0020 | 如果传递给模块的某些数据集的列数过少,将出现异常。 |
错误 0021 | 如果传递给模块的某些数据集的行数过少,将出现异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。