搜索
首页科技周边人工智能如何使用XGBoost和InluxDB进行时间序列预测

如何使用XGBoost和InluxDB进行时间序列预测

Apr 04, 2023 pm 12:40 PM
xgboostinluxdb时间序列

XGBoost是一个流行的开源机器学习库,可用于解决各种预测问题。人们需要了解如何使用它与InfluxDB进行时间序列预测。

译者 | 李睿

审校 | 孙淑娟

XGBoost是一个开源的机器学习库,它实现了优化的分布式梯度增强算法。XGBoost使用并行处理实现快速性能,很好地处理缺失值,在小型数据集上执行良好,并防止过拟合。所有这些优点使XGBoost成为回归问题(例如预测)的一种流行解决方案。

预测是各种业务目标的关键任务,例如预测分析、预测维护、产品规划、预算等。许多预测或预测问题都涉及到时间序列数据。这使得XGBoost成为开源时间序列数据库InfluxDB的出色伙伴。

本教程将学习如何使用XGBoost的Python包预测来自InfluxDB时间序列数据库的数据。还将使用InfluxDB Python客户端库从InfluxDB查询数据,并将数据转换为Pandas DataFrame,以便更容易地使用时间序列数据,然后再做预测。此外,还将更详细地讨论XGBoost的优点。

一、要求

本教程是在通过Homebrew安装Python 3的macOS系统上执行的。建议设置额外的工具,如virtualenv、pyenv或conda-env,以简化Python和客户端安装。否则,其全部要求如下:

  • influxdb-client=1.30.0
  • pandas = 1.4.3
  • xgboost>=1.7.3
  • influxdb-client>=1.30.0
  • pandas>=1.4.3
  • matplotlib>=3.5.2
  • sklearn>=1.1.1

本教程还假设有一个免费的层InfluxDB云帐户,并且已经创建了一个存储桶和一个令牌,可以将存储桶视为数据库或InfluxDB中数据组织的最高层次结构。在本教程中,将创建一个名为NOAA的存储桶。

二、决策树、随机森林和梯度增强

为了理解XGBoost是什么,必须理解决策树、随机森林和梯度增强。决策树是一种有监督的学习方法,由一系列特征测试组成。每个节点都是一个测试,所有节点都被组织在一个流程图结构中。分支表示最终决定将哪个叶标签或类标签分配给输入数据的条件。

如何使用XGBoost和InluxDB进行时间序列预测

机器学习中的决策树用于确定明天是否会下雨。经过编辑以显示决策树的组件:叶、分支和节点。

决策树、随机森林和梯度增强背后的指导原则是,多个“弱学习者”或分类器共同做出强大的预测。

随机森林包含多个决策树。决策树中的每个节点都被认为是弱学习者,随机森林中的每个决策树被认为是随机森林模型中许多弱学习者中的一个。通常情况下,所有的数据都被随机划分为子集,并通过不同的决策树进行传递。

使用决策树和随机森林的梯度增强是相似的,但它们的结构方式不同。梯度增强树也包含决策树森林,但这些决策树是额外构建的,所有数据都经过决策树集合。梯度增强树可能包含一组分类树或回归树,分类树用于离散值(例如猫或狗)。回归树用于连续值(例如0到100)。

三、什么是XGBoost?  

梯度增强是一种用于分类和预测的机器学习算法。XGBoost只是一个极端类型的梯度增强。它的极端之处在于,可以通过并行处理的能力更有效地执行梯度增强。XGBoost文档中的下图说明了如何使用梯度增强来预测某人是否会喜欢一款电子游戏。

如何使用XGBoost和InluxDB进行时间序列预测

采用两棵决策树被用来决定某人是否可能喜欢一款电子游戏。将两棵树的叶子得分相加,以确定哪一个人最有可能喜欢这款电子游戏。

XGBoost的一些优点:

  • 相对容易理解。
  • 适用于具有很少特征的小型、结构化和规则数据。

XGBoost的一些缺点:

  • 易于过拟合,对异常值敏感。在XGBoost中使用时间序列数据的物化视图进行预测可能是一个好主意。
  • 在稀疏或无监督数据上表现不佳。

四、使用XGBoost进行时间序列预测

在这里使用的是空气传感器样本数据集,它是由InfluxDB提供的。该数据集包含来自多个传感器的温度数据。正在为单个传感器创建温度预测,其数据是这样的:

如何使用XGBoost和InluxDB进行时间序列预测

使用以下Flux代码导入单个时间序列的数据集和过滤器。(Flux是InfluxDB的查询语言)

import "join"

import "influxdata/influxdb/sample"

//dataset is regular time series at 10 second intervals

data = sample.data(set: "airSensor")

|> filter(fn: (r) => r._field == "temperature" and r.sensor_id == "TLM0100")

随机森林和梯度增强可以用于时间序列预测,但它们需要将数据转换为监督学习。这意味着必须以滑动窗口方法或缓慢移动方法将数据向前移动,以将时间序列数据转换为监督学习集,也可以用Flux准备数据。在理想情况下,应该首先执行一些自相关分析,以确定要使用的最佳方法。为简洁起见,将使用以下Flux代码按一个常规时间间隔移动数据。

import "join"

import "influxdata/influxdb/sample"

data = sample.data(set: "airSensor")

|> filter(fn: (r) => r._field == "temperature" and r.sensor_id == "TLM0100")

shiftedData = data

|> timeShift(duration: 10s , columns: ["_time"] )

join.time(left: data, right: shiftedData, as: (l, r) => ({l with data: l._value, shiftedData: r._value}))

|> drop(columns: ["_measurement", "_time", "_value", "sensor_id", "_field"])

左右滑动查看完整代码

如何使用XGBoost和InluxDB进行时间序列预测

如果想向模型输入中添加额外的滞后数据,可以改为遵循以下Flux逻辑。

import "experimental"

import "influxdata/influxdb/sample"

data = sample.data(set: "airSensor")

|> filter(fn: (r) => r._field == "temperature" and r.sensor_id == "TLM0100")



shiftedData1 = data

|> timeShift(duration: 10s , columns: ["_time"] )

|> set(key: "shift" , value: "1" )



shiftedData2 = data

|> timeShift(duration: 20s , columns: ["_time"] )

|> set(key: "shift" , value: "2" )



shiftedData3 = data

|> timeShift(duration: 30s , columns: ["_time"] )

|> set(key: "shift" , value: "3")



shiftedData4 = data

|> timeShift(duration: 40s , columns: ["_time"] )

|> set(key: "shift" , value: "4")



union(tables: [shiftedData1, shiftedData2, shiftedData3, shiftedData4])

|> pivot(rowKey:["_time"], columnKey: ["shift"], valueColumn: "_value")

|> drop(columns: ["_measurement", "_time", "_value", "sensor_id", "_field"])

// remove the NaN values

|> limit(n:360)

|> tail(n: 356)

此外,我们必须使用向前验证来训练算法。这涉及到将数据集分为测试集和训练集。然后利用XGB Regressor对XGBoost模型进行训练,并用拟合方法进行预测。最后,我们使用平均绝对误差 (MAE)来确定预测的准确性。对于10秒的延迟,计算出的平均绝对误差 (MAE)为0.035。我们可以把这理解为96.5%的预测是非常正确的。下图展示了我们从XGBoost得到的预测结果与从训练/测试分割得到的期望值之间的对比。

如何使用XGBoost和InluxDB进行时间序列预测

以下是完整的脚本。这段代码主要是从这里的教程中引入的。

将 pandas 导入为 pd

from numpy import asarray

from sklearn.metrics importmean_absolute_error

from xgboost import XGBRegressor

from matplotlib import pyplot

from influxdb_client import InfluxDBClient

from influxdb_client.client.write_api import SYNCHRONOUS



# 使用 Python InfluxDB 客户端库查询数据并将数据转换为受监督的数据Flux

client = InfluxDBClient(url="https://us-west-2-1.aws.cloud2.influxdata.com", token="NyP-HzFGkObUBI4Wwg6Rbd-_SdrTMtZzbFK921VkMQWp3bv_e9BhpBi6fCBr_0-6i0ev32_XWZcmkDPs 的学习问题耳朵TWA== ", org="0437f6d51b579000")



# write_api = client.write_api(write_optinotallow=SYNCHRONOUS)

query_api = client.query_api()

df = query_api.query_data_frame('import "join"'

'import "influxdata/influxdb/sample"'

'data = sample.data(set: "airSensor")'

'|>filter(fn: (r) => r._field == "温度" and r.sensor_id == "TLM0100")'

'shiftedData = 数据'

'|> timeShift(duration: 10s , columns: ["_time"] )'

'join.time(左:数据,右:shiftedData,如:(l, r) = > ({l 数据:l._value,shiftedData: r._value}))'

'|> drop(columns: ["_measurement", "_time", "_value", "sensor_id", "_field"])'

'|>; yield(name: "转换为监督学习数据集")'

)

df = df.drop(columns=['table', 'result'])

data = df.to_numpy()



# 将单变量数据集拆分为训练/测试集

def train_test_split(data, n_test):

return data[:-n_test:], data[-n_test:]



# 拟合 xgboost 模型并进行一步预测

def xgboost_forecast(train, testX) :

# 将列表转换为数组

train = asarray(train)

# 分成输入和输出列

trainX, trainy = train[: , :-1], train[:, -1]

# 拟合模型

model = XGBRegressor(objective='reg:squarederror', n_estimators=1000)

model.fit(trainX, trainy)

# 进行一步预测

yhat = model.predict(asarray([testX]))

return yhat[0 ]



# 单变量数据的前向验证

def walk_forward_validation(data, n_test):

Predictions = list()

# 分割数据集

train, test = train_test_split(data, n_test)

History = [x for x in train]

# 遍历每个时间步测试集

for i in range(len(test)):

# 将测试行拆分为输入和输出列

testX, testy = test[i, : -1], test[i, -1]

# 根据历史拟合模型并进行预测

yhat = xgboost_forecast(history, testX)

# 将预测存储在预测列表

predictions.append(yhat)

# 将实际观察添加到下一个循环的历史记录

history.append(test[i])

# 总结进度

print('>expected=%.1f, Predicted=%.1f' % (testy, yhat))

# 估计预测误差

error = Mean_absolute_error(test[:, -1], 预测)

返回错误, test[:, -1], 预测



# 评估

mae, y, yhat = walk_forward_validation(data, 100)

print('MAE: %.3f' % mae)



# 预期与预测的绘图

pyplot.plot(y, label='预期')

pyplot.plot(yhat, label='预测')

pyplot.legend()

pyplot.show()

五、结论

希望这篇博文能够激励人们利用XGBoost和InfluxDB进行预测。为此建议查看相关的报告,其中包括如何使用论文描述的许多算法和 InfluxDB 来进行预测和执行异常检测的示例。

原文链接:https://www.infoworld.com/article/3682070/time-series-forecasting-with- xgboost-and-influxdb.html

如何使用XGBoost和InluxDB进行时间序列预测

以上是如何使用XGBoost和InluxDB进行时间序列预测的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:51CTO.COM。如有侵权,请联系admin@php.cn删除
大多数使用的10个功率BI图 - 分析Vidhya大多数使用的10个功率BI图 - 分析VidhyaApr 16, 2025 pm 12:05 PM

用Microsoft Power BI图来利用数据可视化的功能 在当今数据驱动的世界中,有效地将复杂信息传达给非技术观众至关重要。 数据可视化桥接此差距,转换原始数据i

AI的专家系统AI的专家系统Apr 16, 2025 pm 12:00 PM

专家系统:深入研究AI的决策能力 想象一下,从医疗诊断到财务计划,都可以访问任何事情的专家建议。 这就是人工智能专家系统的力量。 这些系统模仿Pro

三个最好的氛围编码器分解了这项代码中的AI革命三个最好的氛围编码器分解了这项代码中的AI革命Apr 16, 2025 am 11:58 AM

首先,很明显,这种情况正在迅速发生。各种公司都在谈论AI目前撰写的代码的比例,并且这些代码的比例正在迅速地增加。已经有很多工作流离失所

跑道AI的Gen-4:AI蒙太奇如何超越荒谬跑道AI的Gen-4:AI蒙太奇如何超越荒谬Apr 16, 2025 am 11:45 AM

从数字营销到社交媒体的所有创意领域,电影业都站在技术十字路口。随着人工智能开始重塑视觉讲故事的各个方面并改变娱乐的景观

如何注册5天ISRO AI免费课程? - 分析Vidhya如何注册5天ISRO AI免费课程? - 分析VidhyaApr 16, 2025 am 11:43 AM

ISRO的免费AI/ML在线课程:通向地理空间技术创新的门户 印度太空研究组织(ISRO)通过其印度遥感研究所(IIR)为学生和专业人士提供了绝佳的机会

AI中的本地搜索算法AI中的本地搜索算法Apr 16, 2025 am 11:40 AM

本地搜索算法:综合指南 规划大规模活动需要有效的工作量分布。 当传统方法失败时,本地搜索算法提供了强大的解决方案。 本文探讨了爬山和模拟

OpenAI以GPT-4.1的重点转移,将编码和成本效率优先考虑OpenAI以GPT-4.1的重点转移,将编码和成本效率优先考虑Apr 16, 2025 am 11:37 AM

该版本包括三种不同的型号,GPT-4.1,GPT-4.1 MINI和GPT-4.1 NANO,标志着向大语言模型景观内的特定任务优化迈进。这些模型并未立即替换诸如

提示:chatgpt生成假护照提示:chatgpt生成假护照Apr 16, 2025 am 11:35 AM

Chip Giant Nvidia周一表示,它将开始制造AI超级计算机(可以处理大量数据并运行复杂算法的机器),完全是在美国首次在美国境内。这一消息是在特朗普总统SI之后发布的

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器