Question

Je suis en train de comprendre la méthode de boosting gradient (GB). J'ai lu quelques pages du wiki et des documents à ce sujet, mais il serait vraiment me aider à voir un exemple simple et pleine réalisée étape par étape. Quelqu'un peut-il fournir pour moi, ou me donner un lien à un tel exemple? code source sans optimisations délicates Straightforward également répondre à mes besoins.

Était-ce utile?

La solution

J'ai essayé de construire l'exemple simple suivant (la plupart du temps pour mon compréhension de soi) qui je l'espère pourrait vous être utile. Si quelqu'un remarque d'autre une erreur s'il vous plaît laissez-moi savoir. Ceci est en quelque sorte basé sur l'explication suivante belle de gradient stimulant http://blog.kaggle.com/2017/01/23/a-kaggle-master-explains-gradient-boosting/

L'exemple vise à prédire le salaire par mois (en dollars) en fonction ou non l'observation a sa propre maison, voiture et famille / enfants. Supposons que nous ayons un ensemble de données de trois observations où la première variable est « avoir propre maison », le second est « avoir propre voiture » et la troisième variable est « ont de la famille / enfants », et la cible est « salaire par mois ». Les observations sont

1.- (Oui, oui, oui, 10000)

2 .- (n, n, n, 25)

3 .- (Oui, Non, Non, 5000)

Choisissez un numéro $ M $ de stimuler les étapes, par exemple M $ = 1 $ . La première étape de l'algorithme de renforcement gradient est de commencer avec un modèle initial F_ $ {0} $ . Ce modèle est une constante définie par $ \ mathrm {arg min} _ {\ gamma} \ sum_ {i = 1} ^ 3L (y_ {i}, \ gamma) $ dans notre cas, où $ l $ est la fonction de perte. Supposons que nous travaillons avec la fonction habituelle de perte $ L (y_ {i}, \ gamma) = \ frac {1} {2} (y_ {i} - \ gamma) ^ {2} $ . Si tel est le cas, cette constante est égale à la moyenne des sorties $ y_ {i} $ , donc dans notre cas $ \ frac {10000 + 25 + 5000} {3} = 5008,3 $ . Ainsi, notre modèle initial est $ F_ {0} (x) = 5008,3 $ (qui associe toutes les observations $ x $ (par exemple (Non, Oui, Non)) à 5008,3.

Ensuite, nous devrions créer un nouvel ensemble de données, qui est le jeu de données précédent, mais au lieu de $ y_ {i} $ nous prenons les résidus $ r_ {i0} = - \ frac {\ partial {L (y_ {i}, F_ {0} (x_ {i}))}} {\ partial {F_ {0} (x_ {i}) }} $ . Dans notre cas, nous avons $ r_ {} = i0 y_ {i} -F_ {0} (x_ {i}) = y_ {i} -5008,3 $ . Donc, notre jeu de données devient

1.- (Oui, Oui, Oui, 4991,6)

2 .- (n, n, n, -4983,3)

3 .- (Oui, Non, Non, -8,3)

L'étape suivante consiste à adapter à un apprenant de base $ h $ à ce nouvel ensemble de données. En général, l'apprenant de base est un arbre de décision, donc nous l'utiliser.

Supposons maintenant que nous avons construit l'arbre de décision suivant $ h $ . Je construisais cet arbre en utilisant des formules d'entropie et de gain d'information, mais sans doute que je fait une erreur, mais pour nos fins, nous pouvons supposer qu'il est correct. Pour un exemple plus détaillé, s'il vous plaît vérifier

https://www.saedsayad.com/decision_tree.htm

L'arbre construit est:

L'appel Let cette arbre de décision $ h_ {0} $ . La prochaine étape est de trouver une constante $ \ lambda_ {0} = \ mathrm {arg \; min} _ {\ lambda} \ sum_ {i = 1} ^ {3} L (y_ {i}, F_ {0} (x_ {i}) + \ lambda {h_ {0} (x_ {i})}) $ . Par conséquent, nous voulons une constante $ \ lambda $ réduction au minimum

$ C = \ frac {1} {2} (10000- (5008.3+ \ lambda * {} 4991,6)) ^ {2} + \ frac {1} {2 } (25- (5008.3+ \ lambda (-4983,3))) ^ {2} + \ frac {1} {2} (5000- (5008.3+ \ lambda (-8,3))) ^ {2} $ .

C'est là descente de gradient est très pratique.

Supposons que nous commençons à $ P_ {0} = 0 $ . Choisissez l'apprentissagetaux égal à $ \ eta = 0,01 $ . Nous avons

$ \ frac {\ partial {C}} {\ partial {\ lambda}} = (10000- (5008.3+ \ lambda * 4991,6)) (- 4991,6) + ( 25- (5008.3+ \ lambda (-4983,3))) * 4983.3+ (5000- (5008.3+ \ lambda (-8,3))) * 8.3 $ .

Alors notre prochaine valeur $ P_ {1} $ est donnée par $ P_ {1} = 0 \ eta {\ frac {\ partial {C}} {\ partial {\ lambda}} (0)} = 0 à 0,01 (-4991,6 * 4991,7 4983,4 + * (- 4983,3) + (- 8.3) * 8.3) $ .

Répétez cette étape $ N $ fois, et supposons que la dernière valeur est $ P_ {N} $ . Si $ N $ est suffisamment grande et $ \ eta $ est suffisamment petite, $ \ lambda: = P_ {N} $ devrait être la valeur où $ \ sum_ {i = 1} ^ {3} l (y_ {i }, F_ {0} (x_ {i}) + \ lambda {h_ {0} (x_ {i})}) $ est réduite au minimum. Si tel est le cas, notre $ \ lambda_ {0} $ sera égal à $ P_ {N} $ . Juste pour le plaisir de le, supposons que $ P_ {N} = 0,5 $ (de sorte que $ \ sum_ {i = 1} ^ {3} L (y_ {i}, F_ {0} (x_ {i}) + \ lambda {h_ {0} (x_ {i})}) $ est réduite au minimum à $ \ lambda: = 0,5 $ ). Par conséquent, $ \ lambda_ {0} = 0,5 $ .

L'étape suivante consiste à mettre à jour notre modèle initial $ F_ {0} $ par F_ $ {1} (x ): = F_ {0} (x) + \ lambda_ {0} h_ {0} (x) $ . Étant donné que notre nombre d'étapes est juste stimulant l'un, alors ceci est notre dernier modèle F_ $ {1} $ .

Supposons maintenant que je veux prédire une nouvelle observation $ x = $ (Oui, Oui, Non) (si cette personne ne possède maison et propre voiture, mais pas d'enfants). Quel est le salaire par mois de cette personne? Nous venons Compute F_ $ {1} (x) = F_ {0} (x) + \ lambda_ {0} h_ {0} (x) = 5008,3 + 0,5 * 4991,6 = 7504,1 $ . Donc, cette personne gagne 7504,1 $ par mois selon notre modèle.

Autres conseils

Comme il est dit, la présentation suivante est une introduction « douce » à gradient boosting, je l'ai trouvé très utile au moment de déterminer Gradient Dynamiser; il est un exemple bien expliqué inclus.

http: //www.ccs. neu.edu/home/vip/teach/MLcourse/4_boosting/slides/gradient_boosting.pdf

Cette est le référentiel dans lequel réside le paquet xgboost. C'est d'où la bibliothèque de xgboost pour les principales langues comme Julia, Java, R, etc sont en forme de fourche de.

Cette est la mise en œuvre Python.

Marcher à travers le code source (comme indiqué dans la section « Comment contribuer ») docs serait vous aider à comprendre l'intuition derrière.

Licencié sous: CC-BY-SA avec attribution
scroll top