大侠幸会幸会[抱拳],我是全网同名 算法金
0基础跨行转AI并成功上岸,多个算法赛Top
正在挑战日更万日,让更多人享受智能乐趣
00 库介绍
在当今数据驱动的时代,机器学习已经成为了一个不可或缺的技术,它广泛应用于图像识别、自然语言处理、推荐系统等多个领域。
然而,机器学习的复杂性往往让很多初学者和非专业人士望而却步。
如果你也有这样的困扰,那么今天我要介绍的Python库——AutoGluon,将会是你的福音。
https://github.com/autogluon/autogluon
简介
AutoGluon是一个由Amazon科学家和工程师开发的开源库,旨在简化机器学习的使用。
它允许用户无需深入了解算法细节,就能自动训练和调优高质量的机器学习模型。
无论你是数据科学家、软件开发者还是业余爱好者,AutoGluon都能帮助你轻松地解决各种机器学习问题。
特点
- 易用性:AutoGluon极大地简化了机器学习模型的训练过程,用户只需几行代码就能开始训练。
- 自动化:它能自动进行模型选择、超参数调优等繁琐的步骤。
- 性能优异:即便在默认设置下,AutoGluon也能达到或超过许多手动调优的模型。
应用场景
- 图像分类:自动识别图片中的对象。
- 文本分类:自动理解和分类文本数据。
- 表格预测:对表格数据进行预测,如销售额、疾病诊断等。
- 时间序列
01 快速开始
下面是一个使用AutoGluon进行表格数据预测的简单示例。
我们将通过几行代码,展示如何快速训练一个模型。
首先,确保你已经安装了AutoGluon。你可以通过以下命令安装:
pip install autogluon
接下来,我们将使用AutoGluon对一个表格数据集进行预测。代码如下:
from autogluon.tabular import TabularPredictor
# 加载数据
train_data = TabularPredictor.load_data('train.csv')
# 创建一个预测器并训练
predictor = TabularPredictor(label='target').fit(train_data)
# 使用训练好的模型进行预测
predictions = predictor.predict(test_data)
在这个例子中,我们首先导入了TabularPredictor
类,然后加载了训练数据。
TabularPredictor
的fit
方法会自动处理数据预处理、模型选择和模型训练等步骤。
最后,我们使用训练好的模型对测试数据进行预测。
02 效果图
… 结构化表格任务
首先确保已安装 AutoGluon,然后导入 AutoGluon 的 和 .我们将使用前者来加载数据,后者用于训练模型并进行预测。TabularDatasetTabularPredictor
!python -m pip install --upgrade pip
!python -m pip install autogluon
from autogluon.tabular import TabularDataset, TabularPredictor
在本教程中,我们将使用《自然》杂志第7887期封面故事中的一个数据集:数学定理的人工智能引导直觉。
目标是根据结的特性预测结的特征。
我们从原始数据中抽取了 10K 训练和 5K 测试示例。
采样数据集使本教程可以快速运行,但如果需要,AutoGluon 可以处理整个数据集。
我们直接从 URL 加载此数据集。AutoGluon 是 pandas DataFrame 的子类,因此也可以使用任何方法。TabularDatasetDataFrameTabularDataset
data_url = 'https://raw.githubusercontent.com/mli/ag-docs/main/knot_theory/'
train_data = TabularDataset(f'{data_url}train.csv')
train_data.head()
我们的目标存储在“签名”列中,该列有 18 个唯一的整数。
即使 pandas 没有正确地将此数据类型识别为分类,AutoGluon 也会解决此问题。
label = 'signature'
train_data[label].describe()
- 训练
现在,我们通过指定标签列名来构造一个,然后用 在数据集上进行训练。我们不需要指定任何其他参数。
AutoGluon 将识别出这是一个多类分类任务,执行自动特征工程,训练多个模型,然后对模型进行集成以创建最终的预测变量。TabularPredictorTabularPredictor.fit()
predictor = TabularPredictor(label=label).fit(train_data)
模型拟合应该需要几分钟或更短的时间,具体取决于您的 CPU。
可以通过指定参数来加快训练速度。例如,将在 60 秒后停止训练。
较高的时间限制通常会带来更好的预测性能,而过低的时间限制将阻止 AutoGluon 训练和构建一组合理的模型。time_limitfit(..., time_limit=60)
- 预测
一旦我们有了适合训练数据集的预测变量,我们就可以加载一组单独的数据来用于预测和疏散。
test_data = TabularDataset(f'{data_url}test.csv')
y_pred = predictor.predict(test_data.drop(columns=[label]))
y_pred.head()
Loaded data from: https://raw.githubusercontent.com/mli/ag-docs/main/knot_theory/test.csv | Columns = 19 / 19 | Rows = 5000 -> 5000
- 评估
我们可以使用该函数评估测试数据集上的预测变量,该函数衡量预测变量在未用于拟合模型的数据上的表现。evaluate()
predictor.evaluate(test_data, silent=True)
AutoGluon 还提供了该功能,它允许我们评估每个单独训练的模型在测试数据上的性能。TabularPredictorleaderboard()
predictor.leaderboard(test_data)
我们了解了 AutoGluon 的基本拟合和预测功能,使用 和 。
AutoGluon 通过不需要特征工程或模型超参数调整来简化模型训练过程。
查看深入教程,了解有关 AutoGluon 其他功能的更多信息,例如自定义训练和预测步骤,或使用自定义特征生成器、模型或指标扩展 AutoGluon。TabularDatasetTabularPredictor
… Multimodal
import os
import warnings
import numpy as np
warnings.filterwarnings('ignore')
np.random.seed(123)
- 示例数据
在本教程中,我们使用 PetFinder 数据集的简化和子采样版本。
目标是根据宠物的收养情况预测宠物的收养率。在此简化版本中,采用速度分为两类:0(慢)和 1(快)。
我们首先下载一个包含 petfinder 数据集的 zip 文件,并将它们解压缩到当前工作目录中。
from autogluon.core.utils.loaders import load_zip
download_dir = './ag_multimodal_tutorial'
zip_file = 'https://automl-mm-bench.s3.amazonaws.com/petfinder_for_tutorial.zip'
load_zip.unzip(zip_file, unzip_dir=download_dir)
接下来,我们使用 pandas 将数据集的 CSV 文件读入 ,请注意,我们有兴趣学习预测的列是“AdoptionSpeed”。DataFrames
import pandas as pd
dataset_path = f'{download_dir}/petfinder_for_tutorial'
train_data = pd.read_csv(f'{dataset_path}/train.csv', index_col=0)
test_data = pd.read_csv(f'{dataset_path}/test.csv', index_col=0)
label_col = 'AdoptionSpeed'
PetFinder 数据集带有一个图像目录,数据中的某些记录具有多个与之关联的图像。
AutoGluon 的多模式数据帧格式要求图像列包含一个字符串,其值为单个图像文件的路径。
在此示例中,我们将图像功能列限制为仅第一个图像,并且需要执行一些路径操作,以便为当前目录结构正确设置所有内容。
# 定义图片列的名称
image_col = 'Images'
# 对训练数据集中的图片列进行处理,只保留第一张图片的路径(假设原始数据中的图片路径是以分号分隔的)
train_data[image_col] = train_data[image_col].apply(lambda ele: ele.split(';')[0])
# 对测试数据集中的图片列进行同样的处理
test_data[image_col] = test_data[image_col].apply(lambda ele: ele.split(';')[0])
# 定义一个函数,用于扩展图片路径,使其变为绝对路径
def path_expander(path, base_folder):
# 将路径按分号分割,考虑到可能存在多个路径的情况
path_l = path.split(';')
# 对每个路径进行处理,将其转换为绝对路径,并使用分号重新连接成字符串
return ';'.join([os.path.abspath(os.path.join(base_folder, path)) for path in path_l])
# 对训练数据集中的图片路径应用上述函数,将所有图片路径转换为绝对路径
train_data[image_col] = train_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
# 对测试数据集中的图片路径进行同样的处理
test_data[image_col] = test_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
每只动物的收养资料包括图片、文字描述和各种表格特征,如年龄、品种、名称、颜色等。让我们看一下示例数据行的图片和描述。
example_row = train_data.iloc[0]
example_image = example_row[image_col]
from IPython.display import Image, display
pil_img = Image(filename=example_image)
display(pil_img)
example_row['Description']
- 训练
现在数据的格式合适,我们可以拟合训练数据。在这里,我们为这个快速演示设置了严格的培训时间预算。
更多的训练时间会带来更好的预测性能,但我们可以在短时间内获得令人惊讶的良好性能。MultiModalPredictor
from autogluon.multimodal import MultiModalPredictor
predictor = MultiModalPredictor(label=label_col).fit(
train_data=train_data,
time_limit=120
)
在后台自动推断问题类型(分类或回归),检测特征模态,从多模态模型池中选择模型,并训练所选模型。
如果使用多个主干网,MultiModalPredictor 会在其上附加一个后期融合模型(MLP 或 transformer)。MultiModalPredictor
- 预测
拟合模型后,我们想用它来预测 witheld 测试数据集中的标签。
predictions = predictor.predict(test_data.drop(columns=label_col))
predictions[:5]
对于分类任务,我们可以很容易地获得每个输出类的预测概率。
probs = predictor.predict_proba(test_data.drop(columns=label_col))
probs[:5]
- 评估
最后,我们可以根据其他性能指标(在本例中为 roc_auc)评估 witheld 测试数据集上的预测变量。
scores = predictor.evaluate(test_data, metrics=["roc_auc"])
scores
在本入门教程中,我们了解了 AutoGluon 的基本拟合和预测功能,但我们只是触及了它的功能的表面。
查看深入教程,了解 AutoGluon 的其他功能,如嵌入提取、蒸馏、模型微调、文本或图像预测以及语义匹配。MultiModalPredictorMultiModalPredictor
… 时间序列任务
通过简单的调用,AutoGluon 可以训练和调整fit()
- 简单的预测模型(例如,ARIMA、ETS、Theta),
- 强大的深度学习模型(例如,DeepAR、Temporal Fusion Transformer)、
- 基于树的模型(例如,LightGBM),
- 结合其他模型预测的集合
为单变量时间序列数据生成多_步提前概率_预测。
本教程演示了如何快速开始使用 AutoGluon 为 M4 预测竞赛数据集生成每小时预测。
- 将时间序列数据加载为TimeSeriesDataFrame
首先,我们导入一些必需的模块
import pandas as pd
from autogluon.timeseries import TimeSeriesDataFrame, TimeSeriesPredictor
要使用 ,我们只需要以下两个类:autogluon.timeseries
TimeSeriesDataFrame
存储由多个时间序列组成的数据集。TimeSeriesPredictor
负责拟合、调整和选择最佳预测模型,以及生成新的预测。
我们将 M4 每小时数据集的子集加载为pandas.DataFrame
df = pd.read_csv("https://autogluon.s3.amazonaws.com/datasets/timeseries/m4_hourly_subset/train.csv")
df.head()
AutoGluon 需要长格式的时间序列数据。 数据框的每一行都包含单个时间序列的单个观测值(时间步长),表示如下所示
- 时间序列 () 的唯一 ID 为 int 或 str
"item_id"
- 观测值 () 的时间戳作为 OR 兼容格式
"timestamp"pandas.Timestamp
- 时间序列的数值 (
"target"
)
原始数据集应始终遵循此格式,其中至少有三列用于唯一 ID、时间戳和目标值,但这些列的名称可以是任意的。
但是,在构造 AutoGluon 使用的列时,我们必须提供列的名称,这一点很重要。 如果数据与预期格式不匹配,AutoGluon 将引发异常。TimeSeriesDataFrame
train_data = TimeSeriesDataFrame.from_data_frame(
df,
id_column="item_id",
timestamp_column="timestamp"
)
train_data.head()
我们将存储在 a 中的每个单独的时间序列称为_一个项目_。
例如,物料可能对应于需求预测中的不同产品,或对应于财务数据集中的不同库存。
此设置也称为时间序列_面板_。 请注意,这与多变量预测_不同_ — AutoGluon 单独生成每个时间序列的预测,而无需对不同项目(时间序列)之间的交互进行建模。TimeSeriesDataFrame
TimeSeriesDataFrame
继承自 pandas。DataFrame,因此 的所有属性和方法都可以在 . 它还提供其他实用程序函数,例如用于不同数据格式的加载器(有关详细信息,请参阅 TimeSeriesDataFrame)。pandas.DataFrameTimeSeriesDataFrame
- 训练时间序列模型
TimeSeriesPredictor.fit
为了预测时间序列的未来值,我们需要创建一个对象。TimeSeriesPredictor
预测时间序列中的模型将向未来_多个步骤_。
我们根据我们的任务选择这些步骤的数量——预测_长度_(也称为_预测范围_)。
例如,我们的数据集包含以每小时频率测量的时间_序列,因此_我们设置训练预测未来 48 小时的模型。autogluon.timeseriesprediction_length = 48
我们指示 AutoGluon 将训练好的模型保存在文件夹 中。
我们还指定 AutoGluon 应根据平均绝对比例误差 (MASE) 对模型进行排名,并且我们想要预测的数据存储在 的列中。./autogluon-m4-hourly"target"TimeSeriesDataFrame
predictor = TimeSeriesPredictor(
prediction_length=48,
path="autogluon-m4-hourly",
target="target",
eval_metric="MASE",
)
predictor.fit(
train_data,
presets="medium_quality",
time_limit=600,
)
在这里,我们使用了预设,并将训练时间限制在 10 分钟(600 秒)以内。 预设定义了 AutoGluon 将尝试适合的模型。
对于预设,这些是 简单基线 (, ), 统计模型 (, ), 基于LightGBM的基于树的模型(, ), 深度学习模型 , 以及结合这些的加权集合。 其他可用的预设包括 、 和 。
更高质量的预设通常会产生更准确的预测,但需要更长的时间来训练。"medium_quality"medium_qualityNaiveSeasonalNaiveETSThetaRecursiveTabularDirectTabularTemporalFusionTransformerTimeSeriesPredictor"fast_training""high_quality""best_quality"
在内部,AutoGluon 将在给定的时间限制内训练尽可能多的模型。
然后,根据经过训练的模型在内部验证集上的性能对模型进行排名。
默认情况下,此验证集是通过在 中保留每个时间序列的最后时间步长来构造的。fit()prediction_lengthtrain_data
- 生成预测
TimeSeriesPredictor.predict
现在,我们可以使用拟合来预测未来的时间序列值。
默认情况下,AutoGluon 将使用在内部验证集中得分最高的模型进行预测。
预测始终包括对下一个时间步长的预测,从 中每个时间序列的末尾开始。TimeSeriesPredictorprediction_lengthtrain_data
predictions = predictor.predict(train_data)
predictions.head()
AutoGluon 生成_概率_预测:除了预测未来时间序列的均值(期望值)外,模型还提供预测分布的分位数。
分位数预测让我们了解可能结果的范围。 例如,如果分位数等于 ,则表示模型预测目标值低于 的几率为 10%。"0.1"500.0500.0
现在,我们将可视化数据集中某个时间序列的预测值和实际观测值。
我们绘制了平均预测,以及 10% 和 90% 的分位数,以显示潜在结果的范围。
import matplotlib.pyplot as plt
# TimeSeriesDataFrame 可以直接从文件路径加载,这里从一个在线的CSV文件加载测试数据集
test_data = TimeSeriesDataFrame.from_path("https://autogluon.s3.amazonaws.com/datasets/timeseries/m4_hourly_subset/test.csv")
# 设置绘图的大小
plt.figure(figsize=(20, 3))
# 指定一个时间序列的ID
item_id = "H1"
# 从训练数据集中获取该ID对应的过去时间序列值
y_past = train_data.loc[item_id]["target"]
# 从预测结果中获取该ID对应的预测值
y_pred = predictions.loc[item_id]
# 从测试数据集中获取该ID对应的未来48个时间点的真实值
y_test = test_data.loc[item_id]["target"][-48:]
# 绘制过去200个时间点的时间序列值
plt.plot(y_past[-200:], label="Past time series values")
# 绘制预测的平均值
plt.plot(y_pred["mean"], label="Mean forecast")
# 绘制未来的时间序列真实值
plt.plot(y_test, label="Future time series values")
# 绘制预测的10%-90%置信区间,使用红色半透明填充表示
plt.fill_between(
y_pred.index, y_pred["0.1"], y_pred["0.9"], color="red", alpha=0.1, label=f"10%-90% confidence interval"
)
# 显示图例
plt.legend();
- 评估不同模型的性能
我们可以查看 AutoGluon 通过该方法训练的每个模型的性能。
我们将测试数据集提供给排行榜函数,以查看拟合模型在看不见的测试数据上的表现如何。
排行榜还包括在内部验证数据集上计算的验证分数。leaderboard()
在 AutoGluon 排行榜中,分数越高总是对应于更好的预测性能。
因此,我们的 MASE 分数乘以 ,因此更高的“负 MASE”对应于更准确的预测。-1
# The test score is computed using the last
# prediction_length=48 timesteps of each time series in test_data
predictor.leaderboard(test_data)
以上就是“AutoGluon,一个强大的 Python 库”的全部内容,希望对你有所帮助。
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、Python练习题
检查学习结果。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最后祝大家天天进步!!
上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。