[PYTHON] Qu'est-ce que l'apprentissage d'ensemble?

Qu'est-ce que l'apprentissage d'ensemble?

―― Ces dernières années, ** «boosting» et «random forest» **, qui ont attiré l'attention dans le domaine de l'analyse des données, sont également un type d'apprentissage d'ensemble.

Ensachage

Il ne sert à rien de combiner des modèles entraînés avec le même algorithme ** en utilisant les mêmes données ** même si vous dites «combiner plusieurs apprenants (prédicteurs)».

Cependant, il n'y a généralement qu'une seule donnée.

Là, j'utilise une technique appelée ** "boostrap" **.

Générez N ensembles de données bootstrap de taille n à partir des données d'entraînement.

Lorsque N modèles de prédiction sont créés à l'aide de ces données, chaque valeur de prédiction est yn (x).

Par conséquent, la valeur finale prévue du modèle utilisant l'ensachage est la suivante.

image.png

Empilement

Pour l'ensachage que j'ai mentionné plus tôt, j'ai considéré une simple moyenne de N valeurs prédites. En d'autres termes, les valeurs prédites ici sont évaluées de manière égale, et ** l'importance de chaque modèle ne peut pas être prise en compte. ** **

Par conséquent, la valeur finale prévue est image.png

pompage

--Générer N modèles à l'aide de l'ensemble de données bootstrap, les appliquer aux données d'entraînement d'origine et sélectionner le modèle qui minimise l'erreur de prédiction comme meilleur modèle.

――Il semble qu'il n'y ait aucun mérite à première vue par rapport à l'ensachage et à l'empilage, mais ** Lorsqu'une solution indésirable est obtenue à l'aide de données de mauvaise qualité, il est préférable d'utiliser un ensemble de données bootstrap excluant ces données. Une solution peut être obtenue **.

Forêt aléatoire

-La forêt aléatoire est une méthode qui utilise «l'arbre de décision» comme apprenant de base pour le «bagging» mentionné ci-dessus. L'algorithme spécifique est le suivant (1) Extraire N ensembles de données bootstrap à partir des données d'entraînement. (2) Générer N arbres Tn à partir de ces données.

Pourquoi utiliser un arbre de décision pour l'apprenant de base?

―― L'idée de base de l'ensachage est de réduire les erreurs en combinant plusieurs modèles avec une grande dispersion et un petit biais.

(1) Grande dispersion / petit biais → Modèle complexe (arbre de décision, méthode du plus proche voisin) (2) Petite dispersion / grand biais → Modèle simple (régression linéaire)

--L'arbre de décision est un modèle idéal avec une grande dispersion et un faible biais en tant qu'apprenant de base pour l'ensachage ** (Il peut être corrigé en faisant la moyenne de plusieurs modèles.) **

Pourquoi n'utiliser que certaines fonctionnalités?

―― Dans l'apprentissage d'ensemble, plus la corrélation entre les modèles ** est faible, plus la précision de la valeur prédite finale est élevée. ** **

→ Il est inutile de collecter de nombreux modèles similaires, et les performances sont plus élevées lorsque les modèles appris avec des données différentes sont combinés.

--En plus du tour de démarrage, la corrélation entre les modèles est abaissée en modifiant les variables utilisées pour la formation dans chaque modèle.

Qu'est-ce que le boosting?

Ada Boost

--Un ensemble de données pondérées ** est utilisé dans la formation de chaque apprenant.

Qu'est-ce que le boosting de gradient?

image.png

Expérience ①

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons

moons=make_moons(n_samples=200,noise=0.2,random_state=0)

X=moons[0]
y=moons[1]

from matplotlib.colors import ListedColormap

def plot_decision_boundary(model,X,y):
    _x1 = np.linspace(X[:,0].min()-0.5,X[:,0].max()+0.5,100)
    _x2 = np.linspace(X[:,1].min()-0.5,X[:,1].max()+0.5,100)
    x1,x2 = np.meshgrid(_x1,_x2)
    X_new=np.c_[x1.ravel(),x2.ravel()]
    y_pred=model.predict(X_new).reshape(x1.shape)
    custom_cmap=ListedColormap(["mediumblue","orangered"])
    plt.contourf(x1,x2,y_pred,cmap=custom_cmap,alpha=0.3)
    
def plot_dataset(X,y):
    plt.plot(X[:,0][y==0],X[:,1][y==0],"bo",ms=15)
    plt.plot(X[:,0][y==1],X[:,1][y==1],"r^",ms=15)
    plt.xlabel("$x_1$",fontsize=30)
    plt.ylabel("$x_2$",fontsize=30,rotation=0)

plt.figure(figsize=(12,8))
plot_dataset(X,y)
plt.show()

image.png

Analyse d'arbre de décision

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier #(scikit-Déterminé par l'analyse de l'arbre d'apprentissage(Méthode CART))

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)

tree_clf=DecisionTreeClassifier().fit(X_train,y_train) #par défaut pas de limite supérieure

plt.figure(figsize=(12,8))
plot_decision_boundary(tree_clf,X,y)
plot_dataset(X,y)
plt.show()

image.png

Forêt aléatoire

from sklearn.ensemble import RandomForestClassifier

random_forest=RandomForestClassifier(n_estimators=100,random_state=0).fit(X_train,y_train)
#La valeur par défaut est 10. Spécifiez le nombre d'arbres de décision utilisés pour l'ensachage.

plt.figure(figsize=(12,8))
plot_decision_boundary(random_forest,X,y)
plot_dataset(X,y)
plt.show()

image.png

Expérience ②

from sklearn.datasets import load_iris

iris=load_iris()
X_iris=iris.data
y_iris=iris.target

random_forest_iris=RandomForestClassifier(random_state=0).fit(X_iris,y_iris)

#Quelle est l'importance de chaque fonctionnalité
random_forest_iris.feature_importances_

plt.figure(figsize=(12,8))
plt.barh(range(iris.data.shape[1]),random_forest_iris.feature_importances_,height=0.5)
plt.yticks(range(iris.data.shape[1]),iris.feature_names,fontsize=20)
plt.xlabel("Feature importance",fontsize=30)
plt.show()

image.png

Expérience ③

L'ensemble de données utilisait le Titanic de kaggle. https://www.kaggle.com/c/titanic

import pandas as pd

df=pd.read_csv("train.csv")
df["Age"]=df["Age"].fillna(df["Age"].mean())
df["Embarked"]=df["Embarked"].fillna(df["Embarked"].mode()[0])#Valeur la plus fréquente

from sklearn.preprocessing import LabelEncoder

cat_features=["Sex","Embarked"]

for col in cat_features:
    lbl = LabelEncoder()
    df[col]=lbl.fit_transform(list(df[col].values))

X=df.drop(columns=["PassengerId","Survived","Name","Ticket","Cabin"])
y=df["Survived"]

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)

tree=DecisionTreeClassifier().fit(X_train,y_train)
print(tree.score(X_test,y_test))

rnd_forest=RandomForestClassifier(n_estimators=500,max_depth=5,random_state=0).fit(X_train,y_train)

print(rnd_forest.score(X_test,y_test))

image.png

Formulaire de soumission (sortie comme submisson.csv)

#Formulaire de soumission
test_df=pd.read_csv("test.csv")
test_df["Age"]=test_df["Age"].fillna(test_df["Age"].mean())
test_df["Fare"]=test_df["Fare"].fillna(test_df["Fare"].mean())
test_df["Embarked"]=test_df["Embarked"].fillna(test_df["Embarked"].mode()[0])#Valeur la plus fréquente

for col in cat_features:
    lbl = LabelEncoder()
    test_df[col]=lbl.fit_transform(list(test_df[col].values))

X_pred=test_df.drop(columns=["PassengerId","Name","Ticket","Cabin"])
ID=test_df["PassengerId"]

prediction=rnd_forest.predict(X_pred)

submisson=pd.DataFrame({
    "PassengerId":ID,
    "Survived":prediction
})

submisson.to_csv("submisson.csv",index=False)




Recommended Posts

Qu'est-ce que l'apprentissage d'ensemble?
Qu'est-ce que l'apprentissage automatique?
Qu'est-ce que l'espace de noms
Qu'est-ce que Django? .. ..
Qu'est-ce que dotenv?
Qu'est-ce que POSIX
Qu'est-ce que Linux
Qu'est-ce que le klass?
Qu'est-ce que SALOME?
Qu'est-ce que Linux?
Qu'est-ce que python
Qu'est-ce que l'hyperopt?
Qu'est-ce que Linux
Qu'est-ce que pyvenv
Qu'est-ce que __call__
Qu'est-ce que Linux
Qu'est-ce que Python
[Apprentissage automatique] Qu'est-ce que la norme LP?
[Python] Qu'est-ce que Pipeline ...
Qu'est-ce que Calmar Ratio?
Qu'est-ce qu'un terminal?
[Tutoriel PyTorch ①] Qu'est-ce que PyTorch?
Qu'est-ce que le réglage des hyper paramètres?
Qu'est-ce qu'un hacker?
Qu'est-ce que JSON? .. [Remarque]
À quoi sert Linux?
Qu'est-ce qu'un pointeur?
Qu'est-ce que TCP / IP?
Qu'est-ce que __init__.py de Python?
Qu'est-ce qu'un itérateur?
Qu'est-ce que UNIT-V Linux?
[Python] Qu'est-ce que virtualenv
[Partie 1] Qu'est-ce que l'optimisation? - Matériel d'étude pour l'apprentissage de l'optimisation mathématique
Qu'est-ce que Mini Sam ou Mini Max?
Apprentissage d'ensemble et analyse de paniers
Qu'est-ce que l'analyse de régression logistique?
Quelle est la fonction d'activation?
Qu'est-ce qu'une variable d'instance?
Qu'est-ce qu'un changement de contexte?
Qu'est-ce que Google Cloud Dataflow?
[Python] Python et sécurité-① Qu'est-ce que Python?
Qu'est-ce qu'un super utilisateur?
La programmation du concours, c'est quoi (bonus)
[Python] * args ** Qu'est-ce que kwrgs?
Qu'est-ce qu'un appel système
[Définition] Qu'est-ce qu'un cadre?
A quoi sert l'interface ...
Qu'est-ce que Project Euler 3 Acceleration?
Qu'est-ce qu'une fonction de rappel?
Qu'est-ce que la fonction de rappel?
Quel est votre "coefficient de Tanimoto"?
Cours de base Python (1 Qu'est-ce que Python)
[Python] Qu'est-ce qu'une fonction zip?
[Python] Qu'est-ce qu'une instruction with?
Qu'est-ce que l'étiquetage dans les prévisions financières?
Qu'est-ce que la régression de crête de rang réduit?