Pour une raison quelconque, il n'y avait pas beaucoup de pages GBDT en japonais, alors je l'ai écrit. Comme le titre l'indique, je suis une personne qui ne comprend pas bien l'apprentissage automatique, donc je ne peux pas gérer les tsukkomi de personnes aptes. Notez s'il vous plaît. J'espère que cela aidera les gens comme moi qui "connaissent un peu l'apprentissage automatique mais ne savent rien en matière d'histoires avancées".
L'un de l'apprentissage automatique supervisé. Abréviation de l'arbre de décision d'amélioration du dégradé. Il regroupe sur la base des données des enseignants SVM. Cependant, contrairement à SVM, qui est une classification binaire de base, d'autres classes peuvent être classées. Les différences avec d'autres classifications telles que Randomforest sont sous-étudiées. Pardon. J'omettrai des histoires détaillées telles que la théorie parce qu'elles sont compilées par des personnes plus intelligentes. http://www.housecat442.com/?p=480 http://qiita.com/Quasi-quant2010/items/a30980bd650deff509b4
Il y avait article résolvant un problème CodeIQ avec SVM, donc je vais essayer de l'imiter avec GBDT.
sample_gbdt.py
# -*- coding: utf-8 -*-
from sklearn.ensemble import GradientBoostingClassifier
import numpy as np
#Données d'entraînement
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]
#Données de test
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)
J'utilisais SVM, mais je le fais simplement avec GBDT. Cette fois, il s'agit d'une classification binaire. Il semble que si vous augmentez les types d'étiquettes, ils les classeront en conséquence dans d'autres classes.
Cliquez ici pour les résultats
('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
Vous avez commis une erreur à trois endroits. .. ..
Jetons un coup d'œil à la page sklearn ici. Vous n'avez pas à le regarder séparément. http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html Beaucoup de paramètres. 15 pièces. De plus, je ne comprends pas bien l'anglais. Cependant, si vous regardez de plus près, la valeur par défaut de max_depth est 3. Le mien est 1. Pourquoi?
C'est pourquoi je l'ai réparé et essayé à nouveau.
('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
Il a augmenté. C'est en place. Cela a augmenté, mais après tout, j'ai fait une erreur au même endroit. Continuons et augmentons max_depth. Par exemple, 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
Il est tombé ... Je savais que ce n'était pas quelque chose que je devrais donner, mais c'est vrai. Mais même pour des problèmes de cette ampleur, changer les paramètres changera les résultats. J'ai appris de première main à quel point l'ajustement des paramètres est important dans l'apprentissage automatique.
Et ce réglage des paramètres. Je sens que je ne peux pas bien faire sans un peu plus de connaissances spécialisées. Cela semble difficile de le déplacer un peu avec python et d'être heureux.
J'étudierai un peu plus sérieusement et recommencerai.
Recommended Posts