Dans des compétitions comme Kaggle, le boosting de gradient comme xgboost et LGBM est souvent utilisé. Cependant, j'ai senti qu'il y avait peu d'articles et de sites qui pouvaient être utilisés comme référence pour ceux-ci / j'ai eu beaucoup de mal à l'implémenter moi-même, donc cette fois je voudrais décrire ce que j'ai essayé sur le LGBM et la signification de chaque paramètre. Objectif.
Livre de référence Cette fois, il est essentiellement mis en œuvre selon ce livre. "Gagner avec la technologie d'analyse de données Kaggle" 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
Dans l'article précédent, nous avons implémenté xgboost, et cette fois c'est la version LGBM. [Kaggle] Essayez d'utiliser xgboost
・ Pas besoin de compléter les valeurs manquantes ・ Il n'y a pas de problème même s'il y a des fonctionnalités redondantes (même s'il y a des variables explicatives avec une forte corrélation, elles peuvent être utilisées telles quelles)
-La différence avec la forêt aléatoire est que les arbres sont fabriqués en série.
Avec les fonctionnalités ci-dessus, le renforcement du gradient semble être souvent utilisé.
Cette fois, je vais essayer de l'implémenter en utilisant le prix de la maison de Kaggle.
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
import numpy as np
import pandas as pd
#Pour la division des données
from sklearn.model_selection import train_test_split
#XGBoost
import xgboost as xgb
#Lecture des données
df_train = pd.read_csv("train.csv")
df_test = pd.read_csv("test.csv")
#Jointure de données
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_Divisez tout en données d'entraînement et testez à nouveau les données
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)
#Répartition des données
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)
-Pour utiliser LGBM, il est nécessaire de traiter les données avec lgb.Dataset. -Dans xgboost, df_test (données de test d'origine) devait également être traité avec ".Dataset", mais pas LGBM. Veuillez noter que l'utilisation des données ici est légèrement différente entre xgboost et LGBM.
params = {
#Problème de retour
'random_state':1234, 'verbose':0,
#Indicateurs d'apprentissage(RMSE)
'metrics': 'rmse',
}
num_round = 100
Voir ci-dessous pour plus de détails https://lightgbm.readthedocs.io/en/latest/Parameters.html
・ Verbose: la quantité d'informations affichées pendant l'apprentissage. La valeur par défaut est 1. ・ Métriques: comment mesurer la fonction d'erreur de calcul. -Num_round: Nombre maximum d'apprentissage.
model = lgb.train(params, lgb_train, num_boost_round = num_round)
#Prévoir
prediction_LG = model.predict(df_test)
#Arrondir les fractions
prediction_LG = np.round(prediction_LG)
submission = pd.DataFrame({"id": df_test.index, "SalePrice": prediction_LG})
C'est tout!
Qu'as-tu pensé. Bien que le LGBM soit célèbre, il semble que les débutants prennent du temps pour le mettre en œuvre.
J'ai introduit un code simple afin que vous puissiez comprendre comment l'implémenter aussi facilement que possible. De plus, vous pouvez l'implémenter en copiant le code, mais je pense qu'il est très important de savoir ce que signifie chaque code car c'est une idée approximative.
J'espère que cela vous aidera à approfondir votre compréhension.
Recommended Posts