如何在 Kaggle 竞赛中使用 AutoGluon¶
本教程将教您如何在 Kaggle 竞赛中使用 AutoGluon,无需编写大量代码即可成为一名认真的 Kaggle 竞争者。我们首先概述在 Kaggle 竞赛中使用 AutoGluon 的通用步骤。在此,我们假设竞赛涉及存储在一个(或多个)CSV 文件中的表格数据。
运行 Bash 命令: pip install kaggle
导航到: https://www.kaggle.com/account 并创建一个帐户(如果需要)。然后,点击“创建新的 API 令牌”,并将下载的文件移动到您机器上的这个位置:
~/.kaggle/kaggle.json
。有关故障排除,请参阅Kaggle API 说明。通过编程方式下载数据:在您的终端中执行此 Bash 命令
kaggle competitions download -c [COMPETITION]
在此,[COMPETITION] 应替换为您希望参加的竞赛名称。或者,您也可以手动下载数据:只需导航到您希望参加的 Kaggle 竞赛网站,点击“下载所有”,并接受竞赛条款。
如果竞赛的训练数据由多个 CSV 文件组成,请使用 pandas 将它们正确合并/连接到一个数据表中,其中行 = 训练样本,列 = 特征。
在生成的数据表上运行 autogluon
fit()
。加载竞赛的测试数据集(同样进行必要的合并/连接以确保其格式与训练数据表完全相同),然后调用 autogluon
predict()
。随后使用 pandas.read_csv 将竞赛的sample_submission.csv
文件加载到 DataFrame 中,将 AutoGluon 的预测结果放入此 DataFrame 的正确列中,最后通过 pandas.to_csv 将其保存为 CSV 文件。如果竞赛不提供样本提交文件,您将需要通过适当重新格式化 AutoGluon 的测试预测结果自行创建提交文件。通过 Bash 命令提交您的预测结果
kaggle competitions submit -c [COMPETITION] -f [FILE] -m ["MESSAGE"]
在此,[COMPETITION] 再次是竞赛名称,[FILE] 是您创建的包含预测结果的 CSV 文件名称,而 [“MESSAGE”] 是您希望随此提交条目记录的字符串消息。或者,您也可以在竞赛网站上手动上传您的预测文件。
最后,导航到竞赛排行榜网站查看您的提交表现如何!您的提交结果可能需要一些时间才能显示。
下面,我们演示如何在 Python 中针对特定的 Kaggle 竞赛:ieee-fraud-detection 进行步骤 (4)-(6)。这意味着您需要在每个命令中将 [COMPETITION]
替换为 ieee-fraud-detection
来运行上述步骤。在此,我们假设您已完成步骤 (1)-(3),并且数据 CSV 文件已在您的计算机上可用。为了开始步骤 (4),我们首先将竞赛的训练数据加载到 Python 中
import pandas as pd
import numpy as np
from autogluon.tabular import TabularPredictor
directory = '~/IEEEfraud/' # directory where you have downloaded the data CSV files from the competition
label = 'isFraud' # name of target variable to predict in this competition
eval_metric = 'roc_auc' # Optional: specify that competition evaluation metric is AUC
save_path = directory + 'AutoGluonModels/' # where to store trained models
train_identity = pd.read_csv(directory+'train_identity.csv')
train_transaction = pd.read_csv(directory+'train_transaction.csv')
由于本次竞赛的训练数据由多个 CSV 文件组成,我们首先将它们连接到一个大的数据表(行 = 样本,列 = 特征)中,然后再应用 AutoGluon
train_data = pd.merge(train_transaction, train_identity, on='TransactionID', how='left')
请注意,对于本次 Kaggle 竞赛,基于 TransactionID
键的左连接恰好是最合适的,但对于涉及多个训练数据文件的其他竞赛,您可能需要使用不同的连接策略(务必非常仔细地考虑这一点)。现在,我们所有的训练数据都位于一个表中,我们可以应用 AutoGluon 了。下面,我们指定 presets
参数以最大化 AutoGluon 的预测准确性,这通常需要您使用更长的时限运行 fit()
(下面的 3600 秒在您的运行中可能需要增加)
predictor = TabularPredictor(label=label, eval_metric=eval_metric, path=save_path, verbosity=3).fit(
train_data, presets='best_quality', time_limit=3600
)
results = predictor.fit_summary()
现在,我们使用训练好的 AutoGluon Predictor 对竞赛的测试数据进行预测。务必将多个测试数据文件以与训练数据完全相同的方式连接起来。由于本次竞赛是基于 AUC(ROC 曲线下面积)指标进行评估,因此我们要求 AutoGluon 提供预测的类别概率而不是类别预测。一般来说,何时使用 predict
与 predict_proba
将取决于具体的竞赛。
test_identity = pd.read_csv(directory+'test_identity.csv')
test_transaction = pd.read_csv(directory+'test_transaction.csv')
test_data = pd.merge(test_transaction, test_identity, on='TransactionID', how='left') # same join applied to training files
y_predproba = predictor.predict_proba(test_data)
y_predproba.head(5) # some example predicted fraud-probabilities
在提交分类竞赛的预测概率时,务必确保这些概率与 Kaggle 期望的同一类别相对应。对于二元分类任务,您可以通过以下方式查看 AutoGluon 的预测概率对应哪个类别
predictor.positive_class
对于多类别分类任务,您可以通过以下方式查看 AutoGluon 的预测概率对应哪些类别
predictor.class_labels # classes in this list correspond to columns of predict_proba() output
现在,让我们获取整个测试数据的预测概率,同时只获取正类预测,通过指定
y_predproba = predictor.predict_proba(test_data, as_multiclass=False)
现在我们已经对测试数据集中的每一行进行了预测,我们可以将这些预测结果提交给 Kaggle。大多数 Kaggle 竞赛都提供一个样本提交文件,您只需将样本预测结果替换为您自己的预测结果即可,如下所示
submission = pd.read_csv(directory+'sample_submission.csv')
submission['isFraud'] = y_predproba
submission.head()
submission.to_csv(directory+'my_submission.csv', index=False)
现在我们已完成本教程顶部的步骤 (4)-(6)。要将您的预测结果提交到 Kaggle,您可以在终端中(从适当的目录)运行以下命令
kaggle competitions submit -c ieee-fraud-detection -f sample_submission.csv -m "my first submission"
现在您可以尝试不同的 fit()
参数和特征工程技术,以最大化您在 Kaggle 排行榜上的排名!
最大化预测性能的技巧
如果竞赛网站上指定了适当的评估指标,请务必指定!如果您不确定哪个指标最好,那么在调用
fit()
时只需不指定此参数即可;AutoGluon 仍然会通过自动推断要使用的指标来生成高质量模型。如果训练样本是基于时间的,并且竞赛测试样本来自未来的数据,我们建议您将最近收集的训练样本保留为单独的验证数据集,并将其传递给
fit()
。否则,您无需自行指定验证集,AutoGluon 会自动将竞赛训练数据划分为其自己的训练/验证集。除了简单地指定
presets = 'best_quality'
,您还可以尝试更高级的fit()
参数,例如:num_bag_folds
,num_stack_levels
,num_bag_sets
,hyperparameter_tune_kwargs
,hyperparameters
,refit_full
。但是,我们建议您将大部分时间花在特征工程上,并在调用fit()
时只指定presets = 'best_quality'
。
故障排除
检查您是否在计算机上拥有正确的用户权限来访问从 Kaggle 下载的数据文件。
有关下载 Kaggle 数据或提交预测的问题,请检查您的 Kaggle 帐户设置和 Kaggle 常见问题。