Aus irgendeinem Grund gab es nicht viele GBDT-Seiten auf Japanisch, also habe ich es geschrieben. Wie der Titel schon sagt, bin ich eine Person, die maschinelles Lernen nicht gut versteht, daher kann ich nicht mit Tsukkomi von geeigneten Leuten umgehen. Bitte beachten Sie. Ich hoffe, es hilft Leuten wie mir, die "ein wenig über maschinelles Lernen wissen, aber nichts wissen, wenn es um fortgeschrittene Geschichten geht".
Eines des überwachten maschinellen Lernens. Abkürzung für Gradient Boosting Decision Tree. Es gruppiert sich basierend auf SVM-Lehrerdaten. Im Gegensatz zu SVM, einer grundlegenden binären Klassifizierung, können jedoch auch andere Klassen klassifiziert werden. Unterschiede zu anderen Klassifikationen wie Randomforest sind nicht ausreichend erforscht. Es tut uns leid. Ich werde detaillierte Geschichten wie die Theorie weglassen, weil sie von klügeren Leuten zusammengestellt werden. http://www.housecat442.com/?p=480 http://qiita.com/Quasi-quant2010/items/a30980bd650deff509b4
Es gab Artikel zur Lösung des CodeIQ-Problems mit SVM, daher werde ich versuchen, es mit GBDT nachzuahmen.
sample_gbdt.py
# -*- coding: utf-8 -*-
from sklearn.ensemble import GradientBoostingClassifier
import numpy as np
#Trainingsdaten
train_data = np.loadtxt('CodeIQ_auth.txt', delimiter=' ')
X_train = [[x[0], x[1]] for x in train_data]
y_train = [int(x[2]) for x in train_data]
#Testdaten
X_test = np.loadtxt('CodeIQ_mycoins.txt', delimiter=' ')
y_test = np.array([1,0,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,1])
clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1,
max_depth=1).fit(X_train, y_train)
print ("Predict ",clf.predict(X_test))
print ("Expected", y_test)
print clf.score(X_test, y_test)
Früher habe ich SVM verwendet, aber ich mache es nur mit GBDT. Diesmal ist es eine binäre Klassifikation. Wenn Sie die Arten von Beschriftungen erhöhen, werden sie anscheinend entsprechend in andere Klassen eingeteilt.
Klicken Sie hier für Ergebnisse
('Predict ', array([1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1]))
('Expected', array([1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1]))
0.85
Sie haben an drei Stellen einen Fehler gemacht. .. ..
Werfen wir hier einen Blick auf die sklearn-Seite. Sie müssen es nicht separat betrachten. http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html Viele Parameter. 15 Stück. Außerdem verstehe ich Englisch nicht gut. Wenn Sie genau hinschauen, ist der Standardwert von max_depth 3. Mein eigenes ist 1. Warum?
Deshalb habe ich es repariert und erneut versucht.
('Predict ', array([1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1]))
('Expected', array([1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1]))
0.95
Es ging hoch. Es ist vorbei. Es ging hoch, aber schließlich habe ich an einer Stelle einen Fehler gemacht. Machen wir weiter und erhöhen max_depth. Zum Beispiel 5
('Predict ', array([1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0]))
('Expected', array([1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1]))
0.9
Es ging runter ... Ich wusste, dass ich es nicht geben sollte, aber das stimmt. Aber selbst bei Problemen dieser Größenordnung werden die Ergebnisse durch Ändern der Parameter geändert. Ich habe aus erster Hand gelernt, wie wichtig die Parametereinstellung beim maschinellen Lernen ist.
Und diese Parametereinstellung. Ich habe das Gefühl, dass ich ohne ein bisschen mehr Fachwissen nicht gut abschneiden kann. Es scheint schwierig zu sein, es mit Python ein wenig zu bewegen und glücklich zu sein.
Ich werde etwas ernsthafter lernen und von vorne anfangen.
Recommended Posts