[PYTHON] Forêt aléatoire

Évaluation des performances de scikit-learn + Random Forest

introduction

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)

À propos de Random Forest

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.

Pourquoi la précision est-elle bonne?

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.

Conditions expérimentales

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

Expérience

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)

random_trees.png

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)

random_depth.png

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

random_features.png

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?

Temps d'exécution

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

Méthode de comparaison

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?

Conclusion

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

Forêt aléatoire (2)
Forêt aléatoire
Forêt aléatoire équilibrée en python
J'ai essayé d'utiliser RandomForest
[Apprentissage automatique] Comprendre la forêt aléatoire
Arbre de décision et forêt aléatoire
Utiliser Random Forest avec Python
Apprentissage automatique: forêt supervisée - aléatoire
Comparaison de la taille de la forêt aléatoire / du temps de traitement
Forêt aléatoire (classification) et réglage des hyperparamètres
Comparaison des modèles de régression - ARMA vs Random Forest Regression
[Apprentissage automatique] Essayez d'étudier une forêt aléatoire
Classification multi-étiquettes par forêt aléatoire avec scikit-learn
Classification des maladies par Random Forest en utilisant Python
Comment configurer une forêt aléatoire à l'aide d'Optuna
# Génération de chaînes aléatoires
Comment configurer une forêt aléatoire à l'aide d'Optuna