[PYTHON] Implementierung und Beschreibung mit XGBoost für Anfänger

Einführung

XGBoost, das häufig in Kaggle vorkommt. Es gab viele Teile, die ich selbst nach dem Lesen des Codes nicht verstehen konnte, deshalb habe ich ihn als Anfänger untersucht und zusammengefasst. Bitte beachten Sie, dass es nicht korrekt ist, da es so einfach wie möglich geschrieben ist und schwierige Wörter zerkaut werden. Bitte zögern Sie nicht, mich zu informieren, wenn Sie Ergänzungen oder Korrekturen haben. Dieses Mal werde ich XGBoost während der Implementierung erläutern.

Inhalt dieses Artikels

Inhaltsverzeichnis

  1. Was ist XGBoost?
  2. Importieren Sie XGBoost.
  3. Importieren Sie den Datensatz
  4. Aufteilung des Datensatzes, Formatkonvertierung
  5. Modelldefinition und Schulung
  6. Modellbewertung
  7. Bestätigen Sie die Wichtigkeit der Merkmalsmenge

Betriebsumgebung

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

In diesem Artikel verwendeter Datensatz

Dieses Mal werden wir den Scikit-Learn-Brustkrebs-Datensatz (Breast Cancer Wisconsin [Diagnostic] -Datensatz) verwenden. Der Datensatz enthält charakteristische Daten zu den Zellkernen von Brustkrebs. Dieses Mal werden wir feststellen, ob es sich bei dem Brustkrebs um einen "bösartigen Tumor" oder einen "nützlichen Tumor" handelt.

wichtiger Punkt

In diesem Artikel werden die detaillierten Parameter von XGBoost nicht erläutert.

Über die Quelle

Die Quelle dieses Artikels ist unten aufgeführt. https://github.com/Bacchan0718/qiita/blob/master/xgb_breast_cancer_wisconsin.ipynb

1. Was ist XGBoost?

決定木.png

Der Entscheidungsbaum ist eine Methode zum Klassifizieren des Datensatzes unter Verwendung eines baumförmigen Modells, wie in der folgenden Abbildung gezeigt, Analysieren der Faktoren, die die Ergebnisse beeinflusst haben, und Verwenden der Klassifizierungsergebnisse, um zukünftige Vorhersagen zu treffen. Der Gradientenverstärkungsalgorithmus wird getrennt für "Gradienten" und "Boost" erläutert. Der Gradient dient dazu, die Differenz zwischen den beiden Werten zu minimieren und den Vorhersagefehler zu verringern. Boosting ist ein Algorithmus, der die Genauigkeit der Vorhersage verbessert, indem schwache Klassifikatoren (Prozesse, die ungenaue Beurteilungen treffen) in Reihe geschaltet werden. (Der schwache Diskriminator hier ist der Entscheidungsbaum.) ブースティング.png Referenzlink XGBoost: https://logmi.jp/tech/articles/322734 XGBoost: http://kamonohashiperry.com/archives/209 Gradientenmethode: https://to-kei.net/basic-study/neural-network/optimizer/ Verlustfunktion: https://qiita.com/mine820/items/f8a8c03ef1a7b390e372 Entscheidungsbaum: https://enterprisezine.jp/iti/detail/6323

2. XGBoost-Installation

** (1) Öffnen Sie die Anaconda-Eingabeaufforderung ** Start> Anaconda 3 (64-Bit)> Anaconda-Eingabeaufforderung Offen von. XGBoostインストール.png

** (2) Führen Sie conda install -c anaconda py-xg boost aus **

** (3) Offenes Terminal von Anaconda ** Anaconda Navigator> Klicken Sie auf die zu installierende virtuelle Umgebung> Terminal öffnen Offen von. XGBoostインストール2.png

** (4) Führen Sie conda install py-xg boost aus ** Weiter ([j] / n)? Wird während der Ausführung angezeigt. Geben Sie also "y" ein und drücken Sie die Eingabetaste.

Jetzt können Sie es verwenden, indem Sie xgboost als xgb in jupyter notebook importieren.

wichtiger Punkt Die Installationsmethode von XGBoost unterscheidet sich je nach Betriebsumgebung. Wenn sich Ihre Umgebung von diesem Artikel unterscheidet, können Sie sie möglicherweise nicht auf diese Weise installieren.

3. Datensatz lesen

Sie können den Scikit-Learn-Datensatz auf folgende Arten importieren:

xgb_breast_cancer_wisconsin.ipynb


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

Die Variable Krebs ist Bunch-Typ (eine Unterklasse des Wörterbuchs) Die erklärende Variable wird in Daten gespeichert und die Zielvariable wird im Ziel gespeichert.

xgb_breast_cancer_wisconsin.ipynb


X = cancer.data
y = cancer.target

Die Zielvariable ist das Ergebnis der Bestimmung, ob der Tumor eine Krebszelle oder eine gutartige Zelle ist. Es ist 0 für Krebszellen und 1 für gutartige.

Die Zusammenfassung wird in DSCR gespeichert.

xgb_breast_cancer_wisconsin.ipynb


print(cancer.DESCR)

Eine detaillierte Beschreibung des Datensatzes finden Sie unten. https://ensekitt.hatenablog.com/entry/2018/08/22/200000

4. Aufteilung des Datensatzes, Formatkonvertierung

Teilen Sie in Trainingsdaten und Testdaten.

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)

Nach dem Teilen hat es das Format des von XGBoost verarbeiteten Datensatzes. Übergeben Sie den Spaltennamen zur Visualisierung der Feature-Menge an feature_names.

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. Modelldefinition und Schulung Definieren Sie die Parameter. Diesmal ohne Festlegen detaillierter Parameter unter Lernparameter (Lernaufgabenparameter) Setzen Sie das Ziel auf das Argument "binär: logistisch". Dieses Argument gibt die Wahrscheinlichkeit einer binären Klassifizierung zurück.

xgb_breast_cancer_wisconsin.ipynb


param = {
    #Problem der binären Klassifizierung
    'objective': 'binary:logistic',  
} 

Lerne das Modell.

xgb_breast_cancer_wisconsin.ipynb


model = xgb.train(param, xgb_train)

Referenzlink: https://blog.amedama.jp/entry/2019/01/29/235642

6. Modellbewertung

Berechnen Sie anhand des trainierten Modells die Wahrscheinlichkeit, dass die Validierungsdaten in jede Klasse eingeteilt werden.

xgb_breast_cancer_wisconsin.ipynb


y_pred_proba = model.predict(xgb_test)

Überprüfen Sie den Inhalt von y_pred_proba.

xgb_breast_cancer_wisconsin.ipynb


print(y_pred_proba)

Der Inhalt ist wie folgt.

[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  ]

Die Zielvariable des Datensatzes ist eine Binomialklassifikation, daher muss der Wert 0 oder 1 sein. Setzen Sie den Schwellenwert (Referenzwert) auf 1, wenn er 0,5 oder mehr beträgt, und auf 0, wenn er kleiner als 0,5 ist. In 0 und 1 konvertieren.

xgb_breast_cancer_wisconsin.ipynb


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

Überprüfen Sie die Richtigkeit. Dieses Mal verwenden wir die Genauigkeit, um die Genauigkeitsrate zu überprüfen.

xgb_breast_cancer_wisconsin.ipynb


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

Die Genauigkeit beträgt 0,9912280701754386.

7. Bestätigung der Merkmalsmenge

Ein Merkmal ist ein messbares Merkmal, das zum Lernen von Eingaben verwendet wird. Überprüfen Sie die Grafik, um festzustellen, welche Funktionen stark mit den erklärenden Variablen zusammenhängen. Referenzlink: https://qiita.com/daichildren98/items/ebabef57bc19d5624682 Das Diagramm kann mit fig.savefig als PNG gespeichert werden.

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

Beim Betrachten des Diagramms stellte ich fest, dass es stark mit der schlechtesten Textur zusammenhängt.

abschließend

XGBoost erscheint oft in Kaggle, aber als ich es zum ersten Mal sah, verstand ich es überhaupt nicht, also habe ich es nachgeschlagen und zusammengefasst. Ich werde die Parameter noch einmal untersuchen und zusammenfassen.

Recommended Posts

Implementierung und Beschreibung mit XGBoost für Anfänger
Erklärung und Implementierung von SocialFoceModel
[Python] Zugreifen auf und Zuschneiden von Bildpixeln mit OpenCV (für Anfänger)
Abnormalitätserkennung durch Auto-Encoder mit Keras [Implementierungsbeispiel für Anfänger]
[Erklärung für Anfänger] TensorFlow-Tutorial MNIST (für Anfänger)
Erläuterung und Implementierung von PRML Kapitel 4
Erklärung und Implementierung des ESIM-Algorithmus
Erklärung und Implementierung von einfachem Perzeptron
[Für Anfänger] Prozessüberwachung mit cron
[Erklärung für Anfänger] OpenCV-Gesichtserkennungsmechanismus und -praxis (MultiScale erkennen)
[Erklärung für Anfänger] TensorFlow-Tutorial Deep MNIST
Erklärung und Implementierung des Decomposable Attention-Algorithmus
Kausales Denken und kausale Suche von Python (für Anfänger)
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
[Für Anfänger im Deep Learning] Implementierung einer einfachen binären Klassifizierung durch vollständige Kopplung mit Keras
Lassen Sie uns Covid-19 (Corona) -Daten mit Python analysieren [Für Anfänger]
Janken Poi in Python für Anfänger (Antworten und Erklärungen)
Grundeinstellungen für die Verwendung von Python3.8 und pip unter CentOS8
Erweiterbare Skelette für Vim mit Python, Click und Jinja2
FFT (Fast Fourier Transform): Formeln und Beispiele für die Implementierung
Caffe Model Zoo für Anfänger [Alters- und Geschlechtsklassifizierung]
Python # So überprüfen Sie Typ und Typ für Super-Anfänger
Erfahren Sie mehr über die Druckfunktion und die Zeichenfolgen von Python für Anfänger.
[Für Anfänger] Django Häufig verwendete Befehle und Referenzsammlung
Spacemacs-Einstellungen (für Anfänger)
Python Lehrbuch für Anfänger
Perceptron Grundlagen und Implementierung
Dikstra-Algorithmus für Anfänger
OpenCV für Python-Anfänger
Ableitung und Implementierung von Aktualisierungsgleichungen für die nicht negative Tensorfaktorzerlegung
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
[Erklärung für Anfänger] Einführung in die Faltverarbeitung (erklärt in TensorFlow)
[Erklärung für Anfänger] Einführung in die Pooling-Verarbeitung (erklärt in TensorFlow)
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
Pandas-Grundlagen für Anfänger ④ Umgang mit Datums- und Zeitangaben
Überprüfung und Implementierung der Videorekonstruktionsmethode mit GRU und Autoencoder
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
Erläuterung der CSV und Implementierungsbeispiel in jeder Programmiersprache
[Für Anfänger] Ich habe versucht, die Tensorflow-Objekterkennungs-API zu verwenden