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.
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)
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?
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