[PYTHON] Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen

Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen Verwenden Sie Daten von März letzten Jahres bis Februar dieses Jahres Python Anfänger Maschinelles Lernen

1. Zweck

Es gab eine KI-Sakura-Vorhersage und einen Artikel, der besagte, dass xgboost verwendet wurde, also versuchte ich, Kirschblüten mit xgboost vorherzusagen. https://www.businessinsider.jp/post-186528

2. Fazit

Es war ein subtiles Ergebnis. Es stellte sich heraus, dass die obige Vorhersage von AI Sakura ausgezeichnet ist. 無題.png Faktoren, die einen großen Einfluss auf die Blütezeit haben, sind die jährliche Durchschnittstemperatur, die Sonnenstunden im Juli, der Niederschlag im August und die niedrigste Temperatur im Oktober. Ich kenne die durchschnittliche Jahrestemperatur, war aber überrascht über die Sonnenstunden im Juli, die Niederschläge im August und die niedrigsten Temperaturen im Oktober.

3. Datenquelle

https://www.data.jma.go.jp/gmd/risk/obsdl/index.php Die oben genannten Daten der Meteorologischen Agentur wurden verarbeitet und verwendet.

4. Erklärung des Codes

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from xgboost import XGBRegressor, plot_importance
from sklearn.model_selection import GridSearchCV, KFold
from tqdm import tqdm_notebook
path="./"
train = pd.read_csv(path+"kikou5train.csv")
x_test = pd.read_csv(path+"kikou5test.csv")

y_train = train.kaika.copy()
x_train = train.drop("kaika", axis=1)
train_id = x_train.Id
x_train.head()
date	avtmp3	maxtmp3	mintmp3	ame3	nisho3	joki3	kumo3	avtmp4	maxtmp4	...	kumo13	avtmp14	maxtmp14	mintmp14	ame14	nisho14	joki14	kumo14	kaika	TotalInc
Id																					
1	1961	8.2	21.9	-0.4	106.6	181.1	6.7	6.3	14.9	26.0	...	3.8	5.9	24.5	-2.6	13.5	195.0	4.5	4.1	NaN	193.6
2	1962	8.2	18.8	-0.8	65.5	189.8	6.3	4.7	14.1	24.5	...	2.0	4.8	15.3	-4.1	21.3	199.9	4.1	4.9	NaN	182.3

Beitreten

df = pd.concat([x_train, x_test])
df.head()

Feature Quantity Engineering Jährliche Durchschnittstemperatur hinzugefügt

df["TotalInc"] = df.avtmp3 + df.avtmp4 + df.avtmp5 + df.avtmp6 + df.avtmp7 + df.avtmp8 + df.avtmp9 + df.avtmp10 + df.avtmp11 + df.avtmp12 + df.avtmp13 + df.avtmp14 #Von durchschnittlicher Temperatur
df.head()
date	avtmp3	maxtmp3	mintmp3	ame3	nisho3	joki3	kumo3	avtmp4	maxtmp4	...	kumo13	avtmp14	maxtmp14	mintmp14	ame14	nisho14	joki14	kumo14	kaika	TotalInc
0	1980	8.2	21.2	1.3	173.5	157.5	6	6.2	13.6	24	...	2.9	5.3	17.2	-3.5	38	157.3	4.6	5.5	NaN	183.4
1 rows × 87 columns
x_train = df[df.Id.isin(train_id)].set_index("Id")
x_test = df[~df.Id.isin(train_id)].set_index("Id")

Optimale Hyperparametersuche

random_state = 0
params = {
          "learning_rate": [0.01, 0.05, 0.1],
          "min_child_weight": [0.1],
          "gamma": [0],
          "reg_alpha": [0],
          "reg_lambda": [1],
          "max_depth": [3, 5, 7],
          "max_delta_step": [0],
          "random_state": [random_state],
          "n_estimators": [50, 100, 200],
          }
reg = XGBRegressor()
cv = KFold(n_splits=3, shuffle=True, random_state=random_state)
reg_gs = GridSearchCV(reg, params, cv=cv)
reg_gs.fit(x_train, y_train)
GridSearchCV(cv=KFold(n_splits=3, random_state=0, shuffle=True),
             estimator=XGBRegressor(base_score=None, booster=None,
                                    colsample_bylevel=None,
                                    colsample_bynode=None,
                                    colsample_bytree=None, gamma=None,
                                    gpu_id=None, importance_type='gain',
                                    interaction_constraints=None,
                                    learning_rate=None, max_delta_step=None,
                                    max_depth=None, min_child_weight=None,
                                    missing=nan, monoto...
                                    num_parallel_tree=None, random_state=None,
                                    reg_alpha=None, reg_lambda=None,
                                    scale_pos_weight=None, subsample=None,
                                    tree_method=None, validate_parameters=None,
                                    verbosity=None),
             param_grid={'gamma': [0], 'learning_rate': [0.01, 0.05, 0.1],
                         'max_delta_step': [0], 'max_depth': [3, 5, 7],
                         'min_child_weight': [0.1],
                         'n_estimators': [50, 100, 200], 'random_state': [0],
                         'reg_alpha': [0], 'reg_lambda': [1]})
display(reg_gs.best_params_)
display(reg_gs.best_score_)
ax = plot_importance(reg_gs.best_estimator_, importance_type="gain")
fig = ax.figure
fig.set_size_inches(250, 250)
ax.figure.set_size_inches(18,18)
{'gamma': 0,
 'learning_rate': 0.1,
 'max_delta_step': 0,
 'max_depth': 5,
 'min_child_weight': 0.1,
 'n_estimators': 50,
 'random_state': 0,
 'reg_alpha': 0,
 'reg_lambda': 1}
0.36250088820449333

Prognose

y_pred3 = reg_gs.predict(x_test)

Bewerten Sie den Fehler anhand des richtigen Etiketts

y_true = pd.read_csv(path+"kikou5test.csv")
preds = pd.DataFrame({"pred3": y_pred3})
df_out = pd.concat([y_true, preds], axis=1)
df_out.head()
Id	date	avtmp3	maxtmp3	mintmp3	ame3	nisho3	joki3	kumo3	avtmp4	...	avtmp14	maxtmp14	mintmp14	ame14	nisho14	joki14	kumo14	kaika	pred3	loss3
0	100	1966	9.6	21.6	1.2	99.9	150.4	7.0	6.6	13.6	...	4.9	19.1	-4.0	43.8	162.6	5.1	5.0	30	29.816103	0.033818

RMSE

df_out["loss3"] = (df_out.kaika - df_out.pred3)**2
df_out.iloc[:, -3:].mean()
kaika    24.909091
pred3    26.849123
loss3    23.966188
dtype: float64
from sklearn.metrics import mean_squared_error, mean_absolute_error
#RMSE
rmse_kaika = np.sqrt(mean_squared_error(df_out.kaika, df_out.pred3))
rmse_kaika
4.895527368155607

Die Vorhersagegenauigkeit von Kirschblüten beträgt weniger als 5 Tage. Es war überraschend vorhersehbar, aber subtil.

Recommended Posts

Versuchen Sie, Kirschblüten mit xg Boost vorherzusagen
Versuchen Sie, den Wechselkurs (FX) mit nicht tiefem maschinellem Lernen vorherzusagen
Versuchen Sie, Facebook mit Python zu betreiben
Versuchen Sie, sich mit ONNX Runtime zu profilieren
Versuchen Sie, Audio mit M5 STACK auszugeben
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Versuchen Sie, sich mit Python bei qiita anzumelden
Versuchen Sie, mit Pandas in ordentliche Daten umzuwandeln
Versuchen Sie schnell, Ihren Datensatz mit Pandas zu visualisieren
Erster Versuch von YDK mit Cisco IOS-XE
Versuchen Sie, ein Bild mit Entfremdung zu erzeugen
Vorhersage von Effekten mit LSTM mithilfe von Keras + Tensorflow Teil 2 (Berechnung mit GPU)
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Versuchen Sie, Doujin-Musikdaten mit Pandas zu aggregieren
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Versuchen Sie, das Dokument der Azure-Dokumentdatenbank mit pydocumentdb zu extrahieren
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Versuche mit EV3 und PC zu kommunizieren! (MQTT)
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Versuchen Sie, Python-Dokumente automatisch mit Sphinx zu generieren
Ich habe versucht, das Überleben der Titanic mit PyCaret vorherzusagen
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Versuchen Sie, Client-FTP mit Pythonista am schnellsten zu machen
Versuchen Sie, FX mit LSTM mithilfe von Keras + Tensorflow Teil 3 vorherzusagen (versuchen Sie, alle Parameter zu treffen).
Versuchen Sie, Fische mit Python + OpenCV2.4 (unvollendet) zu erkennen.
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Verwendung von xgboost: Mehrklassenklassifizierung mit Irisdaten
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
Versuchen Sie, mit Tkinter in Python dynamisch einen Checkbutton zu erstellen
Versuchen Sie, das Problem der Zuweisung von Schulungsärzten mit Python zu lösen
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
Versuchen Sie, mit MVC eine RESTful-API mit Flask 1.0.2 zu erstellen
Schemagesteuerte Entwicklung mit Responder: Versuchen Sie, die Swagger-Benutzeroberfläche anzuzeigen
[Neo4J] ④ Versuchen Sie, die Diagrammstruktur mit Cypher zu handhaben
Ein Beispiel, um Faktorisierungsmaschinen schnell mit fastFM auszuprobieren
Versuchen Sie, Anfragen von iPhone mit Burp Suite zu manipulieren
Versuchen Sie es mit Python.
Konvertieren Sie 202003 bis 2020-03 mit Pandas
Versuchen Sie, yolact zu implementieren
Versuchen Sie SNN mit BindsNET
Versuchen Sie eine Regression mit TensorFlow
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
Versuchen Sie, mit dem Uprobe zu spielen, der Systemtap direkt unterstützt
[Evangelion] Versuchen Sie, mit Deep Learning automatisch Asuka-ähnliche Linien zu erzeugen
Versuchen Sie, verschiedene Informationen anzuzeigen, die für das Debuggen mit Python nützlich sind
Wenn ich versuche, mit Heroku zu pushen, funktioniert es nicht
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Versuchen Sie, iTunes und Hue of Collection Case mit MQTT zu verknüpfen
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
Versuchen Sie, die Datentabelle von Azure SQL Server mit pyodbc zu extrahieren
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, Titanic-Daten mit der Vorverarbeitungsbibliothek DataLiner (Anhängen) zu verarbeiten.
Versuchen Sie, Daten zu erfassen, während Sie mit anaconda eine Portweiterleitung an RDS durchführen.