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.
Windows: 10 Anaconda Python: 3.7.4 pandas: 0.25.1 numpy: 1.16.5 scikit-learn: 0.21.2 XGBoost: 0.90
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».
Cet article n'explique pas les paramètres détaillés de XGBoost.
La source de cet article est répertoriée ci-dessous. https://github.com/Bacchan0718/qiita/blob/master/xgb_breast_cancer_wisconsin.ipynb
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.
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.) 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
** (1) Ouvrir l'invite Anaconda ** Démarrer> Anaconda 3 (64 bits)> Invite Anaconda Ouvrir à partir.
** (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.
** (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.
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
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)
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
À 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.
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 ")
En regardant le graphique, j'ai trouvé qu'il était fortement lié à la pire texture.
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