Press "Enter" to skip to content

颠覆机器学习:在仅7行代码中使用AutoGluon在Kaggle中取得前4%的成绩

Autogluon预测

在开始在Slalom _build担任新的数据工程角色后,我意识到我需要更新一下我的机器学习经验,因为它已经过时了几年。在数据工程/数据科学领域,几年的时间就像是永恒的,我想可能已经有了很多自动化的方式来完成一些繁琐的机器学习任务。我很高兴看到自动机器学习(AutoML)正成为机器学习工作流中常用的东西,所以我想自己试一试。

探索AutoML:简化机器学习

AutoML革新了机器学习模型的开发方式。在传统的机器学习中,专家们需要花费大量的时间进行数据预处理、特征选择和模型调优等繁琐的任务。AutoML自动化了这些复杂的过程,极大地减少了构建分类、预测和回归等任务的有效模型所需的时间和专业知识。这种创新不仅加速了模型的开发,还使更多人能够轻松地使用高级机器学习,因为只需懂得Python的人就可以迅速实现模型并得出预测!

为什么需要AutoML?

简而言之,就是效率。即使存在一定的准确率折衷(根据我的经验,这并不是一个问题,后面我会解释),能够用几行代码得到预测结果确实有其优点。此外,由于AutoML是自动化的,如果发现预测结果对于您的用例已经足够准确,该过程可以自动适应变化的数据和特征,并在重新训练时无需额外的人工输入。

它是如何工作的?

AutoGluon执行一系列步骤自动处理和准备您的训练数据,这些步骤包括:

  1. 数据加载和检查 – AutoGluon期望数据以表格形式存在,比如一个带有指定目标列的Pandas数据框,它还对数据进行一些初始检查,如大小,格式和变量类型(数值、分类、文本等)。
  2. 数据清理 – AutoGluon识别并填充缺失值。它使用多种策略,如对于数值列使用均值、中位数或众数来填充缺失值,对于分类列使用特殊标记,并且还会删除重复值。
  3. 特征工程 – 它自动对分类数据进行独热编码、标签编码或更复杂的编码方式,使用自然语言处理将文本转换为机器学习模型可使用的数值格式,还会将日期和时间特征扩展为更有用的项目,如星期几、月份等。
  4. 数据转换 – 根据算法的需要,它会执行归一化和缩放等转换,还可能使用对数转换等方法来修正数据集中的偏斜分布。
  5. 特征选择和降维 – 它自动计算特征之间的相关性,并删除不对模型的预测能力有贡献的特征,使用主成分分析等技术来降低维度。
  6. 数据划分 – AutoGluon可以自动划分为训练集、验证集和测试集。
  7. 模型选择 – AutoGluon自动使用之前创建的划分数据集来测试各种模型,并根据选择的测量指标进行排名。
  8. 集成模型创建 – 往往情况下,它会创建一个集成模型,这是通过堆叠任何具有非零权重的模型来实现的,您可以在此处阅读更多关于模型堆叠的内容:https://towardsdatascience.com/ensemble-methods-bagging-boosting-and-stacking-c9214a10a205,具体如图所示:
AutoGluon多层叠加

这个列表应该对许多数据工程师和数据科学家来说很熟悉,这些是通常在数据清洗和准备机器学习中使用的步骤,这应该会给您一个强大的概念。

结果如何?它比“手动机器学习”好吗?

作为一个新晋的顾问,我对这个问题有个完美的答案:

这取决于情况

我将以我参与的Kaggle竞赛为例:

房价-高级回归技术

预测销售价格并进行特征工程、RF和梯度提升

www.kaggle.com

该竞赛围绕根据一系列房产特征预测房价,数据以81列的CSV格式呈现。

使用AutoGluon测试“开箱即用”性能

为了测试AutoGluon的“开箱即用”性能,我按照文档构建了所需的结构,然后使用“best_quality”训练了模型。

  1. 加载训练数据:我将训练数据读入pandas dataframe中,以便查看其结构,这对于表格预测器(我们在此处使用的)是必需的。
import pandas as pd
from autogluon.tabular import TabularDataset, TabularPredictor

df = pd.read_csv("/kaggle/input/house-prices-advanced-regression-techniques/train.csv")
df.head(20)

2. 指定目标标签我们要预测的列是SalePrice – 因此我们设置了标签并查看该列的一些基本统计信息:

label = 'SalePrice'df[label].describe()--- 输出 ---count      1460.000000mean     180921.195890std       79442.502883min       34900.00000025%      129975.00000050%      163000.00000075%      214000.000000max      755000.000000Name: SalePrice, dtype: float64

3. 训练模型在AutoGluon中对表格数据进行模型训练非常简单,您只需传递标签和数据框,并设置其训练,然后它将训练和评估指定组中的任何模型(在这种情况下为best_quality):

predictor = TabularPredictor(label=label, path="/kaggle/working", ).fit(df, presets='best_quality')--- 输出 ---指定的预设:['best_quality']堆叠配置(auto_stack=True):num_stack_levels=1, num_bag_folds=8, num_bag_sets=1开始 AutoGluon 训练...AutoGluon 将模型保存到“/kaggle/working/”AutoGluon 版本:0.8.0Python 版本:3.10.10操作系统:Linux平台机器:x86_64平台版本:#1 SMP Sat Jun 24 10:55:41 UTC 2023磁盘空间可用:20.94 GB / 20.96 GB(99.9%)训练数据行数:1460训练数据列数:80标签列:SalePrice预处理数据...AutoGluon 推断您的预测问题是:“回归”(因为标签列的 dtype == int 并且观察到许多唯一标签值)。标签信息(最大值、最小值、均值、标准偏差):(755000,34900,180921.19589,79442.50288)如果“回归”不是正确的问题类型,请在预测器初始化过程中手动指定 problem_type 参数(您可以将 problem_type 指定为以下之一:['二进制','多类','回归'])使用特征生成器对数据进行预处理...拟合 AutoMLPipelineFeatureGenerator... 可用内存:32451.21 MB 训练数据(原始)内存使用情况:4.06 MB(可用内存的 0.0%)根据列值推断每个特征的数据类型。通过设置 feature_metadata_in 来手动指定特征的特殊数据类型。阶段 1 生成器:拟合 AsTypeFeatureGenerator...  注意:将 3 个特征转换为布尔数据类型,因为它们只包含 2 个唯一值。阶段 2 生成器:拟合 FillNaFeatureGenerator...阶段 3 生成器:拟合 IdentityFeatureGenerator...  拟合 CategoryFeatureGenerator...  拟合 CategoryMemoryMinimizeFeatureGenerator...阶段 4 生成器:拟合 DropUniqueFeatureGenerator...阶段 5 生成器:拟合 DropDuplicatesFeatureGenerator...原始数据中的特征类型(原始数据类型、特殊数据类型):  ('float', [])  :  3 | ['LotFrontage', 'MasVnrArea', 'GarageYrBlt']  ('int', [])    : 34 | ['Id', 'MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', ...]  ('object', []) : 43 | ['MSZoning', 'Street', 'Alley', 'LotShape', 'LandContour', ...]处理后的数据中的特征类型(原始数据类型、特殊数据类型):  ('category', [])  : 40 | ['MSZoning', 'Alley', 'LotShape', 'LandContour', 'LotConfig', ...]  ('float', [])     :  3 | ['LotFrontage', 'MasVnrArea', 'GarageYrBlt']  ('int', [])       : 34 | ['Id', 'MSSubClass', 'LotArea', 'OverallQual', 'OverallCond', ...]  ('int', ['bool']) :  3 | ['Street', 'Utilities', 'CentralAir'] 0.7s = 拟合运行时原始数据中的 80 个特征用于生成处理后的 80 个特征。处理后的训练数据内存使用情况:0.52 MB(可用内存的 0.0%)数据预处理和特征工程运行时间为 0.73 秒...AutoGluon 将使用评估指标 'root_mean_squared_error' 来衡量预测性能。为了符合更好为高分数,该指标的符号已被翻转。可以将指标分数乘以 -1 来获得指标值。如果要更改此设置,请指定 Predictor() 的 eval_metric 参数...AutoGluon 训练完成,总运行时间 = 1423.48s ... 最佳模型:"WeightedEnsemble_L3"TabularPredictor 已保存。要加载,请使用:predictor = TabularPredictor.load("/kaggle/working/")

整个过程大约需要30分钟来训练所有不同的模型。

4. 进行预测由于Kaggle已经提供了用于提交的测试数据集,我们可以直接使用这个数据集然后提交结果

test_data = TabularDataset(f'/kaggle/input/house-prices-advanced-regression-techniques/test.csv')y_pred = predictor.predict(test_data)y_pred.head()--- out ---从以下位置加载数据: /kaggle/input/house-prices-advanced-regression-techniques/test.csv | 列数 = 80 / 80 | 行数 = 1459 -> 1459警告: 在训练时没有空值的整数特征在推断时包含了空值!用0填充空值。为了避免这个问题,应该在训练时将特征转换为浮点型!警告: 包含空值的整数特征: ['BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'BsmtFullBath', 'BsmtHalfBath', 'GarageCars', 'GarageArea']0    121030.3593751    164247.5468752    186548.2343753    193435.8750004    184883.546875Name: SalePrice, dtype: float32

5. 提交结果提交结果到Kaggle非常简单(这是我第一次参加Kaggle竞赛,所以对我来说都是新鲜事)

submission = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/sample_submission.csv')submission['SalePrice'] = y_predsubmission--- out ---Id SalePrice0 1461 121030.3593751 1462 164247.5468752 1463 186548.2343753 1464 193435.8750004 1465 184883.546875... ... ...1454 2915 79260.7187501455 2916 82355.2968751456 2917 165794.2812501457 2918 111802.2109381458 2919 212835.9375001459 行 × 2 列submission.to_csv("/kaggle/working/submission.csv", index=False, header=True)

结果

使用Autogluon默认设置得到的结果是0.12082,排名为4847个参赛者中的第252名,属于前5%,这对只有7行实际代码来说是令人难以置信的成绩。

如果我们排除掉前50-75名的人(其中大多数人通过数据泄露来进行作弊和操纵系统)…

…那么这就是前4%。

*所有数字均为本文撰写时的准确数值

我能做得更好吗?

我的最佳结果为0.11985,排名为4847个参赛者中的第117名,属于前2.5%。

Yay — validation

我使用了AutoGluon以及一些基本的归一化、特征工程等技术,还有一些排除不相关的特征对。

所以我的(虽然有些生疏)专业知识只能使得得分增加了0.00097,我不确定这在实际项目中是否能够被察觉。

结论

您可以在这里查看笔记本,以便自行验证:Version 8 是最佳得分,Version 1 是无外部训练集的版本(您可以通过选择3个点的菜单来浏览不同版本的代码)

notebookc8be23bae5

使用Kaggle Notebooks探索和运行机器学习代码 | 使用House Prices数据集 – 高级回归分析

www.kaggle.com

在这个比赛中,显然有很多人使用了更高性能的模型,并使用了全方面的数据科学技术来达到这个成绩,但是在结果与时间之间的比较上,AutoGluon是一个独立类别中的胜利者。

AutoGluon是您机器学习工具库中非常强大的工具。它只需几行代码就能提供高度准确的预测,这在我看来是无与伦比的,正如Kaggle竞赛所证明的那样。它不会比一位非常有才华的数据科学家/工程师在他们自己的工具上表现更出色,但也不会花费几周的时间才能对数据进行非常准确的预测。

关于作者

Dan是斯莱姆公司的数据工程首席,专注于现代化客户数据架构、机器学习和人工智能。

作为一位有超过20年创业经验的资深人士,他擅长构建高效的开发团队,并带领他们成功为澳大利亚和英国一些知名公司提供解决方案。

Leave a Reply

Your email address will not be published. Required fields are marked *