時系列予測に XGBoost と InluxDB を使用する方法
XGBoost は、さまざまな予測問題を解決するために使用できる、人気のあるオープンソースの機械学習ライブラリです。時系列予測のために InfluxDB と組み合わせて使用する方法を理解する必要があります。
翻訳者 | Li Rui
レビュー者 | Sun Shujuan
XGBoost は、最適化された分散勾配ブースティング アルゴリズムを実装するオープンソースの機械学習ライブラリです。 XGBoost は並列処理を使用して高速なパフォーマンスを実現し、欠損値を適切に処理し、小さなデータセットでも適切にパフォーマンスを発揮し、過剰適合を防ぎます。これらすべての利点により、XGBoost は予測などの回帰問題に対する一般的なソリューションになっています。
予測は、予測分析、予知保全、製品計画、予算編成などのさまざまなビジネス目標にとってミッションクリティカルです。多くの予測または予測の問題には、時系列データが関係します。このため、XGBoost はオープン ソースの時系列データベース InfluxDB の優れたパートナーになります。
このチュートリアルでは、XGBoost の Python パッケージを使用して InfluxDB 時系列データベースからデータを予測する方法を学習します。また、InfluxDB Python クライアント ライブラリを使用して InfluxDB からデータをクエリし、そのデータを Pandas DataFrame に変換して、予測を行う前に時系列データの操作を容易にします。さらに、XGBoost の利点についてさらに詳しく説明します。
1. 要件
このチュートリアルは、Homebrew を通じて Python 3 がインストールされた macOS システムで実行されます。 Python とクライアントのインストールを簡素化するために、virtualenv、pyenv、conda-env などの追加ツールをセットアップすることをお勧めします。それ以外の場合、完全な要件は次のとおりです:
- 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 という名前のバケットが作成されます。
2. デシジョン ツリー、ランダム フォレスト、および勾配強化
XGBoost とは何かを理解するには、デシジョン ツリー、ランダム フォレスト、および勾配強化を理解する必要があります。デシジョン ツリーは、一連の機能テストで構成される教師あり学習方法です。各ノードはテストであり、すべてのノードはフローチャート構造に編成されています。ブランチは、どのリーフ ラベルまたはクラス ラベルが入力データに割り当てられるかを最終的に決定する条件を表します。
# 機械学習の決定木は、明日雨が降るかどうかを判断するために使用されます。デシジョン ツリーのコンポーネント (葉、枝、ノード) を示すように編集されました。
デシジョン ツリー、ランダム フォレスト、および勾配ブースティングの背後にある基本原理は、複数の「弱学習器」または分類器が連携して強力な予測を行うということです。
ランダム フォレストには複数のデシジョン ツリーが含まれています。デシジョン ツリー内の各ノードは弱学習器とみなされ、ランダム フォレスト内の各デシジョン ツリーは、ランダム フォレスト モデル内の多数の弱学習器の 1 つとみなされます。通常、すべてのデータはランダムにサブセットに分割され、異なるデシジョン ツリーを通過します。
デシジョン ツリーとランダム フォレストを使用した勾配ブースティングは似ていますが、構造方法が異なります。勾配ブースト ツリーにはデシジョン ツリー フォレストも含まれていますが、これらのデシジョン ツリーは追加で構築され、すべてのデータはデシジョン ツリー アンサンブルを介して渡されます。勾配ブースティング ツリーは、離散値 (猫や犬など) の分類ツリーを含む一連の分類ツリーまたは回帰ツリーで構成されている場合があります。回帰木は連続値 (0 ~ 100 など) に使用されます。
3. XGBoost とは何ですか?
勾配ブースティングは、分類と予測に使用される機械学習アルゴリズムです。 XGBoost は、極端なタイプの勾配ブースティングです。極端に言うと、並列処理の力によって勾配ブースティングをより効率的に実行できます。 XGBoost ドキュメントからの以下の画像は、誰かがビデオ ゲームを気に入るかどうかを予測するために勾配ブースティングを使用する方法を示しています。
#誰かがビデオゲームを好きになる可能性が高いかどうかを判断するために 2 つの決定ツリーが使用されます。両方のツリーのリーフ スコアを加算して、どちらがビデオ ゲームを楽しむ可能性が最も高いかを判断します。
XGBoost の利点:
- 比較的理解しやすい。
- 特徴がほとんどない、小規模で構造化された通常のデータに適しています。
XGBoost のいくつかの欠点:
- 過学習しやすく、外れ値に敏感です。予測には、XGBoost の時系列データのマテリアライズド ビューを使用することをお勧めします。
- スパースなデータや教師なしデータではパフォーマンスが低下します。
4. 時系列予測に XGBoost を使用する
ここで使用される空気センサーのサンプル データ セットは、InfluxDB によって提供されます。このデータセットには、複数のセンサーからの温度データが含まれています。次のようなデータを使用して、単一センサーの温度予測が作成されています。
次の Flux コードを使用して、単一の時系列のデータセットとフィルターをインポートします。 (Flux は InfluxDB のクエリ言語です)
import "join"
import "influxdata/influxdb/sample"
//データセットは 10 秒間隔の定期的な時系列です
data = sample.data(set: "airSensor")
|>filter(fn: (r) => r._field == "温度" および r.sensor_id = = "TLM0100")
ランダム フォレストと勾配ブースティングは時系列予測に使用できますが、データを教師あり学習に変換する必要があります。これは、時系列データを教師あり学習セットに変換するには、スライディング ウィンドウ アプローチまたはゆっくりとしたアプローチでデータを前進させる必要があることを意味します。データは Flux で準備することもできます。理想的には、最初に自己相関分析を実行して、使用する最適な方法を決定する必要があります。簡潔にするために、次の Flux コードを使用してデータを定期的に移動します。
import "join"
import "influxdata/influxdb/sample"
data = sample.data(set: "airSensor")
|> ; filter(fn: (r) => r._field == "温度" および r.sensor_id == "TLM0100")
shiftedData = data
|> timeShift(duration : 10 秒、列: ["_time"] )
join.time(左: データ、右:ShiftedData、as: (l, r) => ({l with data: l._value,shiftData : r._value}))
|>drop(列: ["_measurement", "_time", "_value", "sensor_id", "_field"])
import "influxdata/influxdb/sample"
data = sample.data(set: "airSensor")
|> ; filter(fn: (r) => r._field == "温度" および r.sensor_id == "TLM0100")
shiftedData1 = data
|> timeShift(期間: 10 秒、列: ["_time"] )
|> set(キー: "シフト" 、値: "1" )
#shiftedData2 = data
|> timeShift(duration: 20s , columns: ["_time"] )
|> set(key: "shift" , value: "2" )
shiftedData3 = data
|> timeShift(期間: 30 秒、列: ["_time"] )
|> set(キー: "shift" 、値: "3")
shiftedData4 = data
|> timeShift(期間: 40 秒、列: ["_time"] )
|> set(key: "shift" , value: "4")
##union(tables: [shiftedData1,ShiftedData2,shiftedData3,shiftData4])
|> pivot(rowKey:["_time"], columnKey: ["shift"], valueColumn: "_value")
|>drop(columns: ["_measurement", " _time", "_value", "sensor_id", "_field"])
// NaN 値を削除します
|>limit(n:360)
| > tail(n: 356)
さらに、前方検証を使用してアルゴリズムをトレーニングする必要があります。これには、データ セットをテスト セットとトレーニング セットに分割することが含まれます。次に、XGB Regressor を使用して XGBoost モデルをトレーニングし、フィッティング手法を使用して予測します。最後に、平均絶対誤差 (MAE) を使用して予測の精度を判断します。 10 秒の遅延の場合、計算された平均絶対誤差 (MAE) は 0.035 です。これは、予測の 96.5% が非常に正しいことを意味すると解釈できます。以下の図は、XGBoost から取得した予測と、トレーニング/テスト分割からの期待値の比較を示しています。
以下は完全なスクリプトです。このコードは主にここのチュートリアルから引用しています。
import pandas as pd
from numpy import asarray
from sklearn.metrics import means_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_XWZcmkDPsearTWA==) の学習問題", 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 == "温度" および r.sensor_id == "TLM0100")'
'shiftedData = データ'
'|> timeShift(duration: 10s , columns: ["_time"] )'
'join.time(左: データ、右:ShiftedData、as: (l, r) = > ({データを含む l: l._value、shiftData: 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 モデルを当てはめて 1 ステップ予測を行う
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):
precision = 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,dicted=%.1f' % (testy, yhat))
# 予測誤差の推定
エラー = 平均絶対エラー(テスト[:, -1], 予測)
エラーを返す, テスト[:, -1], 予測
# 評価
mae, y, yhat = walk_forward_validation(data, 100)
print('MAE: %.3f' % mae)
プロットの予想と予想
pyplot.plot(y, label='Expected')
pyplot.plot(yhat, label='Predicted')
pyplot.legend()
pyplot.show()
以上が時系列予測に XGBoost と InluxDB を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C# を使用した時系列予測アルゴリズムの作成方法 時系列予測とは、過去のデータを分析することで将来のデータの傾向を予測する手法です。金融、販売、天気予報など、さまざまな分野で幅広く応用されています。この記事では、C#を使用した時系列予測アルゴリズムの書き方を具体的なコード例とともに紹介します。データの準備 時系列予測を実行する前に、まずデータを準備する必要があります。一般に、時系列データは十分な長さがあり、時系列に並べられている必要があります。データベースから取得するか、

XGBoost は、さまざまな予測問題を解決するために使用できる、人気のあるオープンソースの機械学習ライブラリです。時系列予測のために InfluxDB と組み合わせて使用する方法を理解する必要があります。翻訳者 | Li Rui によるレビュー | Sun Shujuan XGBoost は、最適化された分散勾配ブースティング アルゴリズムを実装するオープンソースの機械学習ライブラリです。 XGBoost は並列処理を使用して高速なパフォーマンスを実現し、欠損値を適切に処理し、小さなデータセットでも適切にパフォーマンスを発揮し、過剰適合を防ぎます。これらすべての利点により、XGBoost は予測などの回帰問題に対する一般的なソリューションになっています。予測は、予測分析、予知保全、製品計画、予算編成などのさまざまなビジネス目標にとってミッションクリティカルです。多くの予測または予想問題には時系列が含まれます

元のコンテンツの意味を変更したり、コンテンツを微調整したり、コンテンツを書き直したり、継続したりしないでください。 「分位回帰はこのニーズを満たし、定量化された確率で予測間隔を提供します。これは、特に応答変数の条件付き分布が重要な場合に、予測変数と応答変数の間の関係をモデル化するために使用される統計手法です。従来の回帰とは異なります」図 (A): 分位回帰 分位回帰の概念は推定です。一連の回帰子 X と変数の間の線形関係をモデル化する方法です。被説明変数 Y の分位数。既存の回帰モデルは、実際には被説明変数と説明変数の関係を調べる手法です。説明変数と被説明変数の関係に焦点を当てます。

今日は、時系列予測のパフォーマンスを向上させるために、時系列データを潜在空間上の大規模な自然言語処理 (NLP) モデルと整合させる方法を提案するコネチカット大学の最近の研究成果を紹介したいと思います。この方法の鍵は、潜在的な空間ヒント (プロンプト) を使用して時系列予測の精度を高めることです。論文タイトル: S2IP-LLM: SemanticSpaceInformedPromptLearningwithLLMforTimeSeriesForecasting ダウンロードアドレス: https://arxiv.org/pdf/2403.05798v1.pdf 1. 大きな問題の背景モデル

マクリダキス M コンペティション シリーズ (それぞれ M4 と M5 として知られる) は、それぞれ 2018 年と 2020 年に開催されました (今年は M6 も開催されました)。知らない人のために説明すると、m シリーズは時系列エコシステムの現在の状態を要約したものであり、現在の理論と予測の実践に経験的かつ客観的な証拠を提供すると考えることができます。 2018 M4 の結果は、純粋な「ML」手法が従来の統計手法を当時予想外だった大幅なパフォーマンスで上回ることを示しました。 2 年後の M5[1] では、最高スコアは「ML」メソッドのみを使用したものでした。そして、上位 50 はすべて基本的に ML ベース (ほとんどがツリー モデル) です。このゲームはLightGを見た

時系列は一連のデータ ポイントであり、通常は一定期間にわたって取得された連続した測定値で構成されます。時系列分析は、時系列データから意味のある情報を抽出して予測を行うために、統計手法を使用して時系列データをモデル化および分析するプロセスです。時系列分析は、データから貴重な情報を抽出し、将来の出来事を予測するために使用できる強力なツールです。これを使用して、傾向、季節パターン、変数間のその他の関係を特定できます。時系列分析は、販売、需要、価格の変化などの将来のイベントを予測するためにも使用できます。 Python で時系列データを操作している場合は、さまざまなライブラリから選択できます。そこでこの記事では、Python で時系列を扱うための最も人気のあるライブラリを整理します。 S

Python での ARMA モデルの詳細な説明 ARMA モデルは統計における重要なタイプの時系列モデルであり、時系列データの予測と分析に使用できます。 Python は、ARMA モデルを時系列モデリングに簡単に使用できる豊富なライブラリとツールボックスを提供します。この記事では、Python の ARMA モデルについて詳しく紹介します。 1. ARMA モデルとは ARMA モデルは、自己回帰モデル (AR モデル) と移動平均モデル (MA モデル) から構成される時系列モデルです。その中でもARモデルは

AAAI2024 のこの論文は、シンガポール科学技術研究庁 (A*STAR) とシンガポールの南洋理工大学が共同で発表したもので、多変量時系列分類を改善するためにグラフを意識した対照学習を使用する方法を提案しました。実験結果は、この方法が時系列分類のパフォーマンスを向上させる上で顕著な結果を達成したことを示しています。画像用紙のタイトル: Graph-AwareContrastingforMultivariateTime-SeriesClassification ダウンロード アドレス: https://arxiv.org/pdf/2309.05202.pdf オープンソース コード: https://github.com/Frank-Wa
