Driverless AI 中的抽样¶
数据抽样¶
Driverless AI 不执行任何类型的数据抽样,除非数据集很大或高度不平衡(为提高准确度)。何种数据集可被视为大数据集取决于 config.toml file 或“专家设置”中的准确度设置和 statistical_threshold_data_size_large
参数。设置实验时,您可以通过查看实验预览来了解是否将对数据进行抽样。在下方的实验预览中,可以看到分别对数据抽样至 500 万行(最终模型)和 10 万行(实验的特征演变部分)。
如果 Driverless AI 决定根据这些设置和数据大小对数据进行抽样,则在实验开始(和/或整个实验过程中)执行以下类型的抽样:
用于回归问题的随机抽样
用于分类问题的分层抽样
针对二元问题的不平衡抽样,在这类问题中,目标分布不平衡,因此会启用不平衡抽样方式(请勿将
imbalance_sampling_method
设置为"off"
)
不平衡模型抽样方法¶
不平衡抽样方法通过提供高度不平衡结果(构建流失模型、欺诈模型、罕见事件模型等),可帮助分析二元分类用例
在 Driverless AI 中,不平衡抽样是一种可选用的方法,使用名为 不平衡模型 的特殊自定义插件实现。有两种不平衡模型可用:ImbalancedLightGBMModel
和 ImbalancedXGBoostGBMModel
. 两种模型均在其 fit() 方法内执行重复的分层抽样(装袋法),以尝试加速构建模型并提高两个类别之间决策边界的分辨率。由于这些模型呈现了与原始数据优先级不同的训练数据集,因此需要进行概率修正,且修正将被作为 predict() 方法中后处理流程的一部分执行。
当启用不平衡抽样时,对于特征演变阶段或最终模型管道,均不会在实验开始时执行任何抽样。而是在模型拟合期间执行抽样(通过替换),并且此模型将呈现比原始数据更平衡的目标类别分布。由于样本通常比原始数据小很多,可多次重复此过程,并且可平均每个内部模型的预测结果,以提高准确度(装袋法)。默认会自动确定袋子数量,但是可以在专家设置中指定此值 (imbalance_sampling_number_of_bags=-1
表示自动)。关于 "over_under_sampling"
,每个袋子在少数和多数类别之间的平衡可能会有细微的差别。
不平衡抽样有多种设置:
禁用(默认设置为
imbalance_sampling_method="off"
)自动 (
imbalance_sampling_method="auto"
)。以下两种方式的结合。对少数类别和多数类别均进行欠抽样和过抽样,以在每个抽样袋中大致达到类别平衡 (
imbalance_sampling_method="over_under_sampling"
)。如果原始数据不平衡比例为 500:10000,则此方法可抽取 1000:1500 个样本放入第一个袋子中,抽取 500:400 个样本放入第二个袋子中,依此类推。对多数类别进行欠抽样,以在每个样本袋中达到精准的类别平衡 (
imbalance_sampling_method="under_sampling"
)。在不平衡比相同的示例中,将为每个袋子创建 500:500 个样本。然后,每个袋子将从每个类别中抽取 500 行进行替换,因此每个袋子仍然不同。
不平衡量可控制极端不平衡模型在实验中的使用方式(如果 imbalance_sampling_method is not "off"
):
“不平衡”的默认定义为:当多数类别的常见程度为少数类别的 5 倍时,即为不平衡(
imbalance_ratio_sampling_threshold=5
,可配置)。在这种情况下,不平衡模型将被添加至模型列表中,以供实验选择。“高度不平衡”的定义为:当多数类别的常见程度为少数类别的 25 倍时,即为高度不平衡(
heavy_imbalance_ratio_sampling_threshold=25
,可配置)。在高度不平衡的情况下,将仅使用不平衡模型。
请注意:
数据必须足够大才能启用不平衡抽样:默认将
imbalance_sampling_threshold_min_rows_original
设置为 100,000 行。如果
imbalance_sampling_number_of_bags=-1``(自动)且 ``imbalance_sampling_method="auto"
,则袋子数量将根据实验的准确度设置和所有袋子的总大小自动确定,并由imbalance_sampling_max_multiple_data_size
控制,默认值为1
. 因此默认所有袋子的总数将不会大于原始数据的 1 倍。对于 1:19 的不平衡比,每个平衡的 1:1 样本将占数据的 10%,因此最多需要 10 个此类 1:1 的袋子(或者在平衡有差异或略随机的情况下,大概需要 10 个袋子),以达到此限制。这个数量对于特征演变而言仍然有点多,并且削减的代价很高。因此,还有另一种为特征演变将数量限制为 3(默认值)个的方式。可根据您的偏好随意调整。如果
imbalance_sampling_number_of_bags=-1``(自动)且 ``imbalance_sampling_method="over_under_sampling"
或"under_sampling"
,则袋子数量将等于实验的准确度设置(准确度为 7,则将使用 7 个袋子)。袋子数量上限可针对特征演变 (
imbalance_sampling_max_number_of_bags_feature_evolution
) 单独指定,以及通过 (imbalance_sampling_max_number_of_bags
) 进行全局(即,最终模型)设置,并且这两种设置都将严格执行。用户可以控制少数类别的目标分数,以此来平衡目标类别分布,而非通过默认值
imbalance_sampling_target_minority_fraction=-1``(与将其设置为 0.5 相同)平衡目标类别分布。因此,如果数据开始便呈现 1:1000 的不平衡比例,而您希望得到不平衡比例为 1:9 的模型,则指定 ``imbalance_sampling_target_minority_fraction=0.1
.若要强制使所有模型的的袋子数量均为 15 个,则可根据您的偏好将
imbalance_sampling_number_of_bags=imbalance_sampling_max_number_of_bags_feature_evolution=imbalance_sampling_max_number_of_bags=15
和imbalance_sampling_method``设置为 "over_under_sampling" 或 ``under_sampling
.默认情况下,如果不平衡比(多数比少数)大于 2,Driverless AI 将向您发送通知,此功能由
imbalance_ratio_notification_threshold
控制。上述每个参数均在 config.toml 文件中有详细说明,并显示在专家选项中(鼠标悬停时显示),每个实际不平衡模型均在实验日志中显示各自的参数。
总结:
Driverless AI 中有多个选项可控制不平衡抽样。在大部分情况下,只需设置 imbalance_sampling_method="auto"
并与未使用不平衡抽样方法 imbalance_sampling_method="off"
的实验进行结果比较即可。但是,在许多情况下,不平衡模型并不会比常规的 “full” 模型表现得更好(特别是在多数类别示例对结果很重要的情况下,任何数量的抽样均将造成损害)。尽管如此,尝试使用不平衡抽样方法仍从不失为一个好主意,特别是在数据集特别大且高度不平衡的情况下。