2017-07-21 10 views
0

Je reconstruis un document. Ils ont entraîné Arbres de régression à amplification de gradient en fonction de l'entrée X et des cibles logiques y_s pour obtenir la sortie finale y avec une erreur quadratique moyenne minimale. Concernant le papier, ils ont implémenté toutes les méthodes basées sur l'arbre de décision en utilisant le paquet scitkit-learn sans aucune modification. C'est ce que je veux faire.GradientBoostingTree formation avec des étiquettes souples dans scikit-learn?

Si vous connaissez la solution déjà je serais heureux d'entendre, sinon voici mes pensées: Juste pour simplifier supposons que nous avons un problème binaire avec X = [[x1 x2 x3] [x1 x2 x3] .. .] et y_s [[0,4 0,6] [0,8 0,2] ...].

En ce qui concerne la GradientBoostingTree pour le classement (voir le lien ci-dessus), je ne peux nourrir dans un tableau de classe 1-dim

(y : array-like, shape = [n_samples]) Target values (integers in classification, real numbers in regression) For classification, labels must correspond to classes.

, donc même quand je remplacer la fonction de coût (par exemple pour l'entropie croisée) qui peut gérer les étiquettes souples, je ne peux toujours pas nourrir dans les 2 étiquettes souples dim (au moins). Une autre idée consistait à la réduire à 1-dim en ne prenant qu'une seule étiquette logicielle (ne fonctionne que pour un problème binaire où les deux étiquettes souples s'ajoutent à 1) et utiliser plutôt GradientBoostingRegression. Mais encore une fois une seule classe est possible et je ne peux pas non plus former des modèles indépendants comme

X = [[1,2,3], [1,2,3], [4,5,6]] 
y = [[3.141, 2.718], [3.141, 2.718], [2.718, 3.141]] 
rgr = MultiOutputRegressor(GradientBoostingRegressor(random_state=0)) 
rgr.fit(X, y) 
X_test = [[1.5,2.5,3.5], [3.5,4.5,5.5]] 
rgr.predict(X_test) 

en raison de la corrélation entre les sorties ..

image Big: 1. Extraction de caractéristiques combinées 2. a) Formation: caractéristiques extraites (Xb), étiquettes originales (y) -> régression logistique b) Prévision: étiquettes souples (yb) 3. a) Formation: caractéristiques d'origine (X), étiquettes souples (yb) -> GradientBoostingTree b) Évaluation: prédire les étiquettes normales (y_) -> Importance des caractéristiques originales

L'ensemble de la procédure sans les étiquettes souples est sans valeur. Je veux dire qu'il doit être possible en quelque sorte, mais je ne peux pas comprendre comment ...

http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html http://scikit-learn.org/stable/auto_examples/ensemble/plot_gradient_boosting_regression.html

Répondre

0

scikit-learn de docs sur multi-output decision trees devraient vous orienter dans la bonne direction

+0

Merci pour votre réponse. Je suis au courant de la DecisionTreeRegressor mais je ne sais pas comment le changer en GradientBoostingRegressor, par exemple. utiliser le retrait comme méthode de régularisation? GradientBoostingRegressor –

+0

juste pour vous, je l'ai changé l'estimateur et je finis avec le même message d'erreur comme avant « ValueError: mauvaise forme d'entrée » Il semble donc que je peux utiliser GBR en changeant le package GradientBoostingRegressor manuellement? –

+0

L'API pour la méthode ['fit'] (http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html#sklearn.ensemble.GradientBoostingClassifier.fit) dans 'sklearn.ensemble' models indique que 'y' devrait avoir la forme' [n_samples] '. En revanche, la méthode ['fit'] (http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier.fit) dans sklearn.tree permet 'y 'avoir la forme' [n_samples, n_outputs] '. Je m'attendrais à ce qu'il soit plus facile d'implémenter un boost sur un modèle '.tree' que plusieurs sorties sur un'.méthode d'ensemble –