AutoGluon Tabular 表格数据建模深度解析
概述
AutoGluon 是一个强大的自动化机器学习工具库,其 Tabular 模块专门用于处理结构化表格数据。本文将深入探讨 AutoGluon Tabular 的高级功能,帮助读者掌握如何通过精细调参和模型集成来提升预测性能。
数据准备与基础使用
首先我们需要加载数据并定义预测任务。这里我们使用人口普查数据集,预测个人的职业(occupation)——这是一个多分类问题:
from autogluon.tabular import TabularDataset, TabularPredictor
import numpy as np
# 加载并采样数据
train_data = TabularDataset('census_train.csv')
train_data = train_data.sample(n=1000, random_state=0) # 采样以加快演示速度
# 定义标签列
label = 'occupation'
test_data = TabularDataset('census_test.csv')
y_test = test_data[label]
test_data_nolabel = test_data.drop(columns=[label])
# 指定评估指标
metric = 'accuracy'
超参数调优详解
虽然 AutoGluon 默认配置就能提供不错的效果,但通过超参数调优可以进一步提升模型性能。以下是关键注意事项:
-
验证数据策略:
- 可以显式指定验证数据集(
tuning_data
) - 不指定时,AutoGluon 会自动从训练集中智能划分验证数据
- 通过
holdout_frac
控制验证集比例
- 可以显式指定验证数据集(
-
超参数搜索空间:
- 可以为每种模型类型定义特定的超参数
- 支持固定值和搜索空间两种设置方式
- 未指定的参数使用 AutoGluon 默认值
from autogluon.common import space
# 神经网络超参数配置
nn_options = {
'num_epochs': 10,
'learning_rate': space.Real(1e-4, 1e-2, default=5e-4, log=True),
'activation': space.Categorical('relu', 'softrelu', 'tanh'),
'dropout_prob': space.Real(0.0, 0.5, default=0.1)
}
# LightGBM超参数配置
gbm_options = {
'num_boost_round': 100,
'num_leaves': space.Int(lower=26, upper=66, default=36)
}
# 综合超参数配置
hyperparameters = {
'GBM': gbm_options,
'NN_TORCH': nn_options
}
# 执行训练
predictor = TabularPredictor(label=label, eval_metric=metric).fit(
train_data,
time_limit=120,
hyperparameters=hyperparameters,
hyperparameter_tune_kwargs={
'num_iterations': 5,
'scheduler': 'local',
'searcher': 'auto'
}
)
模型集成策略
AutoGluon 提供了两种强大的模型集成方法:
-
Bagging(袋装):
- 通过
num_bag_folds
控制K折交叉验证次数 - 增加
num_bag_sets
可以重复bagging过程以降低方差
- 通过
-
Stacking(堆叠):
- 通过
num_stack_levels
控制堆叠层级 - 层级越高,模型越复杂,训练时间越长
- 通过
# 使用bagging和stacking的示例
predictor = TabularPredictor(label=label, eval_metric=metric).fit(
train_data,
num_bag_folds=5,
num_bag_sets=1,
num_stack_levels=1,
hyperparameters={
'NN_TORCH': {'num_epochs': 2},
'GBM': {'num_boost_round': 20}
}
)
更简单的方法是使用auto_stack=True
,让AutoGluon自动选择最优的集成策略:
predictor = TabularPredictor(label=label, eval_metric='balanced_accuracy').fit(
train_data,
auto_stack=True,
hyperparameters={
'FASTAI': {'num_epochs': 10},
'GBM': {'num_boost_round': 200}
}
)
决策阈值校准
对于二分类问题,调整预测决策阈值可以显著提升某些指标(如F1分数、平衡准确率)的表现:
# 校准前评估
print(f'校准前阈值={predictor.decision_threshold}:')
scores = predictor.evaluate(test_data)
# 执行校准
calibrated_threshold = predictor.calibrate_decision_threshold()
predictor.set_decision_threshold(calibrated_threshold)
# 校准后评估
print(f'校准后阈值={predictor.decision_threshold}:')
scores_calibrated = predictor.evaluate(test_data)
阈值校准通常需要在不同指标间进行权衡。AutoGluon支持为特定指标优化阈值:
for metric_name in ['f1', 'balanced_accuracy', 'mcc']:
calibrated_threshold = predictor.calibrate_decision_threshold(metric=metric_name)
# 使用校准后的阈值进行评估...
最佳实践建议
- 优先使用默认配置:AutoGluon的默认配置已经过优化,通常能提供很好的效果
- 逐步调优:先尝试
presets="best_quality"
,再考虑手动调参 - 资源权衡:bagging和stacking会显著增加训练时间和资源消耗
- 评估策略:始终在独立的测试集上评估模型性能
- 自动化优势:尽可能使用
auto_stack
等自动化功能
通过合理运用这些高级功能,您可以充分发挥AutoGluon Tabular的潜力,构建出性能优异的表格数据预测模型。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考