[PYTHON] Modélisons un arbre boostant le gradient avec xgboost

Qu'est-ce qu'un arbre de renforcement de gradient?

Un des algorithmes souvent utilisés dans les concours d'analyse de données. Abrégé en GBDT.

G ・ ・ ・ Gradient = méthode de descente de gradient B ・ ・ ・ Boosting = une des méthodes d'ensemble D ・ ・ ・ Décision T ・ ・ ・ Arbre

En d'autres termes, c'est une méthode qui combine "Gradient", "Boosting (ensemble)" et "Decision Tree".

Méthode de descente de gradient

Un algorithme qui met à jour les poids petit à petit pour trouver le point où le gradient d'erreur est minimisé. Pensez que "plus petite erreur = prédiction plus précise".

Booster

L'une des méthodes d'ensemble pour créer un modèle en combinant plusieurs modèles. Les modèles du même type sont combinés en série et les modèles sont entraînés tout en corrigeant les valeurs prédites. Un apprenant fort (très précis) peut être créé en combinant plusieurs apprenants faibles (ceux avec une faible précision de prédiction).

Arbre de décision

Méthode d'analyse de données à l'aide d'un dendrogramme. Par exemple, lors de la prédiction "d'acheter de la crème glacée"

"Température supérieure à 30 ° C" => achètera "Température inférieure à 30 ° C" => N'achèterait pas

Préparez la condition et faites une prédiction.

Fonctionnalités de l'arborescence d'amélioration du dégradé

--Les caractéristiques sont des valeurs numériques
La quantité de caractéristiques doit être une valeur numérique afin de juger si la branche de l'arbre de détermination est plus grande ou plus petite que la quantité de caractéristiques. --Peut gérer les valeurs manquantes
Puisqu'il est jugé par la branche de l'arbre de décision, il peut être utilisé sans compléter la valeur manquante.

Flux de renforcement de gradient

  1. Calculez la moyenne des variables objectives
  2. Calculez l'erreur
  3. Construisez un arbre de décision
  4. Trouvez de nouvelles prédictions à l'aide de l'ensemble
  5. Calculez à nouveau l'erreur
  6. Répétez 3 ~ 5
  7. Faites une prédiction finale

La précision est améliorée en corrigeant la différence entre la valeur prédite et la variable objectif dans l'arbre de décision suivant.

Procédure de montage

Cette fois, nous effectuerons une classification binaire.

Charger la bibliothèque

import xgboost as xgb

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from matplotlib import pyplot as plt

%matplotlib inline

Lire les données

df = pd.read_csv('hoge.csv')
df.head()    #Confirmation de lecture

Sélectionnez la quantité de fonctionnalités

#Cette fois à partir de la quantité de caractéristiques X"foo", À partir de la variable objectif Y"bar"Se débarrasser de

X = df.drop(['foo', 'bar'], axis=1)
y = df['bar']
X.head()    #Confirmez qu'il a été supprimé

Séparation des données d'entraînement et des données d'évaluation

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0, shuffle=True)

test_size: divise le rapport spécifié en tant que données d'évaluation (30% pour 0,3) random_state: spécifiez la valeur de départ lors de la génération de nombres aléatoires shuffle: s'il faut trier au hasard lors du fractionnement des données

Convertir au format DMatrix

xgboost nécessite que l'ensemble de données soit au format DMatrix.

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

Définir les paramètres d'apprentissage

xgb_params = {
    #Classification binaire
    'objective': 'binary:logistic',
    #Spécification de la perte de journal d'index d'évaluation
    'eval_metric': 'logloss',
}

Apprendre le modèle

bst = xgb.train(xgb_params,
                dtrain,
                #Nombre de cycles d'apprentissage
                num_boost_round=100,
                #Si une amélioration ne peut être attendue même après un certain virage, arrêtez d'apprendre
                early_stopping_rounds=10,
               )

Exécution de la prédiction

    y_pred = bst.predict(dtest)

Vérification de l'exactitude

    acc = accuracy_score(y_test, y_pred)
    print('Accuracy:', acc)

Cela donnera la précision, donc ajustez les paramètres si nécessaire.


Avec le flux ci-dessus, il devrait être possible d'analyser avec un arbre d'amplification de gradient. L'analyse des données de production est omise ici. De plus, xgboost a une fonction pratique telle que la visualisation du poids du montant de la fonctionnalité, veuillez donc le vérifier.

référence

Python: essayez d'utiliser XGBoost https://blog.amedama.jp/entry/2019/01/29/235642

Comprendre intuitivement le mécanisme et la procédure du GBDT avec des chiffres et des exemples concrets https://www.acceluniverse.com/blog/developers/2019/12/gbdt.html

Kaggle Master explique le renforcement du gradient https://qiita.com/woody_egg/items/232e982094cd3c80b3ee

Livres: Daisuke Kadowaki, Takashi Sakata, Keisuke Hosaka, Yuji Hiramatsu (2019) "Technology for Data Analysis to Win with Kaggle" Technical Review Company

Recommended Posts

Modélisons un arbre boostant le gradient avec xgboost
LightGBM Hands On-Another Gradient Boosting Library
Sélectionnez les couleurs en dégradé avec matplotlib