搜尋
首頁科技週邊人工智慧如何使用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(durationration : 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" , 值: "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進行時間序列預測

以下是完整的腳本。這段程式碼主要是從這裡的教學中引入的。

import pandas as pd

from numpy import asarray

from sklearn.metrics import Mean_absolute_error

from xgboost import XGBRegressor
yp#pimfrom plotplot

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-_SdrTMtZzbFK921VbUBIWwg6Rbd-_SdrTMtZzbFK921Vk -6i0ev32_XWZcmkDPsearTWA== ", org="0437f6d51b579000")



write_api = client.write_api(write_optinotallow=SYNCHRONOUS))_api = client.write_api(write_optinotallow=SYNCHRONOUS))#n;
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 = data'

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

'join.time(左:數據,右:shiftedData,as: (l, r) = > ({l 帶資料:l._value,移位資料:r._value}))'

'|> drop(列: ["_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()

# split dataset

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(測試[:, -1], 預測)

傳回錯誤, 測試[:, -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進行時間序列預測的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
最新的最佳及時工程技術的年度彙編最新的最佳及時工程技術的年度彙編Apr 10, 2025 am 11:22 AM

對於那些可能是我專欄新手的人,我廣泛探討了AI的最新進展,包括體現AI,AI推理,AI中的高科技突破,及時的工程,AI培訓,AI,AI RE RE等主題

歐洲的AI大陸行動計劃:Gigafactories,Data Labs和Green AI歐洲的AI大陸行動計劃:Gigafactories,Data Labs和Green AIApr 10, 2025 am 11:21 AM

歐洲雄心勃勃的AI大陸行動計劃旨在將歐盟確立為人工智能的全球領導者。 一個關鍵要素是建立了AI Gigafactories網絡,每個網絡都有大約100,000個高級AI芯片 - 2倍的自動化合物的四倍

微軟的直接代理商故事是否足以創造更多的粉絲?微軟的直接代理商故事是否足以創造更多的粉絲?Apr 10, 2025 am 11:20 AM

微軟對AI代理申請的統一方法:企業的明顯勝利 微軟最近公告的新AI代理能力清晰而統一的演講給人留下了深刻的印象。 與許多技術公告陷入困境不同

向員工出售AI策略:Shopify首席執行官的宣言向員工出售AI策略:Shopify首席執行官的宣言Apr 10, 2025 am 11:19 AM

Shopify首席執行官TobiLütke最近的備忘錄大膽地宣布AI對每位員工的基本期望是公司內部的重大文化轉變。 這不是短暫的趨勢。這是整合到P中的新操作範式

IBM啟動具有完整AI集成的Z17大型機IBM啟動具有完整AI集成的Z17大型機Apr 10, 2025 am 11:18 AM

IBM的Z17大型機:集成AI用於增強業務運營 上個月,在IBM的紐約總部,我收到了Z17功能的預覽。 以Z16的成功為基礎(於2022年推出並證明持續的收入增長

5 Chatgpt提示取決於別人並完全相信自己5 Chatgpt提示取決於別人並完全相信自己Apr 10, 2025 am 11:17 AM

解鎖不可動搖的信心,消除了對外部驗證的需求! 這五個CHATGPT提示將指導您完全自力更生和自我感知的變革轉變。 只需複制,粘貼和自定義包圍

AI與您的思想危險相似AI與您的思想危險相似Apr 10, 2025 am 11:16 AM

人工智能安全與研究公司 Anthropic 最近的一項[研究]開始揭示這些複雜過程的真相,展現出一種令人不安地與我們自身認知領域相似的複雜性。自然智能和人工智能可能比我們想像的更相似。 窺探內部:Anthropic 可解釋性研究 Anthropic 進行的研究的新發現代表了機制可解釋性領域的重大進展,該領域旨在反向工程 AI 的內部計算——不僅僅觀察 AI 做了什麼,而是理解它在人工神經元層面如何做到這一點。 想像一下,試圖通過繪製當有人看到特定物體或思考特定想法時哪些神經元會放電來理解大腦。 A

龍翼展示高通的邊緣動力龍翼展示高通的邊緣動力Apr 10, 2025 am 11:14 AM

高通的龍翼:企業和基礎設施的戰略飛躍 高通公司通過其新的Dragonwing品牌在全球範圍內積極擴展其範圍,以全球為目標。 這不僅僅是雷布蘭

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.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用