Traitement du japonais par Python3 (5) Apprentissage d'ensemble de différents modèles par Voting Classifier

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

Lorsqu'il existe plusieurs classificateurs avec une grande précision pour classer une phrase donnée en plusieurs classes, comme "l'analyse des émotions" dans le traitement du langage naturel, il est possible de créer un modèle plus fort en les combinant dans l'apprentissage d'ensemble. Il y a aussi.

Apprentissage d'ensemble Méthode de construction d'un apprenant de haute précision en combinant un prédicteur qui produit une solution au hasard, c'est-à-dire un apprenant faible qui peut prédire avec une plus grande précision qu'un prédicteur avec la pire précision de prédiction. Des techniques telles que l'ensachage et le suralimentation sont bien connues. ([Apprentissage d'ensemble de Toki no Mori Wiki](http://ibisforest.org/index.php?%E3%82%A2%E3%83%B3%E3%82%B5%E3%83%B3%E3%83] % 96% E3% 83% AB% E5% AD% A6% E7% BF% 92))

En réalité, il semble qu'il serait peut-être préférable que plusieurs experts discutent des propositions politiques plutôt que de demander à un seul expert de donner des conseils sur les politiques. En gros, l'expert ici est un apprenant (forêt aléatoire ou machine à vecteurs de support), et combiner les résultats (valeurs prédites) obtenus à partir de plusieurs apprenants est un apprentissage d'ensemble. À propos, Random Forest est lui-même appelé un apprenant d'ensemble car Random Forest trouve la valeur prédite par majorité à partir des résultats de plusieurs arbres de décision. Cette fois, je vais étudier Voting Classifier qui peut rapidement combiner plusieurs modèles avec une grande précision qui sont conceptuellement différents.

Qu'est-ce que le classificateur de vote?

Une classe dans sklearn.ensemble implémentée dans scikit-learn v0.17.

The idea behind the voting classifier implementation is to combine conceptually different machine learning classifiers and use a majority vote or the average predicted probabilities (soft vote) to predict the class labels. Such a classifier can be useful for a set of equally well performing model in order to balance out their individual weaknesses.

Voting Classifier détermine les résultats produits par différents types d'apprenants (tels que Random Forest, Logistic Regression et Gausian NB (classificateur naïf)) qui ont déjà un certain degré de précision par majorité ou moyenne de probabilité. Le concept lui-même est très simple, mais il est facile à utiliser et étonnamment puissant.

Hard Vote Une méthode d'adoption de l'étiquette qui a été décidée par la majorité des étiquettes prédites lors de la réalisation de prévisions avec plusieurs modèles. Pour une certaine entrée X, si chacun des trois apprenants prend une décision différente de «ceci est 1» et «ceci est 2», la majorité «1» est prise ici et classée comme X-> 1. Sera fait. Apprenant 1-> classe 1 Apprenant 2-> classe 1 Apprenant 3-> classe 2

Weak Vote Cela pondère la probabilité que chaque apprenant prédit d'être dans une classe, et la somme des poids donne l'étiquette avec la probabilité moyenne la plus élevée. Voir l'exemple officiel pour plus de détails. 1.11.5.2. Weighted Average Probabilities (Soft Voting)

Soyez prudent avec le classificateur de vote

Une chose à garder à l'esprit est que ** modèle tout aussi performant ** est un piège, et s'il y a des modèles qui ne fonctionnent pas bien ici, même si vous votez, le résultat peut ne pas s'améliorer. Why is my VotingClassifier accuracy less than my individual classifier?

En fait utiliser

Comme vous pouvez le voir dans la documentation officielle, je fais un vote difficile sur l'ensemble de données d'iris en utilisant le classificateur de vote pour le moment.

voting_classifier.py


from sklearn import datasets
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier

def executre_voting_classifier():
    #Chargez le jeu de données iris
    iris = datasets.load_iris()
    X = iris.data[:, [0,2]]
    y = iris.target

    #Définissez le classificateur. Ici, nous utilisons la régression logistique, le classificateur de forêt aléatoire et la base naïve gaussienne.
    clf1 = LogisticRegression(random_state=1)
    clf2 = RandomForestClassifier(random_state=1)
    clf3 = GaussianNB()

    #Créez un apprenant d'ensemble. vote='hard'Fixez et décidez de la valeur par une décision à la majorité simple.
    eclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('gnb', clf3)], voting='hard')

    for clf, label in zip([clf1, clf2, clf3, eclf], ['Logistic Regression', 'Random Forest', 'naive Bayes', 'Ensemble']):
        scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy')
        print("Accuracy: %0.2f (+/- %0.2f) [%s]" % (scores.mean(), scores.std(), label))

Résultat de sortie:
    Accuracy: 0.92 (+/- 0.03) [Logistic Regression]
    Accuracy: 0.91 (+/- 0.05) [Random Forest]
    Accuracy: 0.91 (+/- 0.06) [naive Bayes]
    Accuracy: 0.93 (+/- 0.06) [Ensemble]

Certainement (subtilement) amélioré. Vous pouvez facilement combiner des modèles avec plusieurs paramètres et effectuer une recherche de grille sur ces paramètres.

ensemble.py


clf1 = SVC(kernel='rbf', random_state=0, gamma=0.3, C=5 ,class_weight='balanced')
clf2 = LogisticRegression(C=5, random_state=0, class_weight='balanced')
clf3 = RandomForestClassifier(criterion='entropy', n_estimators=250, random_state = 1, max_depth = 20, n_jobs=2, class_weight='balanced')

eclf = VotingClassifier(estimators=[('svm', clf1), ('lr', clf2), ('rfc', clf3)], voting='hard')
    eclf.fit(X_train, y_train)

Comme ça, ça semble être efficace quand «il y a des modèles qui semblent bons à combiner, mais je me demande s'il y a un moyen facile de les combiner».

Recommended Posts

Traitement du japonais par Python3 (5) Apprentissage d'ensemble de différents modèles par Voting Classifier
[Traitement du langage 100 coups 2020] Résumé des exemples de réponses par Python
100 Language Processing Knock Chapitre 1 par Python
Traitement du langage naturel japonais utilisant Python3 (4) Analyse des émotions par régression logistique
[Mémo d'apprentissage] Bases de la classe par python
Échelle de gris par matrice-Reinventor of Python image processing-
[Python] [Traitement du langage naturel] J'ai essayé le Deep Learning ❷ fait de toutes pièces en japonais ①
Python: apprentissage profond du traitement du langage naturel: principes de base
Python: Apprentissage en profondeur dans le traitement du langage naturel: Implémentation d'un système de sélection de phrases de réponses
Traitement d'image par matrice Basics & Contents-Reinventor of Python image processing-
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Python: traitement du langage naturel
Traitement de la communication par Python
Divers traitements de Python
[Python] Essayez de classer les boutiques de ramen par traitement du langage naturel
100 coups de traitement du langage avec Python 2015
100 Language Processing Knock Chapitre 1 (Python)
100 Language Processing Knock Chapitre 2 (Python)
Traitement d'image par python (Pillow)
Post-traitement de python (NG)
Dessin linéaire avec une matrice - Recherche originale par un réinventeur du traitement d'image Python -
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 4)
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)