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önnten. Ich hatte große Probleme, sie selbst zu implementieren. Daher möchte ich dieses Mal beschreiben, was ich über LGBM versucht habe und welche Bedeutung die einzelnen Parameter haben. Zweck.
Nachschlagewerk Dieses Mal wird es im Wesentlichen gemäß diesem Buch implementiert. "Mit der Kaggle-Datenanalysetechnologie gewinnen" https://www.amazon.co.jp/Kaggle%E3%81%A7%E5%8B%9D%E3%81%A4%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E3%81%AE%E6%8A%80%E8%A1%93-%E9%96%80%E8%84%87-%E5%A4%A7%E8%BC%94/dp/4297108437
Im vorherigen Artikel haben wir xgboost implementiert, und diesmal ist es die LGBM-Version. [Kaggle] Versuchen Sie es mit xgboost
・ 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.
Dieses Mal werde ich versuchen, es mit Kaggles Hauspreis umzusetzen.
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
import numpy as np
import pandas as pd
#Zur Datenaufteilung
from sklearn.model_selection import train_test_split
#XGBoost
import xgboost as xgb
#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)
df_all = pd.get_dummies(df_all, drop_first=True)
#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)
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test)
-Um LGBM zu verwenden, müssen die Daten mit lgb.Dataset verarbeitet werden. -In xgboost musste df_test (ursprüngliche Testdaten) ebenfalls mit ".Dataset" verarbeitet werden, LGBM jedoch nicht. Bitte beachten Sie, dass sich die Verwendung der Daten hier zwischen xgboost und LGBM geringfügig unterscheidet.
params = {
#Rückgabeproblem
'random_state':1234, 'verbose':0,
#Indikatoren für das Lernen(RMSE)
'metrics': 'rmse',
}
num_round = 100
Siehe unten für Details https://lightgbm.readthedocs.io/en/latest/Parameters.html
・ Ausführlich: Wie viele Informationen werden während des Lernens angezeigt? Der Standardwert ist 1. ・ Metriken: So messen Sie die Fehlberechnungsfunktion. -Num_round: Maximale Anzahl von Lernvorgängen.
model = lgb.train(params, lgb_train, num_boost_round = num_round)
#Prognose
prediction_LG = model.predict(df_test)
#Rundungsfraktionen
prediction_LG = np.round(prediction_LG)
submission = pd.DataFrame({"id": df_test.index, "SalePrice": prediction_LG})
Das ist alles!
Was haben Sie gedacht. Obwohl LGBM berühmt ist, scheinen sich Anfänger Zeit zu nehmen, um es umzusetzen.
Ich habe einen einfachen Code eingeführt, damit Sie verstehen, wie Sie ihn so einfach wie möglich implementieren können. Sie können es auch implementieren, indem Sie den Code kopieren. Ich halte es jedoch 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