编辑元数据
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
编辑与数据集中的列关联的元数据
类别: 数据转换/操作
模块概述
本文介绍如何使用 机器学习 Studio (经典) 中的编辑元数据模块来更改与数据集中的列关联的元数据。 数据集中的值和数据类型实际上不会更改;更改的是数据中的元数据机器学习告知下游组件如何使用列。
典型的元数据更改可能包括:
将布尔值或数字列视为分类值
指示哪一列包含类标签或者你想要分类或预测的值
将列标记为特征
将日期/时间值更改为数值,反之亦然
重命名列
随时 使用 编辑元数据修改列的定义,通常满足下游模块的要求。 例如,某些模块只能使用特定的数据类型,或者需要列上的标志,例如 IsFeature
或 IsCategorical
。
执行所需的操作后,你可以重置元数据其原始状态。
如何配置编辑元数据
在 机器学习 Studio (经典) 中,将"编辑元数据"模块添加到试验,并连接要更新的数据集。 可以在"数据转换 "下的"操作"类别中 找到 它。
单击 "启动列选择器 ",然后选择要处理的列或列集。 可以按名称或索引单独选择列,也可以按类型选择一组列。
提示
在使用列索引时需要帮助? 请参阅 技术说明 部分。
如果需要将不同的数据类型分配到所选列,请选择“数据类型”选项。 某些操作可能需要更改数据类型:例如,如果源数据集将数字作为文本处理,则必须在使用数学运算之前将它们更改为数值数据类型。
支持的数据类型为 、
String
Integer
、Floating point
、Boolean
、DateTime
和TimeSpan
。如果选择了多个列,则必须将元数据更改应用于 所有选定的 列。 例如,假设选择 2-3 个数字列。 可以将它们全部更改为字符串数据类型,然后通过一个操作重命名它们。 但是,不能将一列更改为字符串数据类型,将另一列从浮点数更改为整数。
如果不指定新的数据类型,则列元数据不变。
数据类型的更改仅影响与数据集关联的元数据,以及数据在下游操作中的处理方式。 除非你对列执行其他操作(例如,舍入),否则不会变更实际的列值。 你随时都可以通过使用编辑元数据来重置列数据类型来恢复原始数据类型。
注意
如果将任何类型的数字更改为“日期时间”类型,请将“日期时间”格式保留空白。 目前无法指定目标数据格式。
机器学习数字与受支持的 .NET DateTime 对象之一兼容,则用户可以将日期转换为数字或数字转换为日期。 有关详细信息,请参阅技术 说明 部分。
选择“分类”选项,指定应将所选列中的值视为类别。
例如,你可能有一列包含数字 0、1 和 2,但知道数字实际上表示"冒烟器"、"非冒烟者"和"未知"。 在这种情况下,通过将列标记为分类,可以确保这些值不用于数值计算,而仅用于对数据进行分组。
如果要更改模型使用数据的方式,机器学习"字段"选项。
功能:使用此选项将列标记为功能,用于仅对功能列进行操作的模块。 默认情况下,最初会将所有列视为特征。
标签:使用此选项标记标签 (可预测属性或目标变量) 。 许多模块要求数据集中 (一个) 标签列。
在许多情况下,机器学习推断列是否包含类标签,但通过设置此元数据,可以确保正确标识列。 设置此选项不会更改数据值,只会更改某些机器学习算法处理数据的方式。
权重:将此选项与数值数据一起用于指示列值表示用于机器学习评分或训练操作中的权重。 数据集中只能存在一个权重列,并且该列必须是数值列。 此选项仅适用于以下模型:Two-Class回归、Two-Class支持向量机Two-Class神经网络。
使用以下选项可以清除前面所做的选择,并将元数据还原为默认值。
清除特征:使用此选项可以删除特征标志。
由于所有列最初都被视为特征,因此对于执行数学运算的模块,可能需要使用此选项来防止将数值列视为变量。
清除标签:使用此选项可从指定的列中删除标签元数据。
清除评分:使用此选项可从指定的列中删除评分元数据。
目前,无法将列显式标记为分数,但无法机器学习。 但是,某些操作会导致在内部将列标记为评分。 此外,自定义 R 模块可能会输出评分值。
清除权重:使用此选项从指定 列 中删除权重元数据。
对于 "新建列名",键入所选列的新名称。
列名只能使用 UTF-8 编码支持的字符。 不允许空字符串、null 或完全由空格构成的名称。
若要重命名多个列,请根据列索引的顺序以逗号分隔列表键入名称。
必须重命名所有选定列。 不能省略或跳过列。
运行试验。
示例
有关在准备数据和生成模型时如何使用编辑元数据的示例,请参阅Azure AI 库:
疾病检测:联接到数据集后更改列名。 "患者 ID"列也标记为"分类",以确保不在计算中使用,而是不作为字符串值进行处理。
Twitter 情绪分析:演示如何使用编辑 元数据 来确保将列视为特征。 稍后在试验中,将清除功能元数据。
数据处理和分析:此示例中,编辑元数据用于定义从网页加载的数据的新列名。
技术说明
本部分包含已知问题、常见问题以及常见解决方法的一些示例。
已知问题
不支持自定义元数据。 不能使用机器学习中的自定义元数据,也不能编辑编辑元数据外部的列元数据。 例如,你无法添加元数据,指示列是唯一标识符,或者添加其他描述性特性。 机器学习仅支持在 R 中使用的元数据特性来处理因素、功能、权重和标签。
数据类型不受支持。 以下数值数据类型不受支持: Double (decimal) 和 TimeStamp。
标识计分列。 目前, 编辑元数据 中没有用于将列标记为包含 分数的选项。 但是,您可以使用 " 执行 R 脚本 " 模块,其中包含类似于下面的脚本,以指示列包含分数:
dataset <- maml.mapInputPort(1) attr(dataset$x, "label.type")= "True Labels" attr(dataset$y, "feature.channel")= "Multiclass Classification Scores" attr(dataset$y, "score.type")= "Assigned Labels" maml.mapOutputPort("dataset");
Datetime 格式的问题。 机器学习使用的基础
datetime
数据类型是POSIXct
。如果默认分析器可以分析列中的所有日期,则该列将导入并被视为字符串数据。
如果尝试使用 "编辑元数据" 模块将列转换为
DateTime
,则表示日期的格式默认情况下不会接受 .net。 在这种情况下,我们建议使用 "执行 R 脚本" 模块或 "应用 SQL 转换" 模块将列转换为默认分析器接受的格式。
使用列索引选择列
在非常大的数据集中,手动键入或选择所有列名称是不可行的。 使用列索引是一种可用于指定多个列的快捷方式。 本部分提供有关使用列索引的一些提示。
例如,打开列选择器,单击 " 使用规则",选择 " 包括 " 和 " 列索引",然后键入一个或一系列数字,如下所示:
- 键入
1-20
以选择前20列 - 键入
5-20
以选择从5开始,并包含列20的列范围。 - 键入
1,5,10,15
以选择不连续的列 - 键入
1-2, 5
以选择列1、2和5,跳过第3和第4列 - 不能键入大于数据集中可用的列数的索引值。
以下试验提供了一些用于选择和修改多个列的其他方法示例:
二元分类:乳腺癌症检测:原始数据包含从电子表格导入期间生成的多个空白列。 通过在 拆分数据 模块中指定列1-11 来删除额外的列。
从 UCI 下载数据集:演示如何使用 " 手动输入数据 " 模块以列表的形式提供列名,然后使用 " 执行 R 脚本 " 模块将列表作为标题插入到数据集。
Regex 选择列:此试验提供了一个自定义模块,使你可以将正则表达式应用于列名称。 您可以使用此模块作为输入来 编辑元数据。
用于修改列名称的替代方法
如果要重命名的列很多,可以使用 "执行 R 脚本" 模块,或者 "应用 SQL 转换" 模块。
使用 R 脚本
机器学习所使用的数据集将作为数据传递到此模块中,这意味着您可以使用 R colnames()
函数和其他相关 r 函数来列出或更改列名。
例如,下面的代码创建一个新的列名列表,然后将该列表应用于输入数据集以生成新的列标题。
irisdata <- maml.mapInputPort(1);
newnames <- c("CLASS", "SEPAL LENGTH", "SEPAL WIDTH", "PETAL LENGTH", "PETAL WIDTH");
colnames(irisdata) = newnames
maml.mapOutputPort("irisdata");
下面的示例使用 R 中的正则表达式全局替换列名称 irisdata
中指定字符串的所有实例:
# Map input dataset to variable
newirisdata <- maml.mapInputPort(1) # class: data.frame
names(newirisdata) <- gsub("col", "iris", names(newirisdata))
maml.mapOutputPort("newirisdata");
使用 SQL
下面的示例使用 dataset 作为输入,然后使用 as 关键字更改列名称。
SELECT col1 as [C1],
col2 as [C2],
col3 as [C3],
col4 as [C4],
col5 as [C5]
FROM t1;
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据集 |
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
列 | 任意 | ColumnSelection | 选择更改要应用到的列。 | |
数据类型 | 列表 | 元数据编辑器数据类型 | 不变 | 指定列的新数据类型。 |
分类 | 列表 | 分类元数据编辑器 | 不变 | 指示是否应将列标记为分类。 |
字段 | 列表 | 元数据编辑器标志 | 不变 | 指定学习算法是否应将列视为特征或标签。 |
新列名称 | any | String | 键入列的新名称。 |
输出
名称 | 类型 | 说明 |
---|---|---|
结果数据集 | 数据表 | 包含已更改元数据的数据集 |
例外
异常 | 描述 |
---|---|
错误 0003 | 如果一个或多个输入数据集为 null 或为空,则会发生异常。 |
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
错误 0020 | 如果传递给模块的某些数据集中的列数太少,则会发生异常。 |
错误 0031 | 如果列集中的列数小于所需列数,则会发生异常。 |
错误 0027 | 如果两个对象必须具有相同的大小,但其大小却不相同,则会发生异常。 |
错误 0028 | 如果列集包含重复的列名称,但不允许重复的名称,则会发生异常。 |
错误 0037 | 如果指定了多个标签列,但只允许一个标签列,则会发生异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。