Comment les classifications sont-elles fusionnées dans un classificateur d'ensemble?

8

Comment un classificateur d'ensemble fusionne-t-il les prédictions de ses classificateurs constituants? J'ai du mal à trouver une description claire. Dans certains exemples de code que j'ai trouvés, l'ensemble fait simplement la moyenne des prédictions, mais je ne vois pas comment cela pourrait rendre possible une "meilleure" précision globale.

Considérez le cas suivant. Un classificateur d'ensemble est composé de 10 classificateurs. Un classificateur a une précision de 100% du temps dans le sous-ensemble de données X et de 0% toutes les autres fois. Tous les autres classificateurs ont une précision de 0% dans le sous-ensemble de données X et de 100% toutes les autres fois.

En utilisant une formule de moyenne, où la précision du classificateur est ignorée, le classificateur d'ensemble aurait, au mieux, une précision de 50%. Est-ce correct ou manque-t-il quelque chose? Comment la prédiction moyenne de N classificateurs potentiellement désemparés peut-elle créer une meilleure prédiction qu'un classificateur unique expert dans un domaine spécifique?

Cerin
la source

Réponses:

5

J'ai lu un exemple clair d' Introduction à l'exploration de données de Tan et al.

L'exemple prétend que si vous combinez vos classificateurs avec un système de vote, c'est-à-dire classer un enregistrement avec la classe la plus votée, vous obtenez de meilleures performances. Cependant, cet exemple utilise directement le libellé de sortie des classificateurs, et non les prédictions (je pense que vous vouliez parler de probabilités).

Ayons 25 classificateurs indépendants qui ont une erreur de généralisation e=1accuracy=0.35. Afin de mal classer un enregistrement, au moins la moitié d'entre eux doivent le classer incorrectement.

Tout peut être modélisé avec des variables aléatoires, mais il suffit de calculer la probabilité qu'au moins 13 d'entre elles classent mal l'enregistrement où chaque terme de la somme signifie que classifieur obtient correctement la classe d'enregistrement et se trompe.

i=1325(25i)ei(1e)(25i)=0.06
i25i

En utilisant directement les prédictions et en utilisant comme méthode de combinaison une moyenne, je pense qu'il pourrait être un peu plus difficile de montrer l'amélioration de la performance d'ensemble. Cependant, en se concentrant uniquement sur les prévisions et sans se soucier de l'étiquette de sortie de l'ensemble, la moyenne de plus de prévisions peut être considérée comme un estimateur de la probabilité réelle. Par conséquent, l'ajout de classificateurs devrait améliorer les prévisions de la technique d'ensemble.

Simone
la source
1
C'est un excellent moyen de comprendre pourquoi l'ensemble fonctionne. Cependant, le cas spécifique est susceptible d'être trop optimiste en termes d'amélioration des performances. C'est fondamental, chaque classificateur est formé (généralement) sur les mêmes données, ce qui rend l'indépendance des classificateurs douteuse.
probabilitéislogic
Bien sûr, l'indépendance est une hypothèse trop forte.
Simone
5

Il vous manque le fait que le "mauvais" classifieur n'a pas une précision de 0%, mais ce n'est pas beaucoup mieux qu'une supposition aléatoire.

De cette façon, les bonnes prédictions sont toujours les mêmes et s'accumulent (car la vérité n'est qu'une), tandis que les mauvaises prédictions sont des bruits aléatoires qui se compensent.


la source
Ce n'est pas qu'un classificateur soit globalement «mauvais» ou «bon». Je parle de la précision de chaque classificateur dans des domaines spécifiques. Si un classificateur est parfait dans un domaine spécifique, l'inclure dans un ensemble peut potentiellement masquer son utilité, car tous les autres classificateurs peuvent faire de mauvaises classifications.
Cerin
1
Sauf si vous avez des contradictions parfaites (qui sont presque absentes dans les données réelles et utilisables), les domaines ne changent rien puisque le classificateur doit également produire du bruit au lieu d'une classe exclusivement mauvaise pour les objets en dehors de son domaine - de cette façon, seuls différents classificateurs partiels seront " bon "dans chacun des domaines. Quoi qu'il en soit, il est évident qu'un signal net et parfait sera réduit au silence par le bruit (espérons-le, pas complètement), mais c'est le compromis pour n'avoir aucune information sur les classificateurs partiels qui fonctionnent pour quels objets.
Mon point est que si vous prenez un bon classificateur et faites une moyenne de sa prédiction avec de mauvais classificateurs, il est peu probable que vous obteniez une meilleure prédiction. Vous diluez votre bonne prédiction.
Cerin
@chriss - généralement lorsque vous calculez la moyenne de chaque classificateur en fonction de ses performances. dans ce schéma, un grand classificateur n'est dilué que par d'autres grands classificateurs. Les classificateurs de merde ont un faible poids (généralement exponentiellement bas) et ne se diluent donc pas.
Probabilislogic
@ChisS Vous avez parfaitement raison - le point d'ensemble est que vous ne pouvez pas choisir le meilleur classificateur pour chaque objet, vous échangez donc une solution raisonnable moyenne pour une certaine atténuation du signal par le bruit et le risque de catastrophe des classificateurs à base corrélée.
0

Dans le cas d'une classification, il existe généralement deux façons de définir la prédiction. Disons que c'est un problème de classification de classe binaire et que vous avez 3 modèles à assembler appelés m1, m2 et m3 et que le jeu de données d'apprentissage est appelé train et le jeu de données de test appelé test.Les modèles sont déjà construits sur train.Ensuite, un code python sera le suivant.

La première méthode consiste à prendre un tour de la moyenne

pred=round([m1.predict(test)+m2.predict(test)+m3.predict(test)]/3) 

La sortie sera donc un vecteur de valeur 0 et 1

La deuxième méthode consiste à regrouper la probabilité de prédiction de chaque classe à partir de ces modèles et à les regrouper, puis à décider de la classe soit sur la base d'un seuil strict, soit sur une logique.

pred_proba=[m1.predict(test).predict_proba++ m2.predict(test).predict_proba 
+m3.predict(test).predict_proba]/3 
# Simple average ensemble,however you can try weighted average as well

parcourir tout le vecteur pred_proba pour trouver lequel sur 0 et 1 est 1 en se basant sur le seuil dur 0,5

pred=[] # Initialize a blank list for prediction

for x in pred_proba:
 if x>0.5:
   pred.append[1]
 else:
   pred.append[0]

Donc, pred est la prédiction d'ensemble finale.

0xF
la source