AutoGluon 表格数据常见问题解答

如何获得最准确的预测?

请参阅表格数据基础教程中的“最大化预测性能”

我能在 Mac/Windows 上运行 AutoGluon Tabular 吗?

可以!

我可以使用 GPU 进行模型训练吗?

可以!AutoGluon 使用的大多数模型都支持 GPU 训练,包括 LightGBM、CatBoost、XGBoost 和 FastAI 神经网络。

要启用 GPU 训练,请在 predictor.fit 中指定参数 num_gpus=某个值。这将为所有支持 GPU 训练的模型启用 GPU 训练。多 GPU 训练仍在实验中。

对于这些模型中的大多数,需要安装 CUDA,并且有些模型可能需要特殊安装(例如 LightGBM)才能兼容 GPU 训练。有关更多详细信息,请参阅安装说明

哪种机器最适合运行 AutoGluon Tabular?

作为一个开源库,AutoGluon 可以在包括您的笔记本电脑在内的任何机器上运行。目前,训练 TabularPredictor 不需要使用 GPU,因此 CPU 机器也可以(相比之下,MultiModalPredictor 需要 GPU)。大多数表格数据问题是由于内存不足引起的,因此我们建议在内存尽可能多的机器上运行。例如,如果使用 AWS 实例进行表格数据处理:我们推荐 M5 实例,其中 m5.24xlarge 机器应该能够处理大多数数据集。

如何解决内存问题?

请参阅深入教程中的“如果遇到内存问题”

如何解决磁盘空间问题?

请参阅深入教程中的“如果遇到磁盘空间问题”

如何减少训练所需的时间?

predictor.fit 中指定 time_limit 参数,设置为您愿意等待的秒数(通常时间限制越长,预测性能越好)。您也可以尝试 predictor.fitpresets 参数的其他设置,并且可以通过 train_data.sample(n=子样本大小) 对数据进行子抽样以进行快速试运行。如果特定类型的模型在您的数据上训练时间比其他类型的模型长得多,您可以通过在 fit()excluded_model_types 参数中指定其短名称,告诉 AutoGluon 不训练任何此类模型。

由于许多减少内存使用的方法也减少了训练时间,因此也请查看:深入教程中的“如果遇到内存问题”

如何减少预测所需的时间?

请参阅深入教程中的“加速推理”

AutoGluon Tabular 的内部工作原理是怎样的?

详细信息请参见以下论文

AutoGluon-Tabular: Robust and Accurate AutoML for Structured DataArxiv, 2020。

如何查看 fit 过程中更详细的日志?

fit() 中指定参数 verbosity = 4

AutoGluon 使用什么模型进行预测?

请参阅深入教程中的“预测选项”

预测概率对应于哪些类别?

如果您查看预测概率输出的 pandas DataFrame 列名,这将变得显而易见

predictor.predict_proba(test_data)

对于二分类和多分类

predictor.class_labels

是一个类别列表,其顺序与 predict_proba(as_pandas=False) 输出(当它是 Numpy 数组时)的列相对应。

您可以通过以下方式查看 AutoGluon 在二分类中将哪个类别视为正类别

predictor.positive_class

正类别也可以通过 predictor.class_labels[-1] 获取。predict_proba(as_multiclass=False) 对于二分类的输出是正类别的概率。

如何使用 AutoGluon 进行可解释性分析?

请参阅深入教程中的“可解释性 (特征重要性)”,这可以帮助您量化每个特征对 AutoGluon 预测准确性的贡献程度。

此外,您可以使用Shapely 值解释特定的 AutoGluon 预测。演示此功能的笔记本位于:https://github.com/autogluon/autogluon/tree/master/examples/tabular/interpret。我们建议从该文件夹中包含的笔记本“SHAP with AutoGluon-Tabular”开始,它演示了如何处理多分类任务和包含分类特征的数据。

如何对一个无法完全加载到内存中的文件执行推理?

Tabular Dataset API 与 pandas DataFrames 协同工作,支持将数据分块处理,使其适应内存大小。下面是一个基于分块的推理示例

from autogluon.tabular import TabularDataset, TabularPredictor
import pandas as pd
import requests

train_data = TabularDataset('https://autogluon.s3.amazonaws.com/datasets/Inc/train.csv')
predictor = TabularPredictor(label='class').fit(train_data.sample(n=100, random_state=0), hyperparameters={'GBM': {}})

# Get the test dataset, if you are working with local data then omit the next two lines
r = requests.get('https://autogluon.s3.amazonaws.com/datasets/Inc/test.csv', allow_redirects=True)
open('test.csv', 'wb').write(r.content)
reader = pd.read_csv('test.csv', chunksize=1024)
y_pred = []
y_true = []
for df_chunk in reader:
    y_pred.append(predictor.predict(df_chunk))
    y_true.append(df_chunk['class'])
y_pred = pd.concat(y_pred, axis=0, ignore_index=True)
y_true = pd.concat(y_true, axis=0, ignore_index=True)
predictor.evaluate_predictions(y_true=y_true, y_pred=y_pred)

这里我们将测试数据分成最多 1024 行的块,但您可以选择更大的尺寸,只要它适合您系统的内存即可。更多阅读

如何跳过某些特定模型?

要避免训练某些模型,请在 excluded_model_types 参数中指定这些模型。例如,下面是如何调用 fit() 而不训练 K Nearest Neighbor (KNN)、Random Forest (RF) 或 ExtraTrees (XT) 模型

task.fit(..., excluded_model_types=['KNN','RF','XT'])

如何将我自己的自定义模型添加到 AutoGluon 训练、调优和集成的模型集中?

要了解如何将您自己的自定义模型添加到 AutoGluon 训练、调优和集成的模型集中,请参阅表格数据自定义模型

如何在不使用 AutoGluon 的情况下重现模型 XYZ 的结果?

在不使用 AutoGluon 的情况下完全重现 AutoGluon 模型的结果可能具有挑战性(例如:尝试在不依赖 AutoGluon 的情况下复制 AutoGluon 的 LightGBM 结果)。AutoGluon 使用了许多在其所基于的模型框架中不存在的技术,例如数据预处理、边缘情况处理、自定义提前停止和自定义架构。所有这些都用于增强其性能并简化使用,超越了原始模型框架(如 LightGBM、XGBoost、FastAI 等)所提供的功能。这是 AutoML 框架的核心优势,本质上很难复制(您必须重新实现 AutoGluon 在幕后所做的大部分工作)。如果您仍然希望尝试复制结果,可以从源代码中推导逻辑。

为什么选择了 XYZ 设计决策?

通常答案归结为“因为它在我们测试的各种基准数据集上平均性能优于替代方案”,和/或“因为它简单易于实现,同时性能可能与更复杂的方法相似”,和/或“因为它效果够好,我们还没有进一步研究其他选项”。AutoML 本质上是一个经验驱动的领域,而不是一个理论驱动的领域。这是因为从理论上解释为什么各种 AutoML 组件在实践中协同工作优于众多替代方案既不可行也不具有普适性。

如何添加我自己的自定义数据预处理或特征工程?

请注意,TabularDataset 对象本质上是一个pandas DataFrame,您可以在调用 fit() 之前随意转换您的训练数据。请注意,您自己执行的任何转换也必须在调用 predict() 之前应用于所有未来的测试数据,并且 AutoGluon 仍然会在 fit() 内部对您的转换后的数据执行其默认处理。

要仅使用自定义数据预处理并自动将您的自定义转换应用于训练数据和推理期间遇到的所有未来数据,您应该创建一个自定义 FeatureGenerator。请按照源代码中的此示例进行操作:examples/tabular/example_custom_feature_generator.py

如何为训练示例分配不同的重要性权重?

您可以在初始化 TabularPredictor 时指定 sample_weightweight_evaluation 参数

AutoGluon 中缺失值插补是如何工作的?

AutoGluon 不执行通用的缺失值插补,而是将缺失值发送给每个模型,并且每个模型都有不同的自定义缺失值处理方法。这提高了模型的 다양성(多样性),从而增强了集成的最终性能。请参阅模型源代码以了解如何处理缺失值。

如何限制 AutoGluon 使用的核心数量?

虽然通常建议让 AutoGluon 使用所有核心,但您可以通过设置 num_cpus 来限制它

predictor = TabularPredictor(...).fit(..., num_cpus = NUM_CORES_YOU_WANT)

您还可以限制特定模型使用的核心数量

# We use 1 core for CatBoost model, 4 cores for XGBoost model, and all cores for lightGBM model here.
predictor = TabularPredictor(...).fit(..., hyperparameters= {'CAT': {'ag_args_fit': {'num_cpus': 1}}, 'XGB': {'ag_args_fit': {'num_cpus': 4}}, 'GBM': {}},)

我的自定义评估指标引发了 _pickle.PicklingError: Can't pickle 错误

请参阅自定义评估指标教程中的“确保评估指标可序列化”

我知道 AutoGluon 底层使用了 ray。对我来说最好的实践是什么?

通常建议不要在同一个脚本中将您自定义的 ray 资源使用(例如,初始化 ray 集群)与 AutoGluon 一起使用。Ray 不支持在同一个脚本中有多个运行时,因此可能会发生意外行为。

SageMaker Notebook 上出现空间不足错误

如果您在 SageMaker Notebook 上使用 AutoGluon,很可能会遇到此类错误:OSError: [Errno 28] 设备上没有剩余空间。这是因为 SageMaker Notebook 实例的默认磁盘大小为 5 GiB,无论实例类型如何。在某些大型数据集上进行 AutoGluon 训练可能会产生大于 5GiB 的工件。

要解决此问题,要么清理您的工作空间,要么 1) 关闭您的 Notebook 实例 2) 选择您的 Notebook 实例 3) 在 编辑 下更新 卷大小 (GB) 字段

此处未解决的问题

首先搜索您的问题是否在教程示例文档Github Issues(搜索已关闭和未关闭的问题)中得到解决。如果不在其中,请打开一个新的 Github Issue 并清楚地陈述您的问题。如果您遇到错误,请包含:您的代码(调用 fit(..., verbosity=4) 将打印更多详细信息)、代码执行期间打印的输出,以及有关您的操作系统、Python 版本和已安装软件包的信息(pip freeze 的输出)。