Cara menggunakan XGBoost dan InluxDB untuk ramalan siri masa
XGBoost ialah perpustakaan pembelajaran mesin sumber terbuka yang popular yang boleh digunakan untuk menyelesaikan pelbagai masalah ramalan. Seseorang perlu memahami cara menggunakannya dengan InfluxDB untuk ramalan siri masa.
Penterjemah |. Li Rui
Penyemak |. Sun Shujuan
XGBoost ialah perpustakaan pembelajaran mesin sumber terbuka yang melaksanakan algoritma penggalak kecerunan teragih yang dioptimumkan. XGBoost menggunakan pemprosesan selari untuk prestasi pantas, mengendalikan nilai yang hilang dengan baik, berprestasi baik pada set data kecil dan mengelakkan pemasangan berlebihan. Semua kelebihan ini menjadikan XGBoost penyelesaian yang popular untuk masalah regresi seperti ramalan.
Ramalan adalah misi kritikal untuk pelbagai matlamat perniagaan seperti analisis ramalan, penyelenggaraan ramalan, perancangan produk, belanjawan, dsb. Banyak masalah ramalan atau ramalan melibatkan data siri masa. Ini menjadikan XGBoost rakan kongsi yang sangat baik untuk pangkalan data siri masa sumber terbuka InfluxDB.
Tutorial ini akan mempelajari cara menggunakan pakej Python XGBoost untuk meramal data daripada pangkalan data siri masa InfluxDB. Anda juga akan menggunakan pustaka klien InfluxDB Python untuk menanyakan data daripada InfluxDB dan menukar data kepada Pandas DataFrame untuk memudahkan anda bekerja dengan data siri masa sebelum membuat ramalan. Selain itu, kelebihan XGBoost akan dibincangkan dengan lebih terperinci.
1. Keperluan
Tutorial ini dilakukan pada sistem macOS dengan Python 3 dipasang melalui Homebrew. Adalah disyorkan untuk menyediakan alat tambahan seperti virtualenv, pyenv atau conda-env untuk memudahkan pemasangan Python dan klien. Jika tidak, keperluan penuhnya adalah seperti berikut:
- 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 >
- Agak mudah difahami.
- Sesuai untuk data kecil, berstruktur dan biasa dengan sedikit ciri.
- Mudah untuk dipasang terlalu banyak dan sensitif kepada outlier. Mungkin idea yang baik untuk menggunakan paparan nyata data siri masa dalam XGBoost untuk peramalan.
- Berprestasi buruk pada data yang jarang atau tidak diawasi.
4. Gunakan XGBoost untuk ramalan siri masa
Apa yang digunakan di sini ialah set data sampel sensor udara, yang disediakan oleh InfluxDB. Set data ini mengandungi data suhu daripada berbilang penderia. Ramalan suhu sedang dibuat untuk penderia tunggal dengan data seperti ini:
Gunakan kod Fluks berikut untuk mengimport set data dan penapis untuk satu siri masa. (Flux ialah bahasa pertanyaan InfluxDB)
import "join"
import "influxdata/influxdb/sample"
//dataset ialah siri masa biasa pada selang 10 saat
data = sample.data(set: "airSensor")
|> penapis(fn: (r) => r._field == "suhu" dan r.sensor_id = = "TLM0100")
Penggalak hutan dan kecerunan rawak boleh digunakan untuk peramalan siri masa, tetapi mereka memerlukan menukar data kepada pembelajaran terselia. Ini bermakna bahawa data mesti digerakkan ke hadapan dalam pendekatan tetingkap gelongsor atau pendekatan bergerak perlahan untuk menukar data siri masa kepada set pembelajaran yang diselia. Data juga boleh disediakan dengan Flux. Sebaik-baiknya, beberapa analisis autokorelasi perlu dilakukan terlebih dahulu untuk menentukan kaedah terbaik untuk digunakan. Untuk kepentingan ringkas, kod Fluks berikut akan digunakan untuk memindahkan data pada selang masa yang tetap.
import "join"
import "influxdata/influxdb/sample"
data = sample.data(set: "airSensor")
|> ; penapis(fn: (r) => r._field == "suhu" dan r.sensor_id == "TLM0100")
shiftedData = data
|> : 10s, lajur: ["_time"] )
join.time(kiri: data, kanan: shiftedData, sebagai: (l, r) => ({l dengan data: l._value, shiftedData : r._value}))
|> drop(lajur: ["_measurement", "_time", "_value", "sensor_id", "_field"])
Leret ke kiri atau kanan untuk melihat kod penuh
Jika anda ingin menambah data lag tambahan pada input model, anda boleh mengikut logik Fluks berikut.
import "eksperimen"
import "influxdata/influxdb/sample"
data = sample.data(set: "airSensor")
|> ; penapis(fn: (r) => r._field == "suhu" dan r.sensor_id == "TLM0100")
shiftedData1 = data
|> timeShift(tempoh: 10s, lajur: ["_masa"] )
|> set(kunci: "shift" , nilai: "1" )
shiftedData2 = data
|> timeShift(tempoh: 20s , lajur: ["_time"] )
|> )
shiftedData3 = data
|> timeShift(tempoh: 30s , lajur: ["_time"] )
|> kunci: "shift" , nilai: "3")
shiftedData4 = data
|> timeShift(tempoh: 40s , lajur: ["_masa"] )
|> set(kunci: "shift" , nilai: "4")
union(jadual: [shiftedData1, shiftedData2, shiftedData3, shiftedData4])
|> pivot(rowKey:["_time"], columnKey: ["shift"], valueColumn: "_value")
|> "_masa", "_value", "sensor_id", "_field"])
// alih keluar nilai NaN
|> had(n:360)
|> tail(n: 356)
Selain itu, kita mesti menggunakan pengesahan hadapan untuk melatih algoritma. Ini melibatkan pembahagian set data kepada set ujian dan set latihan. Kemudian gunakan XGB Regressor untuk melatih model XGBoost dan gunakan kaedah pemasangan untuk meramal. Akhir sekali, kami menggunakan min ralat mutlak (MAE) untuk menentukan ketepatan ramalan. Untuk kelewatan 10 saat, ralat mutlak min yang dikira (MAE) ialah 0.035. Kita boleh mentafsirkan ini bermakna bahawa 96.5% daripada ramalan adalah sangat betul. Rajah di bawah menunjukkan perbandingan antara ramalan yang kami peroleh daripada XGBoost dan nilai yang dijangkakan daripada pemisahan kereta api/ujian.
Berikut ialah skrip lengkapnya. Kod ini kebanyakannya diambil daripada tutorial di sini.
import panda sebagai pd
daripada numpy import asarray
daripada sklearn.metrics import mean_absolute_error
daripada xgboost import XGBRegressor
importf
🎜>
daripada influxdb_client import InfluxDBClient
daripada influxdb_client.client.write_api import SYNCHRONOUS
# data pertanyaan dengan Perpustakaan InfluxDB Client yang diubah masalah pembelajaran dengan Flux
klien = InfluxDBClient(url="https://us-west-2-1.aws.cloud2.influxdata.com", token="NyP-HzFGkObUBI4Wwg6Rbd-_SdrTMtZzbFK921VkMQWpBh0b0kMQWpBh0b DPsearTWA== ", org="0437f6d51b579000")
# write_api = client.write_api(write_optinotallow=SYNCHRONOUS)
query_api = client.query_api()
'import "influxdata/influxdb/sample"'
'data = sample.data(set: "airSensor")'
'|> penapis(fn: (r) => r._field == "suhu" dan r.sensor_id == "TLM0100")'
'shiftedData = data'
'|> timeShift(tempoh: 10s , lajur: ["_time"] )'
'join.time(kiri: data, kanan: shiftedData, sebagai: (l, r) = > ({l dengan data: l._value, shiftedData: r._value}))'
'|> drop(lajur: ["_ukuran", "_masa", "_nilai", "id_sensor", "_medan"])'
'|> hasil(nama: "ditukar kepada set data pembelajaran diselia")'
)
df = df.drop(columns=['table', 'result'])
data = df.to_numpy()
# bahagikan set data univariate kepada set kereta api/ujian
def train_test_split(data, n_test):
kembali data[:-n_test:], data[-n_test:]
# muat model xgboost dan buat ramalan satu langkah
def xgboost_forecast(kereta api, testX) :
# tukar senarai kepada tatasusunan
kereta api = asarray(kereta api)
# pecahkan kepada lajur input dan output
trainX, trainy = train[: , :-1], kereta api[:, -1]
# model muat
model = XGBRegressor(objective='reg:squarederror', n_estimators=1000)
model.fit(trainX, trainy)
# buat ramalan satu langkah
yhat = model.predict(asarray([testX]))
return yhat[0 ]
# pengesahan berjalan ke hadapan untuk data univariate
definisi walk_forward_validation(data, n_test):
ramalan = senarai()
# set data split
kereta api, ujian = train_test_split(data, n_test)
sejarah = [x untuk x dalam kereta api]
# langkah di atas setiap langkah masuk set ujian
untuk i dalam julat(len(ujian)):
# pisah baris ujian ke lajur input dan output
testX, testy = test[i, : -1], uji[i, -1]
# model muat pada sejarah dan buat ramalan
yhat = xgboost_forecast(sejarah, testX)
# ramalan kedai dalam senarai ramalan
ramalan.tambah(yhat)
# tambahkan pemerhatian sebenar pada sejarah untuk gelung seterusnya
sejarah.tambah(ujian[i])
# meringkaskan kemajuan
print('>expected=%.1f, predicted=%.1f' % (testy, yhat))
# anggaran ralat ramalan
ralat = min_absolute_error(ujian[:, -1], ramalan)
kembali ralat, ujian[:, -1], ramalan
# nilai
mae, y, yhat = walk_forward_validation(data, 100)
print('MAE: %.3f' % mae)
# plot dijangka vs ramalan
pyplot.plot(y, label='Expected')
pyplot.plot(yhat, label='Predicted')
pyplot.legend()
pyplot.show()
五、结论
希望这篇博文能够激励人们利用XGDB颌这篇博文能够激励人们利用XGDB钌语为们利用建议查看相关的报告,其中包括如何使用本文描述的许多算法和InfluxDB来进行预测和执行异常检测的示例。预来进行预测和执行异常检测的示例。
Atas ialah kandungan terperinci Cara menggunakan XGBoost dan InluxDB untuk ramalan siri masa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Cara menulis algoritma peramalan siri masa menggunakan C# Peramalan siri masa ialah kaedah meramal arah aliran data masa hadapan dengan menganalisis data lepas. Ia mempunyai aplikasi yang luas dalam banyak bidang seperti kewangan, jualan dan ramalan cuaca. Dalam artikel ini, kami akan memperkenalkan cara menulis algoritma ramalan siri masa menggunakan C#, dengan contoh kod khusus. Penyediaan Data Sebelum melakukan peramalan siri masa, anda perlu menyediakan data terlebih dahulu. Secara umumnya, data siri masa hendaklah mempunyai panjang yang mencukupi dan disusun mengikut urutan kronologi. Anda boleh mendapatkannya daripada pangkalan data atau

XGBoost ialah perpustakaan pembelajaran mesin sumber terbuka yang popular yang boleh digunakan untuk menyelesaikan pelbagai masalah ramalan. Seseorang perlu memahami cara menggunakannya dengan InfluxDB untuk ramalan siri masa. Penterjemah |. Disemak oleh Li Rui |. Sun Shujuan XGBoost ialah perpustakaan pembelajaran mesin sumber terbuka yang melaksanakan algoritma peningkatan kecerunan teragih yang dioptimumkan. XGBoost menggunakan pemprosesan selari untuk prestasi pantas, mengendalikan nilai yang hilang dengan baik, berprestasi baik pada set data kecil dan mengelakkan pemasangan berlebihan. Semua kelebihan ini menjadikan XGBoost penyelesaian yang popular untuk masalah regresi seperti ramalan. Ramalan adalah misi kritikal untuk pelbagai objektif perniagaan seperti analisis ramalan, penyelenggaraan ramalan, perancangan produk, belanjawan, dsb. Banyak masalah ramalan atau ramalan melibatkan siri masa

Jangan ubah maksud kandungan asal, perhalusi kandungan, tulis semula kandungan dan jangan teruskan. "Regression kuantil memenuhi keperluan ini, menyediakan selang ramalan dengan peluang yang dikira. Ia adalah teknik statistik yang digunakan untuk memodelkan hubungan antara pembolehubah peramal dan pembolehubah tindak balas, terutamanya apabila taburan bersyarat pembolehubah tindak balas adalah menarik Apabila. Tidak seperti regresi tradisional kaedah, regresi kuantil memfokuskan pada menganggar magnitud bersyarat pembolehubah bergerak balas dan bukannya min bersyarat "Rajah (A): Regresi kuantil Regresi kuantil ialah anggaran. Kaedah pemodelan untuk hubungan linear antara set regresi X dan kuantil. daripada pembolehubah yang dijelaskan Y. Model regresi yang sedia ada sebenarnya adalah kaedah untuk mengkaji hubungan antara pembolehubah yang dijelaskan dan pembolehubah penjelasan. Mereka memberi tumpuan kepada hubungan antara pembolehubah penjelasan dan pembolehubah yang dijelaskan

Hari ini saya ingin berkongsi kerja penyelidikan terbaru dari University of Connecticut yang mencadangkan kaedah untuk menyelaraskan data siri masa dengan model pemprosesan bahasa semula jadi (NLP) yang besar pada ruang terpendam untuk meningkatkan prestasi peramalan siri masa. Kunci kepada kaedah ini ialah menggunakan petunjuk spatial terpendam (prompt) untuk meningkatkan ketepatan ramalan siri masa. Tajuk kertas: S2IP-LLM: SemanticSpaceInformedPromptLearningwithLLMforTimeSeriesForecasting Alamat muat turun: https://arxiv.org/pdf/2403.05798v1.pdf 1. Model latar belakang masalah besar

Siri M-Competitions Makridakis (masing-masing dikenali sebagai M4 dan M5) telah diadakan pada tahun 2018 dan 2020 (M6 juga diadakan pada tahun ini). Bagi mereka yang tidak tahu, pertandingan siri-m boleh dianggap sebagai ringkasan keadaan semasa ekosistem siri masa, memberikan bukti empirikal dan objektif untuk teori dan amalan ramalan semasa. Keputusan daripada M4 2018 menunjukkan bahawa kaedah "ML" tulen mengatasi kaedah statistik tradisional dengan margin besar yang tidak dijangka pada masa itu. Dalam M5[1] dua tahun kemudian, skor tertinggi adalah dengan hanya kaedah "ML". Dan semua 50 teratas pada asasnya berdasarkan ML (kebanyakannya model pokok). Permainan ini menyaksikan LightG

Siri masa ialah urutan titik data, biasanya terdiri daripada pengukuran berturut-turut yang diambil dalam tempoh masa. Analisis siri masa ialah proses pemodelan dan analisis data siri masa menggunakan teknik statistik untuk mengekstrak maklumat yang bermakna daripadanya dan membuat ramalan. Analisis siri masa ialah alat berkuasa yang boleh digunakan untuk mengekstrak maklumat berharga daripada data dan membuat ramalan tentang peristiwa masa hadapan. Ia boleh digunakan untuk mengenal pasti arah aliran, corak bermusim dan perhubungan lain antara pembolehubah. Analisis siri masa juga boleh digunakan untuk meramalkan peristiwa masa hadapan seperti jualan, permintaan atau perubahan harga. Jika anda bekerja dengan data siri masa dalam Python, terdapat banyak perpustakaan yang berbeza untuk dipilih. Jadi dalam artikel ini, kami akan menyusun perpustakaan paling popular untuk bekerja dengan siri masa dalam Python. S

Penjelasan terperinci tentang model ARMA dalam Python Model ARMA ialah jenis model siri masa yang penting dalam statistik, yang boleh digunakan untuk ramalan dan analisis data siri masa. Python menyediakan banyak perpustakaan dan kotak alat yang boleh menggunakan model ARMA dengan mudah untuk pemodelan siri masa. Artikel ini akan memperkenalkan model ARMA dalam Python secara terperinci. 1. Apakah model ARMA? Model ARMA ialah model siri masa yang terdiri daripada model autoregresif (model AR) dan model purata bergerak (model MA). Antaranya, model AR

Kertas kerja dalam AAAI2024 ini diterbitkan bersama oleh Agensi Sains, Teknologi dan Penyelidikan Singapura (A*STAR) dan Universiti Teknologi Nanyang, Singapura Ia mencadangkan kaedah menggunakan pembelajaran kontrastif sedar graf untuk meningkatkan klasifikasi siri masa multivariate. Keputusan eksperimen menunjukkan bahawa kaedah ini telah mencapai keputusan yang luar biasa dalam meningkatkan prestasi pengelasan siri masa. Tajuk kertas gambar: Graph-AwareContrastingforMultivariateTime-SeriesClassification Alamat muat turun: https://arxiv.org/pdf/2309.05202.pdf Kod sumber terbuka: https://github.com/Frank-Wa
