J'utilise habituellement SVM, mais j'ai fait une expérience à Random Forest pour étudier l'apprenant.
Matériel de référence http://d.hatena.ne.jp/shakezo/20121221/1356089207 Quand Bases de l'apprentissage automatique statistique (http://www.kyoritsu-pub.co.jp/bookdetail/9784320123625)
Créez plusieurs données de test par échantillonnage bootstrap et créez-en plusieurs.
Enfin, les classes sont classées à la majorité de chaque arbre de décision.
Si l'arbre de décision est un arbre de régression, une prédiction numérique peut être effectuée.
La différence avec l'ensachage est que RandomForest échantillonne également la variable objective en même temps.
Erreur de généralisation = biais + variance + bruit
Quand
Un arbre d'apprentissage tel qu'un arbre de décision est un arbre d'apprentissage faible avec une variance élevée (le résultat de la prédiction est significativement différent si les données sont légèrement différentes).
La stratégie consiste à réduire la variance en créant de nombreux arbres d'apprentissage comme celui-ci.
Les hyper paramètres sont principalement
num_trees: combien d'arbres de décision créer
max_depth: quel arbre de décision de profondeur créer
num_features: combien d'objectifs échantillonner lors de l'échantillonnage des objectifs
Est.
Le livre dit que random_forest ne surapprend pas, donc il ne dépend pas de max_depth, et que num_features devrait être sqrt (features). Est-ce vrai? J'ai donc mené une expérience.
J'ai utilisé mnist pour les données.
Cependant, j'ai senti que la quantité initiale de données était importante, j'ai donc échantillonné chaque nombre 2000.
10000 données de test telles quelles
num_trees
Premièrement, lorsque vous changez num_trees en 10, 100, 1000, 10000,
max_depth est jusqu'à la fin
num_features corrigées sur sqrt (features)
Après tout, il semble que la précision soit faible si elle est trop petite, mais cela n'a aucun sens si elle est trop, environ 1000 semble être appropriée
depth
La prochaine fois que vous modifiez la profondeur
10 types de 2, 4, 6, 8, 10, 12, 14, 16, 18, 20
num_trees fixé à 1000, max_features fixé à sqrt (fonctionnalités)
Certes, même si vous recherchez profondément, il semble que le surapprentissage ne se produira pas, il est normal de rechercher profondément
num_features
Lors du changement de num_features en 10, 15, 20, 25, 30, 35, 40, 45, 50, 55,
num_trees jusqu'à 1000, profondeur jusqu'à max
Est-ce que 35 ou 40 est le sommet? La ligne rouge est le sprt par défaut
Vaut-il mieux cette fois avoir un peu plus que la valeur par défaut?
Enfin sur le temps d'exécution
num_trees=1000 max_depth = max max_features = 40 n_jobs = 6
Expérimentez uniquement avec le CPU de
La moyenne de 3 fois est de 28,8 secondes
Comme référence, SVM a également classé MNIST.
C = 1.0, gamma = 1/784 dans le noyau rbf
Aucune recherche de grille
Avec deux types, un contre un et un contre le repos
En guise de mise en garde, les données ont été normalisées de 0 à 1 (je ne pourrais pas bien apprendre sans normalisation, pourquoi?)
F-value | Time | |
---|---|---|
one_versus_one | 0.930 | 1 min 39 s |
one_versus_rest | 0.922 | - |
En clairsemé, s'il n'y a pas de biais dans le nombre d'échantillons entre les classes, RandomForest est plus précis et plus rapide! !!
La question est, un contre repos était plus lent, pourquoi? Problème de paquet?
Impression que j'ai essayé d'utiliser RandomForest, après tout c'est rapide! !!
Peut-être parce que je n'utilise que SVM tout le temps, cela me semble plutôt rapide que d'habitude ...
Il est également intéressant qu'il y ait peu de paramètres, est-ce que ça va avec num_trees et max_features? ??
Ensuite, c'est booster ...
Recommended Posts