Classification avec renforcement du gradient: comment conserver la prédiction dans [0,1]

17

La question

J'ai du mal à comprendre comment la prédiction est maintenue dans l' intervalle lorsque je fais une classification binaire avec Gradient Boosting.[0,1]

Supposons que nous travaillons sur un problème de classification binaire, et notre fonction objective est la perte de log, , où est la variable cible et est notre modèle actuel.yilog(Hm(xi))+(1yi)log(1Hm(xi))y{0,1}H

Lors de la formation du prochain apprenant faible telle sorte que notre nouveau modèle soit , quel est le mécanisme qui est censé maintenir ? Ou, peut-être une question plus pertinente, existe-t-il un tel mécanisme?hiHi=Hi1+hiHi[0,1]


Plus d'informations sur ce que je fais

J'essaie d'implémenter le renforcement du gradient, en utilisant des arbres de régression. Ce que je fais pour l'éviter, c'est qu'une multiplication de par un facteur , de telle sorte que H + c _ {\ text {max}} h ne descende pas en dessous de zéro ou au-dessus un, et je sélectionne le c dans cette gamme qui minimise la fonction de perte. c [ 0 , c max ] H + c max h chic[0,cmax]H+cmaxhc

Cela pose le problème suivant: après quelques tours, j'ai un point qui est parfaitement classé, et le meilleur fractionnement disponible pour pousser le classificateur dans la direction du gradient veut pousser ce point au-dessus d'un, ce qui, je m'assure, ne se produit pas en réglage . Ainsi, toutes les itérations suivantes sélectionneront le même fractionnement et le même .c = 0c=0c=0

J'ai essayé des pratiques de régularisation courantes

  • Diminuer le taux d'apprentissage en multipliant par . Cela retarde simplement le problème.μ = 0,01cμ=0.01
  • Sous-échantillonnage de l'espace des fonctionnalités, mais certains des points sont très faciles à classer, ils cochent presque toutes les cases du "est-ce un point positif?" forme, et presque chaque "bonne division" montre ce comportement.

Je pense que ce n'est pas un problème de paramètres, et il devrait y avoir un moyen plus solide de résoudre ce problème. Je n'écarte pas la possibilité que mon implémentation soit interrompue, mais je n'ai rien trouvé pour résoudre ce problème.

Ce que nous manipulons, dans le contexte de la perte logistique, devrait être une probabilité, alors comment l'éviter?


Mon intuition serait de mettre le modèle que nous construisons, , dans une fonction sigmoïde telle qu'il soit limité à , et je suppose que cela fonctionnerait, mais je veux savoir s'il existe d'autres solutions. Étant donné que le renforcement du gradient semble utilisé avec succès dans les tâches de classification, une solution «correcte» (c'est-à-dire avec justification) devrait exister.[ 0 , 1 ]H[0,1]

Clins d'oeil
la source
Vous pourriez exiger que soit multiplicatif, dans la mesure où se comporte de manière additive avec vos autres experts. ln ( H )Hln(H)
Alex R.

Réponses:

22

J'aime y penser par analogie avec le cas des modèles linéaires et leur extension aux GLM (modèles linéaires généralisés).

Dans un modèle linéaire, nous ajustons une fonction linéaire pour prédire notre réponse

y^=β0+β1x1+βnxn

Pour généraliser à d'autres situations, nous introduisons une fonction de lien, qui transforme la partie linéaire du modèle à l'échelle de la réponse (techniquement, c'est un lien inverse, mais je pense qu'il est plus facile de penser de cette façon, transformant le prédicteur linéaire en réponse, que de transformer la réponse en un prédicteur linéaire).

Par exemple, le modèle logistique utilise la fonction sigmoïde (ou logit)

y^=11+exp((β0+β1x1+βnxn))

et la régression du poisson utilise une fonction exponentielle

y^=exp(β0+β1x1+βnxn)

Pour construire une analogie avec l'augmentation du gradient, nous remplaçons la partie linéaire de ces modèles par la somme des arbres amplifiés. Ainsi, par exemple, le cas gaussien (analogue à la régression linéaire) devient le bien connu

y^=ihi

où est notre séquence d'apprenants faibles. Le cas binomial est analogue à la régression logistique (comme vous l'avez noté dans votre réponse)hi

y^=11+exp(ihi)

et le boost de poisson est analogue à la régression du poisson

y^=exp(ihi)

La question demeure: comment adapter ces modèles boostés lorsque la fonction de liaison est impliquée? Pour le cas gaussien, où le lien est la fonction d'identité, le mantra souvent entendu d'adapter les apprenants faibles aux résidus du modèle de travail actuel fonctionne, mais cela ne se généralise pas vraiment aux modèles plus compliqués. L'astuce consiste à écrire la fonction de perte minimisée en fonction de la partie linéaire du modèle (c'est-à-dire la partie de la formulation GLM).iβixi

Par exemple, la perte binomiale est généralement rencontrée comme

iyilog(pi)+(1yi)log(1pi)

Ici, la perte est fonction de , les valeurs prédites à la même échelle que la réponse, et est une transformation non linéaire du prédicteur linéaire . Au lieu de cela, nous pouvons ré-exprimer cela en fonction de , (dans ce cas également connu sous le nom de log odds)pipiLiLi

iyiLilog(1+exp(Li))

Ensuite, nous pouvons prendre le gradient de ceci par rapport à , et augmenter pour minimiser directement cette quantité.L

Ce n'est qu'à la fin, lorsque nous voulons produire des prédictions pour l'utilisateur, que nous appliquons la fonction de lien à la séquence finale des apprenants faibles pour mettre les prédictions à la même échelle que la réponse. Tout en ajustant le modèle, nous travaillons en interne sur l'échelle linéaire tout le temps.

Matthew Drury
la source
2
D'accord avec "écrire la fonction de perte minimisée en fonction de la partie linéaire du modèle". Mais je pense qu'une façon simple de le comprendre sans dériver les cotes du log est: pour la partie linéaire du modèle, c'est-à-dire , pensez à la fonction de perte comme , et le pseudo-résiduel est juste de faire la dérivée de la perte wrt . r(,)i(yilog11+er+(1yi)log(111+er))r
user2830451
@ matthew-drury Pouvez-vous s'il vous plaît ajouter un peu de lumière sur la section multinomiale de classe K du même algorithme où une idée similaire est étendue pour fonctionner?
MixCoded
6

Après quelques recherches, il semble que mon intuition et le commentaire d'Alex R. soient exacts.

Afin de construire un modèle continu avec des prédictions dans , on peut mettre le modèle H dans une fonction logistique (Wikipedia) , tel que pour H R , on a 1[0,1]HHR Les étapes de renforcement du gradient prennent ensuite la dérivée par rapport àHet mettent à jour le modèle, comme si la fonction logistique faisait partie de la fonction de coût, et cela fonctionne.

11+eH[0,1]
H

Cela a été suggéré dans l'article Régression logistique additive: une vue statistique du renforcement , par Friedman, Hastie et Tibshirani, pour construire LogitBoost (Wikipedia) , une adaptation d' AdaBoost (Wikipedia) à la perte logistique.

En termes très basiques, s'il est possible de passer d'une régression linéaire à une régression logistique par l'ajout d'un sigmoïde, alors cela fonctionne également pour convertir le boost de régression en boost de classification.

Clins d'oeil
la source