[PYTHON] [Apprentissage automatique] Comprendre la forêt aléatoire

1. Objet

Si vous voulez essayer l'apprentissage automatique, n'importe qui peut utiliser scicit-learn etc. pour l'implémenter relativement facilement. Cependant, afin d'obtenir des résultats au travail ou d'améliorer votre niveau ** Vous pouvez voir qu'il est clairement faible dans l'explication de "Je ne connais pas le contexte, mais j'ai obtenu ce résultat" **.

Dans le post précédent [Machine learning] Comprendre les arbres de décision à la fois de scikit-learn et de mathématiques, j'ai décrit les détails des arbres de décision. , Cette fois, je vais résumer la forêt aléatoire qui est également utilisée dans des compétitions plus pratiques et comme le kaggle.

Je ne parle pas beaucoup de mathématiques comme d'habitude cette fois, mais ** je ne pouvais comprendre que "la combinaison d'arbres de décision est une forêt aléatoire" **, alors je l'ai organisée moi-même et * * Le but de cette fois est de vous aider à comprendre "qu'est-ce qu'une forêt aléatoire" et "ce qui doit être fait pour le réglage des paramètres" tout en gardant le contexte à l'esprit **.

De plus, cette fois-ci, O'Reilly [L'apprentissage automatique à partir de Python](https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81] % E3% 82% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92-% E2% 80% 95scikit-learn% E3% 81% A7% E5% AD% A6% E3% 81% B6% E7% 89% B9% E5% BE% B4% E9% 87% 8F% E3% 82% A8% E3% 83% B3% E3% 82% B8% E3% 83% 8B% E3% 82% A2% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% A8% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92% E3% 81% AE% E5% 9F% BA% E7% A4% 8E-Andreas-C-Muller / dp / 4873117984 / ref = sr_1_4? adgrpid = 79259353864 & dchild = 1 & gclid = Cj0KCQjw3qzzBRDnARIsAECmrypfSaVgzur1vjdrANcvYmfbh5o4vqR0LY6sH-cKX14mFgJ95QpG5sQaAkdAEALw_wcB & hvadid = 358533815035 & hvdev = c & hvlocphy = 1009318 & hvnetw = g & hvqmt = e & hvrand = 15282066364140801380 & hvtargid = kwd-475056195101 & hydadcr = 27269_11561183 & jp-ad-ap = 0 & mots-clés = python% E3% 81% A7% E3% 81% AF% E3 82% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92 & qid = 1584146942 & sr = 8-4).

2. Apprentissage d'ensemble et forêt aléatoire

Pour comprendre Random Forest, nous aborderons l'apprentissage d'ensemble.

(1) Qu'est-ce que l'apprentissage d'ensemble?

L'apprentissage d'ensemble est ** un moyen de créer un modèle plus puissant en combinant plusieurs modèles d'apprentissage automatique **.

Il existe de nombreux modèles d'apprentissage automatique tels que «régression logistique», «SVM» et «arbre de décision», mais chacun de ces modèles effectue des prédictions pour les données de manière indépendante.

Cependant, en général, je pense qu'il y a de nombreux cas où une sorte de ** décision majoritaire **, dans laquelle plusieurs personnes se réunissent pour trouver une réponse, produit de meilleurs résultats qu'une personne qui donne une réponse à sa discrétion.

L'apprentissage d'ensemble est exactement cette façon de penser, et c'est une méthode d'apprentissage qui prend une décision finale basée sur les résultats de jugement de plusieurs modèles d'apprentissage automatique. L'image est ci-dessous.

キャプチャ1.PNG

(2) Types d'apprentissage d'ensemble

Il existe deux principaux types de méthodes d'apprentissage d'ensemble, «ensachage» et «boosting». Random forest fait des prédictions basées sur cet «ensachage».

◆ Qu'est-ce que l'ensachage?

C'est une méthode pour entraîner plusieurs modèles en parallèle en utilisant la méthode de ** boot lap **. → Lorsque de nouvelles données entreront, nous prendrons une décision majoritaire pour la classification et une prédiction moyenne pour la régression.


Qu'est-ce que Boo Strap?

Une méthode d'échantillonnage de certaines données à partir des données originales par ** extraction de restauration **. Dans l'extraction de restauration, les données une fois prises sont également renvoyées aux données d'origine et échantillonnées, de sorte que les mêmes données peuvent être sélectionnées plusieurs fois.

◆ Qu'est-ce que le boosting?

Comment préparer plusieurs modèles et procéder à l'apprentissage en série. Nous construirons le modèle suivant en nous référant aux résultats du modèle créé précédemment.

Les modèles basés sur le boosting ont Adaboost (non mentionné cette fois).

(3) Qu'est-ce que Random Forest?

Random Forest est une collection de nombreux arbres de décision légèrement différents basés sur la mise en sac de l'apprentissage d'ensemble **.

Les forêts aléatoires sont un moyen de résoudre ce problème, car l'arbre de décision à lui seul a l'inconvénient d'être surapprentissage.

Comme mentionné dans le bagging, chaque arbre de décision est construit avec chaque donnée surentraînée car plusieurs groupes sont échantillonnés au hasard à partir des données d'origine.

** L'idée est que si vous créez un grand nombre d'arbres de décision qui sont surappris dans différentes directions, vous pouvez réduire le degré de surapprentissage en faisant la moyenne des résultats **.

Illustrons cette idée. ÉTAPE 1: échantillonnez les données de manière aléatoire à partir des données d'origine avec boost lap et créez des groupes de données pour N groupes

ÉTAPE 2: Créez un modèle d'arbre de décision pour chacun des N groupes.

ÉTAPE 3: Faites une prédiction une fois avec le modèle d'arbre de décision de chaque groupe N.

ÉTAPE 4: Prenez un vote majoritaire de N groupes (le rendement est moyen) et faites une prédiction finale. キャプチャ2.PNG

(4) Paramètres pour l'implémentation d'une forêt aléatoire avec scicit-learn

L'implémentation spécifique avec scicit-learn se fera à partir du suivant, mais je vais vous expliquer comment définir chaque paramètre en premier.

Cependant, en tant que principe, Random Forest est connu pour être capable de produire une précision raisonnablement bonne sans beaucoup de réglage des paramètres (il n'est pas nécessaire de convertir l'échelle telle que la normalisation des données). Par conséquent, cette fois, nous ne l'introduirons que, et dans la prochaine implémentation, nous créerons le modèle avec les paramètres par défaut.

Ici, [Machine learning commençant par Python] introduit au début (https://www.amazon.co.jp/Python%E3%81%A7%E3%81%AF%E3%81%98%E3%82% 81% E3% 82% 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92-% E2% 80% 95scikit-learn% E3% 81% A7% E5% AD % A6% E3% 81% B6% E7% 89% B9% E5% BE% B4% E9% 87% 8F% E3% 82% A8% E3% 83% B3% E3% 82% B8% E3% 83% 8B % E3% 82% A2% E3% 83% AA% E3% 83% B3% E3% 82% B0% E3% 81% A8% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7 % BF% 92% E3% 81% AE% E5% 9F% BA% E7% A4% 8E-Andreas-C-Muller / dp / 4873117984 / ref = sr_1_4? adgrpid = 79259353864 & dchild = 1 & gclid = Cj0KCQjw3qzzBRDnARIsAECmrypfSaVgzur1vjdrANcvYmfbh5o4vqR0LY6sH-cKX14mFgJ95QpG5sQaAkdAEALw_wcB & hvadid = 358533815035 & hvdev = c & hvlocphy = 100009318 & hvnetw = g & hvqmt = e & hvrand = 152802066364140801380 & hvtargid = kwd-475056195101 & hydadcr = 27269_11561183 & jp-ad-ap = 0 & mots-clés = python% E3% 81% A7% E3% 81% AF 82% E3% 82% E3 % 8B% E6% A9% 9F% E6% A2% B0% E5% AD% A6% E7% BF% 92 & qid = 1584146942 & sr = 8-4) mentionne «paramètres importants à ajuster» à la page 87 Présentation de n_estimators, max_features.

◆n_estimators Définissez le nombre d'arbres de décision à préparer. C'est le nombre de N de "N données" montrées sur la figure. Plus c'est gros, mieux c'est (l'image est que vous pouvez obtenir un vote majoritaire de nombreuses personnes), mais si vous l'augmentez trop, cela prendra du temps et de la mémoire, donc je pense que ce sera un équilibre avec ce domaine.

◆max_features C'est la première fois que je vais le décrire ici, mais il y a en fait une dernière chose à faire lors de l'échantillonnage des données dans STEP1. Il s'agit de la "sélection du montant de la caractéristique". Toutes les fonctionnalités ne sont pas utilisées pour créer le modèle, et les fonctionnalités sont également attribuées de manière aléatoire lors de la création de l'arbre de décision dans chaque groupe. Définissez le nombre d'entités dans chaque groupe avec max_features.

L'augmentation de max_features devrait rendre chaque modèle d'arbre de décision similaire, tandis que sa diminution entraînera des modèles d'arbre de décision significativement différents, mais trop petit entraînera des arbres de décision qui ne correspondent pas aux données. Je vais finir.

Il est généralement indiqué dans "Machine learning à partir de python" que max_features doit utiliser la valeur par défaut.

3. Implémentez une forêt aléatoire avec scicit-learn

Maintenant, implémentons une forêt aléatoire avec scicit-learn.

(1) Ensemble de données

Utilisez le jeu de données Kickstarter Projects de kaggle. https://www.kaggle.com/kemical/kickstarter-projects

(2) Importez les éléments nécessaires et lisez les données

(I) Importer

import pandas as pd#Importer des pandas
import datetime#Importer pour le traitement de la date des données originales
from sklearn.model_selection import train_test_split#Pour la division des données
from sklearn.ensemble import RandomForestClassifier#Forêt aléatoire

(Ii) Lecture des données


df = pd.read_csv(r"C:~~\ks-projects-201801.csv")

(Iii) Apparence des données

De ce qui suit, vous pouvez voir qu'il s'agit de l'ensemble de données de (378661, 15).

df.shape

Jetons également un coup d'œil aux données dans .head.

df.head()

(3) Mise en forme des données

(I) Nombre de jours de recrutement

Étant donné que nous nous concentrerons cette fois sur la forêt aléatoire, nous omettons les détails, mais comme l'heure de début du recrutement et l'heure de fin du financement du cloud sont dans les données, nous convertirons cela en "jours de recrutement".

df['deadline'] = pd.to_datetime(df["deadline"])
df["launched"] = pd.to_datetime(df["launched"])
df["days"] = (df["deadline"] - df["launched"]).dt.days

(Ii) À propos de la variable objective

Je vais également omettre les détails ici, mais il y a des catégories autres que succès ("réussi") et échec ("échec") pour la variable objective "état", mais cette fois je n'utiliserai les données que pour le succès et l'échec.

df = df[(df["state"] == "successful") | (df["state"] == "failed")]

Remplacez ensuite le succès par 1 et l'échec par 0.

df["state"] = df["state"].replace("failed",0)
df["state"] = df["state"].replace("successful",1)

(Iii) Supprimer les lignes inutiles

Avant de créer le modèle, supprimez l'identifiant et le nom dont vous pensez ne pas avoir besoin (cela devrait être conservé, mais cette fois, nous le supprimerons), et les variables que vous ne connaissez qu'après le financement du cloud. ..

df = df.drop(["ID","name","deadline","launched","backers","pledged","usd pledged","usd_pledged_real","usd_goal_real"], axis=1)

(Iv) Traitement des variables de catégorie

Effectuez le traitement des variables catégorielles avec pd.get_dummies.

df = pd.get_dummies(df,drop_first = True)

(4) Enfin, la principale division sujet-données et la forêt aléatoire

(I) Division des données

Commencez par le diviser en données d'entraînement et données de test.

train_data = df.drop("state", axis=1)
y = df["state"].values
X = train_data.values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1234)

(Ii) Forêt aléatoire

clf = RandomForestClassifier(random_state=1234)
clf.fit(X_train, y_train)
print("score=", clf.score(X_test, y_test))

Si vous faites ce qui précède, vous devriez obtenir une précision d'environ 0,638. Si c'est un modèle basique, c'est tout!

4. Conclusion

Comment était-ce? Ma pensée est: "Je ne peux pas interpréter même si on me montre un code très compliqué depuis le début, donc je ne me soucie pas de la précision une fois, alors essayez d'abord d'implémenter une série de flux de base avec scicit-learn, etc." Je pense que c'est très important.

Cependant, une fois que je m'y suis habitué, je pense qu'il est très important de comprendre de l'arrière-plan comment ils fonctionnent dans les coulisses. Au fur et à mesure que j'en apprends plus, j'aimerais mettre à jour cette forêt aléatoire à un niveau plus profond.

Je pense que de nombreux contenus sont difficiles à comprendre, mais j'espère que cela aidera à approfondir ma compréhension.

Recommended Posts

[Apprentissage automatique] Comprendre la forêt aléatoire
Apprentissage automatique: forêt supervisée - aléatoire
[Apprentissage automatique] Essayez d'étudier une forêt aléatoire
Forêt aléatoire (2)
Forêt aléatoire
Apprentissage automatique
[Apprentissage automatique] Comprendre la décorrélation des mathématiques
Recherche de semences aléatoires dans l'apprentissage automatique
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprenez en quelque sorte le machine learning
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
[Apprentissage automatique] Comprendre la SVM à la fois à partir de scikit-learn et des mathématiques
Modèle d'apprentissage automatique prenant en compte la maintenabilité
L'apprentissage automatique appris avec Pokemon
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Forêt aléatoire équilibrée en python
Apprentissage automatique dans Delemas (s'entraîner)
Une introduction à l'apprentissage automatique
Techniques liées à l'apprentissage automatique / à la classification
Bases de l'apprentissage automatique (mémoire)
Un débutant en apprentissage automatique a essayé la RBM
[Apprentissage automatique] Comprendre les arbres de décision de scikit-learn et des mathématiques
J'ai essayé d'utiliser RandomForest
Apprentissage automatique avec Python! Préparation
Arbre de décision et forêt aléatoire
Bloc-notes de ressources d'étude d'apprentissage automatique
Apprentissage automatique ② Résumé Naive Bayes
Utiliser Random Forest avec Python
Comprendre l'apprentissage automatique ~ régression de crête ~.
Résumé de l'article sur l'apprentissage automatique (auto-écrit)
À propos de la matrice mixte d'apprentissage automatique
Mémo pratique du système d'apprentissage automatique
Démineur d'apprentissage automatique avec PyTorch
Créer un environnement d'apprentissage automatique
Programmation Python Machine Learning> Mots-clés
Algorithme d'apprentissage automatique (perceptron simple)
Utilisé en EDA pour l'apprentissage automatique
Importance des ensembles de données d'apprentissage automatique
Apprentissage automatique et optimisation mathématique
Machine Learning: Supervisé - Support Vector Machine
Machine learning supervisé (classification / régression)
J'ai essayé d'implémenter Extreme Learning Machine