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.
Windows: 10 Anaconda Python: 3.7.4 pandas: 0.25.1 numpy: 1.16.5 scikit-learn: 0.21.2 XGBoost: 0.90
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.
In diesem Artikel werden die detaillierten Parameter von XGBoost nicht erläutert.
Die Quelle dieses Artikels ist unten aufgeführt. https://github.com/Bacchan0718/qiita/blob/master/xgb_breast_cancer_wisconsin.ipynb
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.) 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
** (1) Öffnen Sie die Anaconda-Eingabeaufforderung ** Start> Anaconda 3 (64-Bit)> Anaconda-Eingabeaufforderung Offen von.
** (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.
** (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.
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
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)
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
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.
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 ")
Beim Betrachten des Diagramms stellte ich fest, dass es stark mit der schlechtesten Textur zusammenhängt.
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