搜尋
首頁科技週邊人工智慧如何使用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刪除
商業領袖生成引擎優化指南(GEO)商業領袖生成引擎優化指南(GEO)May 03, 2025 am 11:14 AM

Google正在領導這一轉變。它的“ AI概述”功能已經為10億用戶提供服務,在任何人單擊鏈接之前提供完整的答案。 [^2] 其他球員也正在迅速獲得地面。 Chatgpt,Microsoft Copilot和PE

該初創公司正在使用AI代理來與惡意廣告和模仿帳戶進行戰鬥該初創公司正在使用AI代理來與惡意廣告和模仿帳戶進行戰鬥May 03, 2025 am 11:13 AM

2022年,他創立了社會工程防禦初創公司Doppel,以此做到這一點。隨著網絡犯罪分子越來越高級的AI模型來渦輪增壓,Doppel的AI系統幫助企業對其進行了大規模的對抗 - 更快,更快,

世界模型如何從根本上重塑生成AI和LLM的未來世界模型如何從根本上重塑生成AI和LLM的未來May 03, 2025 am 11:12 AM

瞧,通過與合適的世界模型進行交互,可以實質上提高生成的AI和LLM。 讓我們來談談。 對創新AI突破的這種分析是我正在進行的《福布斯》列的最新覆蓋範圍的一部分,包括

2050年五月:我們要慶祝什麼?2050年五月:我們要慶祝什麼?May 03, 2025 am 11:11 AM

勞動節2050年。全國范圍內的公園充滿了享受傳統燒烤的家庭,而懷舊遊行則穿過城市街道。然而,慶祝活動現在具有像博物館般的品質 - 歷史重演而不是紀念C

您從未聽說過的DeepFake探測器準確是98%您從未聽說過的DeepFake探測器準確是98%May 03, 2025 am 11:10 AM

為了幫助解決這一緊急且令人不安的趨勢,在2025年2月的TEM期刊上進行了同行評審的文章,提供了有關該技術深擊目前面對的最清晰,數據驅動的評估之一。 研究員

量子人才戰爭:隱藏的危機威脅技術的下一個邊界量子人才戰爭:隱藏的危機威脅技術的下一個邊界May 03, 2025 am 11:09 AM

從大大減少制定新藥所需的時間到創造更綠色的能源,企業將有巨大的機會打破新的地面。 不過,有一個很大的問題:嚴重缺乏技能的人

原型:這些細菌可以產生電力原型:這些細菌可以產生電力May 03, 2025 am 11:08 AM

幾年前,科學家發現某些類型的細菌似乎通過發電而不是吸收氧氣而呼吸,但是它們是如何做到的,這是一個謎。一項發表在“雜誌”雜誌上的新研究確定了這種情況的發生方式:Microb

AI和網絡安全:新政府的100天估算AI和網絡安全:新政府的100天估算May 03, 2025 am 11:07 AM

在本週的RSAC 2025會議上,Snyk舉辦了一個及時的小組,標題為“前100天:AI,政策和網絡安全如何碰撞”,其中包括全明星陣容:前CISA董事Jen Easterly;妮可·珀洛斯(Nicole Perlroth),前記者和帕特納(Partne)

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器