[PYTHON] Implémentation et description à l'aide de XGBoost pour les débutants

introduction

XGBoost qui apparaît souvent dans Kaggle. Il y avait de nombreuses parties que je ne pouvais pas comprendre même après avoir lu le code, donc j'ai étudié et résumé en tant que débutant. Veuillez noter qu'il n'est pas exact car il est écrit avec des mots aussi faciles à comprendre et difficiles que possible. N'hésitez pas à me faire savoir si vous avez des ajouts ou des corrections. Cette fois, je vais vous expliquer XGBoost lors de sa mise en œuvre.

Contenu de cet article

table des matières

  1. Qu'est-ce que XGBoost?
  2. Importez XGBoost.
  3. Importez le jeu de données
  4. Fractionnement de l'ensemble de données, conversion de format
  5. Définition du modèle et formation
  6. Évaluation du modèle
  7. Confirmez l'importance de la quantité d'objets

Environnement d'exploitation

Windows: 10 Anaconda Python: 3.7.4 pandas: 0.25.1 numpy: 1.16.5 scikit-learn: 0.21.2 XGBoost: 0.90

Ensemble de données utilisé dans cet article

Cette fois, nous utiliserons le jeu de données scikit-learn sur le cancer du sein (Breast cancer wisconsin [diagnostic] dataset). L'ensemble de données contient des données caractéristiques sur le noyau cellulaire du cancer du sein, et cette fois nous déterminerons si le cancer du sein est une «tumeur maligne» ou une «tumeur bénéfique».

point important

Cet article n'explique pas les paramètres détaillés de XGBoost.

À propos de la source

La source de cet article est répertoriée ci-dessous. https://github.com/Bacchan0718/qiita/blob/master/xgb_breast_cancer_wisconsin.ipynb

1. Qu'est-ce que XGBoost?

XGBoost (eXtreme Gradient Boosting) implémente l'algorithme de boosting de gradient pour les arbres de décision. L'arbre de décision est une méthode de classification de l'ensemble de données à l'aide d'un modèle en forme d'arbre comme indiqué dans la figure ci-dessous, d'analyse des facteurs qui ont influencé les résultats et d'utilisation des résultats de classification pour faire des prévisions futures. 決定木.png

L'algorithme d'amplification du gradient est expliqué séparément pour «gradient» et «boost». Le gradient consiste à minimiser la différence entre les deux valeurs et à réduire l'erreur de prédiction. Le boosting combine des classificateurs faibles (processus qui font des jugements inexacts) en série. Un algorithme qui améliore la précision des prédictions. (Le discriminateur faible ici est l'arbre de décision.) ブースティング.png Lien de référence XGBoost: https://logmi.jp/tech/articles/322734 XGBoost: http://kamonohashiperry.com/archives/209 Méthode de dégradé: https://to-kei.net/basic-study/neural-network/optimizer/ Fonction de perte: https://qiita.com/mine820/items/f8a8c03ef1a7b390e372 Arbre de décision: https://enterprisezine.jp/iti/detail/6323

2. Installation de XGBoost

** (1) Ouvrir l'invite Anaconda ** Démarrer> Anaconda 3 (64 bits)> Invite Anaconda Ouvrir à partir. XGBoostインストール.png

** (2) Exécutez conda install -c anaconda py-xg boost **

** (3) Terminal ouvert depuis Anaconda ** Anaconda Navigator> Cliquez sur l'environnement virtuel pour installer> Ouvrir le terminal Ouvrir à partir. XGBoostインストール2.png

** (4) Exécutez conda install py-xg boost ** Pendant l'exécution, Proceed ([y] / n)? S'affiche. Entrez "y" et appuyez sur Entrée.

Vous pouvez maintenant l'utiliser en effectuant l'importation de xgboost au format xgb dans le notebook jupyter.

point important La méthode d'installation de XGBoost varie en fonction de l'environnement d'exploitation. Si l'environnement est différent de cet article, vous ne pourrez peut-être pas l'installer de cette façon.

3. Lire l'ensemble de données

Vous pouvez importer le jeu de données scikit-learn des manières suivantes:

xgb_breast_cancer_wisconsin.ipynb


from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()

La variable cancer est de type Bunch (une sous-classe du dictionnaire) La variable explicative est stockée dans les données et la variable objectif est stockée dans la cible.

xgb_breast_cancer_wisconsin.ipynb


X = cancer.data
y = cancer.target

La variable objective est le résultat de déterminer si la tumeur est une cellule cancéreuse ou une cellule bénigne. Il est de 0 pour les cellules cancéreuses et de 1 pour les cellules bénignes.

Le résumé est stocké dans DSCR.

xgb_breast_cancer_wisconsin.ipynb


print(cancer.DESCR)

Une description détaillée de l'ensemble de données se trouve ci-dessous. https://ensekitt.hatenablog.com/entry/2018/08/22/200000

4. Fractionnement de l'ensemble de données, conversion de format

Divisez en données d'entraînement et données de test.

xgb_breast_cancer_wisconsin.ipynb


import numpy as np
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2)

Après le fractionnement, il sera au format de l'ensemble de données géré par XGBoost. Transmettez le nom de la colonne à feature_names pour visualiser le montant de la fonctionnalité.

xgb_breast_cancer_wisconsin.ipynb


import xgboost as xgb
xgb_train = xgb.DMatrix(X_train, label=Y_train, feature_names=cancer.feature_names)
xgb_test = xgb.DMatrix(X_test, label=Y_test, feature_names=cancer.feature_names)
  1. Définition du modèle et formation Définissez les paramètres. Cette fois, sans définir de paramètres détaillés, dans Paramètres d'apprentissage (paramètres de tâche d'apprentissage) Définissez l'objectif sur l'argument "binaire: logistique". Cet argument renvoie la probabilité d'être une classification binaire.

xgb_breast_cancer_wisconsin.ipynb


param = {
    #Problème de classification binaire
    'objective': 'binary:logistic',  
} 

Apprenez le modèle.

xgb_breast_cancer_wisconsin.ipynb


model = xgb.train(param, xgb_train)

Lien de référence: https://blog.amedama.jp/entry/2019/01/29/235642

6. Évaluation du modèle

À l'aide du modèle entraîné, calculez la probabilité que les données de validation soient classées dans chaque classe.

xgb_breast_cancer_wisconsin.ipynb


y_pred_proba = model.predict(xgb_test)

Vérifiez le contenu de y_pred_proba.

xgb_breast_cancer_wisconsin.ipynb


print(y_pred_proba)

Le contenu est le suivant.

[0.974865   0.974865   0.974865   0.974865   0.02652072 0.02652072
 0.02652072 0.93469375 0.15752992 0.9459383  0.05494327 0.974865
 0.974865   0.793823   0.95098037 0.974865   0.93770874 0.02652072
 0.92342764 0.96573967 0.92566985 0.95829874 0.9485401  0.974865
 0.96885294 0.974865   0.9670915  0.9495995  0.9719596  0.9671308
 0.974865   0.974865   0.9671308  0.974865   0.974865   0.974865
 0.96525717 0.9248287  0.4881295  0.974865   0.9670915  0.02652072
 0.974865   0.04612969 0.9459383  0.7825349  0.974865   0.02652072
 0.04585124 0.974865   0.1232813  0.974865   0.974865   0.3750245
 0.9522517  0.974865   0.05884887 0.02652072 0.02652072 0.02652072
 0.974865   0.94800293 0.9533147  0.974865   0.9177746  0.9665209
 0.9459383  0.02652072 0.974865   0.974865   0.974865   0.974865
 0.6874632  0.72485    0.31191444 0.02912194 0.96525717 0.09619693
 0.02652072 0.9719596  0.9346858  0.02652072 0.974865   0.02652072
 0.0688739  0.974865   0.64381874 0.97141886 0.974865   0.974865
 0.974865   0.1619863  0.974865   0.02652072 0.02652072 0.974865
 0.9670915  0.45661741 0.02652072 0.02652072 0.974865   0.03072577
 0.9670915  0.974865   0.9142289  0.7509865  0.9670915  0.02652072
 0.02652072 0.9670915  0.02652072 0.78484446 0.974865   0.974865  ]

La variable objectif de l'ensemble de données est une classification binomiale, la valeur doit donc être 0 ou 1. Réglez le seuil (valeur de référence) à 1 lorsqu'il est égal ou supérieur à 0,5 et à 0 lorsqu'il est inférieur à 0,5. Convertissez en 0 et 1.

xgb_breast_cancer_wisconsin.ipynb


y_pred = np.where(y_pred_proba > 0.5, 1, 0)

Vérifiez l'exactitude. Cette fois, nous utiliserons la précision pour vérifier le taux de précision.

xgb_breast_cancer_wisconsin.ipynb


from sklearn.metrics import accuracy_score
acc = accuracy_score(Y_test, y_pred)

La précision est de 0,9912280701754386.

7. Confirmation de la quantité de caractéristiques

Une caractéristique est une caractéristique mesurable utilisée pour l'apprentissage des entrées. Consultez le graphique pour voir quelles caractéristiques sont fortement liées aux variables explicatives. Lien de référence: https://qiita.com/daichildren98/items/ebabef57bc19d5624682 Le graphique peut être enregistré au format png avec fig.savefig.

xgb_breast_cancer_wisconsin.ipynb


import matplotlib.pyplot as plt
fig, ax1 = plt.subplots(figsize=(8,15))
xgb.plot_importance(model, ax=ax1)
plt.show()
fig.savefig("FeatureImportance.png ")

FeatureImportance.png

En regardant le graphique, j'ai trouvé qu'il était fortement lié à la pire texture.

en conclusion

XGBoost apparaît souvent dans Kaggle, mais quand je l'ai vu pour la première fois, je ne l'ai pas compris du tout, alors je l'ai recherché et je l'ai résumé. Je vais étudier et résumer à nouveau les paramètres.

Recommended Posts

Implémentation et description à l'aide de XGBoost pour les débutants
Explication et mise en œuvre de SocialFoceModel
[Python] Accès et recadrage des pixels d'image à l'aide d'OpenCV (pour les débutants)
Détection d'anomalies par encodeur automatique à l'aide de keras [Exemple d'implémentation pour les débutants]
[Explication pour les débutants] Tutoriel TensorFlow MNIST (pour les débutants)
Explication et mise en œuvre de PRML Chapitre 4
Explication et implémentation de l'algorithme ESIM
Explication et mise en œuvre du perceptron simple
[Pour les débutants] Surveillance des processus à l'aide de cron
[Explication pour les débutants] Mécanisme de détection de visage OpenCV et pratique (détecter MultiScale)
[Explication pour les débutants] Tutoriel TensorFlow Deep MNIST
Explication et implémentation de l'algorithme Decomposable Attention
Raisonnement causal et recherche causale par Python (pour les débutants)
Explication de la distance d'édition et de l'implémentation en Python
[Pour les débutants en apprentissage profond] Implémentation d'une classification binaire simple par couplage complet à l'aide de Keras
Analysons les données Covid-19 (Corona) en utilisant Python [Pour les débutants]
Janken Poi en Python pour les débutants (réponses et explications)
Paramètres initiaux pour l'utilisation de Python3.8 et pip sur CentOS8
Squelettes extensibles pour Vim utilisant Python, Click et Jinja2
FFT (Fast Fourier Transform): formules et exemples de mise en œuvre
Caffe Model Zoo pour les débutants [Classification selon l'âge et le sexe]
Python # Comment vérifier le type et le type pour les super débutants
Découvrez la fonction d'impression et les chaînes de python pour les débutants.
Explication des outils et commandes de package pour le système d'exploitation Linux
[Pour les débutants] Django Commandes fréquemment utilisées et collection de références
Paramètres Spacemacs (pour les débutants)
Manuel python pour les débutants
Principes de base et mise en œuvre de Perceptron
Algorithme Dikstra pour les débutants
OpenCV pour les débutants en Python
Dérivation et implémentation d'équations de mise à jour pour la décomposition de facteurs tensoriels non négatifs
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
[Explication pour les débutants] Introduction au traitement du pliage (expliqué dans TensorFlow)
[Explication pour les débutants] Introduction au traitement du pool (expliqué dans TensorFlow)
Méthode d'apprentissage TensorFlow pour les professionnels des arts libéraux et les débutants en Python
Principes de base de Pandas pour les débutants ④ Gestion des éléments de date et d'heure
Vérification et mise en œuvre de la méthode de reconstruction vidéo en utilisant GRU et Autoencoder
[Python] Introduction à la création de graphiques à l'aide de données de virus corona [Pour les débutants]
Explication du CSV et exemple d'implémentation dans chaque langage de programmation
[Pour les débutants] J'ai essayé d'utiliser l'API Tensorflow Object Detection