基于筛选器的特征选择

重要

对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习

从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。

ML 工作室(经典)文档即将停用,将来可能不会更新。

标识数据集中具有最大预测能力的特征

类别: 特征选择模块

注意

适用于:仅限机器学习 Studio (经典)

可在 Azure 机器学习设计器中获取类似的拖放模块。

模块概述

本文介绍如何使用机器学习 Studio (经典) 中的 "基于筛选器的功能选择" 模块来标识输入数据集中具有最高预测能力的列。

通常, 功能选择 是指在给定指定输出的情况下将统计测试应用到输入的过程,以确定哪些列对输出的预测性更高。 " 基于筛选器的特征选择 " 模块提供了多个要从中进行选择的特征选择算法,包括相关方法,例如 Pearsons 或肯德尔的相关信息、相互信息分数和χ平方值。 机器学习还支持功能值计数作为信息值的指示器。

使用 " 基于筛选器的特征选择 " 模块时,需要提供数据集,标识包含标签或依赖变量的列,然后指定用于测量特征重要性的单个方法。

该模块输出包含最佳特征列(按预测能力排名)的数据集。 它还根据所选的指标输出特征的名称及其评分。

什么是基于筛选器的功能选择,为什么要使用它?

此功能选择模块称为 "基于筛选器",因为您使用所选的度量值来标识不相关的属性,并从您的模型中筛选出冗余列。 选择适合数据的单个统计度量后,该模块将计算每个特征列的评分。 返回的列已按其特征评分排名。

选择适当的特征可能会改善分类的准确度和效率。

通常只使用具有最高评分的列来生成预测模型。 可将特征选择评分不佳的列保留在数据集中,并在生成模型时将其忽略。

如何选择特征选择指标

基于筛选器的特征选择提供各种指标,用于评估每个列中的信息值。 本部分提供每个指标的一般说明以及应用方式。 有关使用每个指标的其他要求,请在 " 技术说明 " 部分和配置每个模块的 说明 中声明。

  • 皮尔逊相关

    皮尔逊相关统计(或皮尔逊相关系数)在统计模型中也称为 r 值。 对于任意两个变量,它将返回指示相关性强度的值

    皮尔逊相关系数的计算方式是:将两个变量的协方差除以其标准偏差的积。 两个变量的规模变化不影响该系数。

  • 互信息

    相互信息分数测量变量的分布,以减少其他变量值的不确定性:即标签。 设计了互信息评分的许多变化因素以适应不同的分布。

    互信息评分在特征选择中特别有用,因为它可以最大化联合分布与包含多个维度的数据集中的目标变量之间的互信息。

  • 肯德尔相关

    肯德尔排名相关是测量不同顺序变量排名之间或者相同的不同排名之间的关系的统计法。 换而言之,它可以测量按数量排名后的顺序的相似性。 此系数和斯皮尔曼相关系数适用于非参数数据和非正常分布数据。

  • 斯皮尔曼相关

    斯皮尔曼系数是测量两个变量之间的相关性的非参数统计法,有时以希腊文字母 rho 表示。 斯皮尔曼系数表示两个变量单调相关的程度。 它也称为斯皮尔曼排名相关,因为它可用于顺序变量。

  • Χ2

    双向卡方测试是测量预期值与实际结果的接近程度的一种统计方法。 该方法假设变量是随机的,并且是从独立变量的足够样本中抽取的。 生成的卡方统计信息指示实际结果与预期(随机)结果之间的差距。

  • 费舍尔评分

    费舍尔评分(也称为费舍尔法,或费舍尔组合概率评分)有时称作信息评分,因为它表示一个变量提供的有关它依赖的某个未知参数的信息量。

    评分的计算方式是测量信息预期值与测得值之间的方差。 如果方差最小化,则信息最大化。 由于预期评分为零,费舍尔信息也即评分的方差。

  • 基于计数

    基于计数的特征选择是查找有关预测值的信息的简单而相对强大的方法。 基本的基本概念基于计数的特征化很简单:通过计算列中单个值的计数,你可以了解值的分布和权重,从此了解哪些列包含最重要的信息。

    基于计数的特征选择是功能选择的非监督方法,这意味着您不需要标签列。 此方法还可以减少数据的维数,而不会丢失信息。

    有关如何创建基于计数的功能以及它们在机器学习中有用的原因的详细信息,请参阅带计数的 Learning

提示

如果需要为自定义功能选择方法使用不同的选项,请使用 " 执行 R 脚本 " 模块。

如何配置“基于筛选器的特征选择”

此模块提供了两种方法来确定功能分数:

使用传统统计指标生成特征评分

  1. 向试验中添加 基于筛选器的特征选择 模块。 可以在 Studio (经典) 中的 " 功能选择 " 类别中找到它。

  2. 连接至少包含两个列(潜在特征)的输入数据集。

    若要确保应该分析列并生成功能评分,请使用 编辑元数据 模块来设置 IsFeature 属性。

    重要

    确保作为输入提供的列是可能的特征。 例如,包含单个值的列没有信息值。

    如果知道有些列会产生不良功能,您可以将其从选择的列中删除。 你还可以使用 编辑元数据 模块将它们标记为 分类

  3. 对于“特征评分方法”,请选择以下已建立的统计方法之一,以便在计算评分时使用。

    方法 要求
    皮尔逊相关 标签可以是文本或数字。 特征必须是数字。
    互信息 标签和特征可以是文本或数字。 使用此方法来计算两个分类列的特征重要性。
    肯德尔相关 标签可以是文本或数字,但功能必须是数值。
    斯皮尔曼相关 标签可以是文本或数字,但功能必须是数值。
    卡方 标签和特征可以是文本或数字。 使用此方法来计算两个分类列的特征重要性。
    费舍尔评分 标签可以是文本或数字,但特征必须是数字。
    计数 请参阅: 使用Count-Based功能选择

    提示

    如果更改所选指标,将重置所有其他选择,因此请务必先设置此选项!)

  4. 选择" 仅对特征列 进行操作"选项,仅为以前标记为特征的列生成分数。

    如果取消选择此选项,模块将为满足条件的任何列创建分数,最多为所需特征数中指定的 列数

  5. 对于"目标列",单击"启动列选择器"以按名称或索引选择标签列 (索引从一开始) 。

    涉及到统计相关性的所有方法都需要一个标签列。 如果未选择一个或多个标签列,模块将返回设计时错误。

  6. 对于 "所需功能数",键入要作为结果返回的特征列数。

    • 你可以指定的最小特征数为 1,但我们建议你增加此值。

    • 如果指定的所需特征数大于数据集中的列数,则返回所有特征,即使是分数为零的特征。

    • 如果指定的结果列数少于特征列数,则功能按分数降序排名,并且仅返回排名前的特征。

  7. 运行试验,或选择"基于 筛选器的特征选择 "模块,然后单击"运行 所选项"

功能选择的结果

处理完成后:

  • 若要查看分析的功能列及其分数的完整列表,请右键单击模块, 选择"功能",然后单击"可视化 "

  • 若要查看根据特征选择条件生成的数据集,请右键单击该模块,选择 "数据集",然后单击"可视化 "

如果数据集包含的列数少于预期,请检查模块设置以及作为输入提供的列的数据类型。 例如,如果将“所需特征数”设置为 1,则输出数据集只包含两列:标签列,以及排名最高的特征列。

使用基于计数的特征选择

  1. 将" 基于筛选器的特征选择" 模块添加到试验。 可以在"功能选择"组中"工作室 (经典) 模块 列表中找到它

  2. 连接包含至少两个可能特征的列的输入数据集。

  3. "功能 评分方法"下拉列表中的统计方法列表中选择 "基于计数 "。

  4. 对于 "最小非零元素数",指示输出中要包含的最小特征列数。

    默认情况下,模块输出满足要求的所有列。 模块无法输出任何分数为零的列。

  5. 运行试验,或仅选择模块,然后单击"运行 选定项"

基于计数的特征选择结果

  • 若要查看特征列的列表及其分数,请右键单击模块, 选择"功能",然后单击"可视化 "
  • 若要查看包含已分析列的数据集,请右键单击该模块,选择" 数据集",然后单击"可视化 "

与其他方法不同, 基于计数 的特征选择方法不会按最高分数对变量进行排名,而是按原始顺序返回所有分数为非零的变量。

字符串特征始终获得零 (0) 分数,因此不会输出。

示例

可以在以下示例中查看如何使用功能选择 Azure AI 库

  • 文本分类;在此示例的第三个步骤中,基于 筛选器 的特征选择用于识别 15 个最佳功能。 特征哈希用于将文本文档转换为数值向量。 然后,对矢量特征使用 Pearson 的相关性。

  • 机器学习特征选择和特征工程:本文介绍机器学习中的特征选择和特征工程。

若要查看特征分数的示例,请参阅 比较的分数表

技术说明

可以在"数据 转换"下的"筛选器"类别中 找到此 模块。

实现详细信息

如果对数字特征和分类标签使用"Pearson 相关"、Kendall Correlation 或 Spearman Correlation,则功能分数的计算方式如下:

  1. 对于分类列中的每个级别,将计算数字列的条件平均值。

  2. 将条件平均列与数字列相关联。

要求

  • 不能为指定为标签或评分列的任何列生成特征选择分数。

  • 如果尝试将某种评分方法用于该方法不支持的数据类型列,模块将引发错误,或者向列分配零评分。

  • 如果某列包含逻辑 (true/false) 值,则会将其处理为 True = 1,False = 0。

  • 如果某列已指定为“标签”“评分”,则该列不能是特征列。

如何处理缺失值

  • 不能将缺少所有值的任何列指定为目标(标签)列。

  • 如果某列包含缺少的值,在计算该列的评分时将忽略这些值。

  • 如果指定为特征列的列缺少所有值,则分配零评分。

比较的分数表

为了让你了解使用不同指标时分数的比较方式,下表根据依赖变量 "highway-mpg"提供了汽车价格数据集中多个特征的一些特征选择分数。

功能列 Pearson 分数 计数分数 Kendall 分数 相互信息
highway-mpg 1 205 1 1
city-mpg 0.971337 205 0.892472 0.640386
curb-weight 0.797465 171 0.673447 0.326247
horsepower 0.770908 203 0.728289 0.448222
price 0.704692 201 0.651805 0.321788
length 0.704662205 205 0.53193 0.281317
engine-size 0.67747 205 0.581816 0.342399
width 0.677218 205 0.525585 0.285006
bore 0.594572 201 0.467345 0.263846
wheel-base 0.544082 205 0.407696 0.250641
compression-ratio 0.265201 205 0.337031 0.288459
fuel-system na na na 0.308135
make na na na 0.213872
drive-轮 na na na 0.213171
高度 na na na 0.1924
normalized-losses na na na 0.181734
symboling na na na 0.159521
柱面数 na na na 0.154731
engine-type na na na 0.135641
愿望 na na na 0.068217
body-style na na na 0.06369
fuel-type na na na 0.049971
门数 na na na 0.017459
engine-location na na na 0.010166
  • 可以针对所有列类型(包括字符串)创建相互信息分数。

  • 此表中包含的其他分数(例如 Pearson 的相关性或基于计数的特征选择)需要数值。 字符串特征的分数为 0,因此不包括在输出中。 有关异常,请参阅 技术说明 部分。

  • 基于计数的方法不会将标签列与特征列有任何不同处理。

预期输入

名称 类型 说明
数据集 数据表 输入数据集

模块参数

名称 范围 类型 默认 说明
特征评分方法 列表 评分方法 选择用于评分的方法
仅对特征列执行运算 任意 布尔 指示是否仅在评分过程中使用特征列
目标列 任意 ColumnSelection 指定目标列
所需的特征数 >=1 Integer 1 指定要在结果中输出的特征数
非零元素的最小数目 >=1 Integer 1 指定要输出的特征数(对于 CountBased 方法)

Outputs

名称 类型 说明
过滤的数据集 数据表 过滤的数据集
功能 数据表 输出列名称和特征选择评分

例外

异常 描述
错误 0001 如果找不到数据集的一个或多个指定列,将出现异常。
错误 0003 如果一个或多个输入为 NULL 或为空,将出现异常。
错误 0004 如果参数小于或等于特定值,将出现异常。
错误 0017 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。

有关特定于工作室和经典 (模块) 的列表,请参阅机器学习代码

有关 API 异常的列表,请参阅机器学习 REST API代码

另请参阅

功能选择
费舍尔线性判别分析
A-Z 模块列表