[PYTHON] [Kaggle] Versuchen Sie es mit xg boost

1. Zweck

In Wettbewerben wie Kaggle wird häufig ein Gradienten-Boosting wie xgboost und LGBM verwendet. Ich hatte jedoch das Gefühl, dass es nur wenige Artikel und Websites gibt, die als Referenz für diese verwendet werden können, und ich hatte große Probleme, sie selbst zu implementieren. Daher möchte ich dieses Mal beschreiben, was ich über xgboost versucht habe und welche Bedeutung die einzelnen Parameter haben. Zweck.

2. Vorteile der Gradientenverstärkung

・ Fehlende Werte müssen nicht vervollständigt werden ・ Es gibt kein Problem, selbst wenn redundante Funktionen vorhanden sind (selbst wenn es erklärende Variablen mit hoher Korrelation gibt, können sie so verwendet werden, wie sie sind).

-Der Unterschied zum zufälligen Wald besteht darin, dass die Bäume in Reihe geschaltet werden.

Mit den oben genannten Merkmalen scheint häufig eine Gradientenverstärkung verwendet zu werden.

3. Versuchen Sie es mit xgboost

Dieses Mal werde ich es mit Kaggles Hauspreis implementieren.

https://www.kaggle.com/c/house-prices-advanced-regression-techniques

(1) Vorbehandlung

(I) Importieren

import numpy as np
import pandas as pd

#Zur Datenaufteilung
from sklearn.model_selection import train_test_split

#XGBoost
import xgboost as xgb

(Ii) Lesen / Kombinieren von Daten

#Daten gelesen
df_train = pd.read_csv("train.csv")
df_test = pd.read_csv("test.csv")

#Datenverbindung
df_train["TrainFlag"] = True
df_test["TrainFlag"] = False

df_all = df_train.append(df_test)
df_all.index = df_all["Id"]
df_all.drop("Id", axis = 1, inplace = True)

(Iii) Dummy-Variable

df_all = pd.get_dummies(df_all, drop_first=True)

(Iv) Datenaufteilung

#df_Teilen Sie alles erneut in Trainingsdaten und Testdaten auf
df_train = df_all[df_all["TrainFlag"] == True]
df_train = df_train.drop(["TrainFlag"], axis = 1)

df_test = df_all[df_all["TrainFlag"] == False]
df_test = df_test.drop(["TrainFlag"], axis = 1)
df_test = df_test.drop(["SalePrice"], axis = 1)
#Datenaufteilung
y = df_train["SalePrice"].values
X = df_train.drop("SalePrice", axis=1).values
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)

(2) Versuchen Sie es mit xg boost

(I) Erstellung von xgboost-Daten

dtrain = xgb.DMatrix(X_train, label=y_train)
dvalid = xgb.DMatrix(X_test, label=y_test)
dtest = xgb.DMatrix(df_test.values)

Um xgboost verwenden zu können, müssen eigene Daten mit "xgb.DMatrix" verarbeitet werden.

※wichtiger Punkt※

In der dritten Zeile steht "df_test.values". Beachten Sie, dass dies daran liegt, dass df_test im DataFrame-Format vorliegt. Wenn Sie es also nicht als Wert (Numpy-Array) in .values festlegen, tritt beim späteren Modelltraining ein Fehler auf.

(Ii) Parametereinstellung

params = {
        'objective': 'reg:squarederror','silent':1, 'random_state':1234, 
        #Indikatoren für das Lernen(RMSE)
        'eval_metric': 'rmse',
    }
num_round = 500
watchlist = [(dtrain, 'train'), (dvalid, 'eval')]#Legen Sie die Trainingsdaten als dtrain und die Testdaten für die Auswertung als dvalid fest

* Erklärung der Parameter *

-Ziel: Angabe der zu minimierenden Verlustfunktion. Der Standardwert ist linear. -Silent: Geben Sie an, wie das Modellausführungsprotokoll aufgezeichnet werden soll. Der Standardwert ist 0 (Ausgabeprotokoll). -Eval_metric: Ein Auswertungsindex von Daten. Es gibt rmse und logloss. -Num_round: Maximale Anzahl von Lernvorgängen.

(Iii) Modelltraining

model = xgb.train(params,
                    dtrain,#Trainingsdaten
                    num_round,#Stellen Sie die Anzahl der Lernvorgänge ein
                    early_stopping_rounds=20,
                    evals=watchlist,
                    )

-Early_stopping_rounds: Bedeutet, dass das Lernen gestoppt wird, wenn sich die Genauigkeit nicht 20 Mal hintereinander verbessert. Die maximale Anzahl von Lernvorgängen wird in num_round festgelegt. Wenn die Genauigkeit jedoch nicht durch die zuvor hier festgelegte Anzahl von Early_stopping_rounds verbessert wird, wird sie gestoppt.

(Iv) Prognose

#Prognose
prediction_XG = model.predict(dtest, ntree_limit = model.best_ntree_limit)

#Rundungsfraktionen
prediction_XG = np.round(prediction_XG)

・ Über ntree_limit Sie können die Anzahl der Bäume mit der besten Genauigkeit festlegen, indem Sie model.best_ntree_limit festlegen.

(V) Erstellen einer Datei zur Einreichung

submission = pd.DataFrame({"id": df_test.index, "SalePrice": prediction_XG})

Das ist alles!

4. Fazit

Was haben Sie gedacht. Sie können es implementieren, indem Sie den Code kopieren, aber ich halte es für sehr wichtig zu wissen, was jeder Code bedeutet, da es sich um eine grobe Idee handelt.

Ich hoffe, es wird Ihnen helfen, Ihr Verständnis zu vertiefen.

Recommended Posts

[Kaggle] Versuchen Sie es mit xg boost
[Kaggle] Versuchen Sie es mit LGBM
Versuchen Sie es mit Tkinter
Versuchen Sie es mit Docker-Py
Versuchen Sie es mit einem Ausstecher
Versuchen Sie es mit Geopandas
Versuchen Sie es mit Selen
Versuchen Sie es mit scipy
Überlebensvorhersage mit Kaggles Titanic XG Boost [80,1%]
So stellen Sie xg boost mit Optuna ein
Versuchen Sie es mit pandas.DataFrame
Versuchen Sie es mit Django-Swiftbrowser
Versuchen Sie es mit matplotlib
Versuchen Sie es mit tf.metrics
Versuchen Sie es mit PyODE
Versuchen Sie es mit virtualenv (virtualenvwrapper)
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Versuchen Sie es jetzt mit virtualenv
Versuchen Sie es mit W & B.
Versuchen Sie es mit Django templates.html
Versuchen Sie es mit dem Feed-Parser von Python.
Versuchen Sie es mit Pythons Tkinter
Versuchen Sie es mit Tweepy [Python2.7]
Versuchen Sie es mit Pytorchs collate_fn
Versuchen Sie, PythonTex mit Texpad zu verwenden.
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
Versuchen Sie es mit Jupyters Docker-Image
Versuchen Sie es mit Scikit-Learn (1) - K-Clustering nach Durchschnittsmethode
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie es mit Azure Logic Apps
Versuchen Sie es mit Kubernetes Client -Python-
[Kaggle] Versuchen Sie, Future Engineering vorherzusagen
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit OpenCV unter Windows
Versuchen Sie, Jupyter Notebook dynamisch zu verwenden
Versuchen Sie es mit AWS SageMaker Studio
Versuchen Sie, automatisch mit Selen zu twittern.
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 1)
Versuchen Sie es mit der Twitter-API
Versuchen Sie es mit SQLAlchemy + MySQL (Teil 2)
Versuchen Sie es mit der Vorlagenfunktion von Django
Versuchen Sie es mit der PeeringDB 2.0-API
Versuchen Sie es mit der Entwurfsfunktion von Pelican
Versuchen Sie es mit pytest-Overview und Samples-
Versuchen Sie es mit Kaggle leicht maschinell
Versuchen Sie es mit Folium mit Anakonda
Versuchen Sie es mit der Admin-API von Janus Gateway
Versuchen Sie es mit Spyder, das in Anaconda enthalten ist
Versuchen Sie es mit Designmustern (Exporter Edition)
Versuchen Sie es mit Pillow auf iPython (Teil 1)
Versuchen Sie es mit Pillow auf iPython (Teil 2)
Versuchen Sie es mit der Pleasant-API (Python / FastAPI).
Versuchen Sie es mit LevelDB mit Python (plyvel)
Versuchen Sie, Nagios mit pynag zu konfigurieren
Versuchen Sie, die Remote-Debugging-Funktion von PyCharm zu verwenden
Versuchen Sie es mit ArUco mit Raspberry Pi
Versuchen Sie es mit billigem LiDAR (Camsense X1)
[Sakura-Mietserver] Versuchen Sie es mit einer Flasche.
Versuchen Sie es mit Pillow auf iPython (Teil 3).
Stärkung des Lernens 8 Versuchen Sie, die Chainer-Benutzeroberfläche zu verwenden
Versuchen Sie, Statistiken mit e-Stat abzurufen