Pourquoi la régression de renforcement du gradient prévoit-elle des valeurs négatives lorsqu'il n'y a pas de valeurs y négatives dans mon ensemble d'entraînement?


8

À mesure que j'augmente le nombre d'arbres dans scikit learn 's GradientBoostingRegressor, j'obtiens de plus en plus de prédictions négatives, même s'il n'y a pas de valeurs négatives dans mon ensemble d'entraînement ou de test. J'ai environ 10 fonctionnalités, dont la plupart sont binaires.

Certains des paramètres que je réglais étaient:

  • le nombre d'arbres / itérations;
  • profondeur d'apprentissage;
  • et le taux d'apprentissage.

Le pourcentage de valeurs négatives semblait max à ~ 2%. La profondeur d'apprentissage de 1 (moignons) semblait avoir le plus grand% de valeurs négatives. Ce pourcentage semble également augmenter avec plus d'arbres et un taux d'apprentissage plus faible. L'ensemble de données provient de l'une des compétitions de terrains de jeux de kaggle.

Mon code est quelque chose comme:

from sklearn.ensemble import GradientBoostingRegressor

X_train, X_test, y_train, y_test = train_test_split(X, y)

reg = GradientBoostingRegressor(n_estimators=8000, max_depth=1, loss = 'ls', learning_rate = .01)

reg.fit(X_train, y_train)

ypred = reg.predict(X_test)

1
Une chance d'un exemple reproductible avec du code et des données?
Spacedman

2
de quelle compétition de terrain de jeu s'agit-il?
TheAxeR

Réponses:


8

En général, les modèles de régression (tout) peuvent se comporter de manière arbitraire au-delà du domaine couvert par les échantillons d'apprentissage. En particulier, ils sont libres d'assumer la linéarité de la fonction modélisée, donc si par exemple vous entraînez un modèle de régression avec des points:

X     Y
10    0
20    1
30    2

il est raisonnable de construire un modèle f(x) = x/10-1qui, pour, x<10renvoie des valeurs négatives.

La même chose s'applique "entre" vos points de données, il est toujours possible qu'en raison de la familité supposée des fonctions (qui peut être modélisée par une méthode particulière), vous obtiendrez des valeurs "à partir de vos échantillons d'apprentissage".

Vous pouvez penser à cela d'une autre manière - "Qu'est-ce qui est si spécial avec les valeurs négatives?", Pourquoi trouvez-vous étrange l'existence de valeurs négatives (si elles ne sont pas fournies dans l'ensemble de formation) alors que vous n'êtes pas alarmé par l'existence de disons. .. valeur 2131.23? À moins d'être développé de cette manière, aucun modèle ne traitera les valeurs négatives "différentes" des valeurs positives. Il s'agit simplement d'un élément naturel des valeurs réelles qui peuvent être atteintes comme toute autre valeur.


En ce qui concerne votre série de questions, je pense que ce sont purement les valeurs négatives qui sont plus faciles à identifier comme des anomalies car elles ont ce "-" devant elles ou vont clairement en dessous de zéro sur les graphiques. La question pourrait tout aussi bien être: "Pourquoi la régression du Gradient Boosting prédit-elle des valeurs jamais vues auparavant?". Peut-être pourriez-vous essayer de développer cela? Cela vous ferait certainement gagner un vote de ma part.
josh

@lejlot - D'une manière générale, ce n'est pas vrai. Les modèles de régression avec des activations logistiques ou tanh sont souvent garantis d'avoir des résultats dans certaines limites.
user48956

@ user48956 indique que "peut se comporter de manière arbitraire", je ne prétends pas que vous ne pouvez pas forcer certaines contraintes, bien sûr que vous pouvez - la réponse indique uniquement qu'il n'y a pas de contrainte "dépendante des données" (sauf si vous avez un modèle très spécifique qui a ceci construction intégrée) - si vous ajoutez cela manuellement en tant qu'expert - c'est à vous de décider.
lejlot

5

Rappelez-vous que GradientBoostingRegressor(en supposant une fonction de perte d'erreur au carré) ajuste successivement les arbres de régression aux résidus de l'étape précédente. Maintenant, si l'arbre de l'étape i prédit une valeur supérieure à la variable cible pour un exemple d'apprentissage particulier, le résidu de l'étape i pour cet exemple va être négatif, et donc l'arbre de régression à l'étape i + 1 fera face à des valeurs cibles négatives (qui sont les résidus de l'étape i). Comme l'algorithme de boost ajoute tous ces arbres pour faire la prédiction finale, je pense que cela peut expliquer pourquoi vous pouvez vous retrouver avec des prédictions négatives, même si toutes les valeurs cibles dans l'ensemble d'entraînement étaient positives, d'autant plus que vous avez mentionné que cela se produit plus souvent lorsque vous augmentez le nombre d'arbres.


Ceci est la bonne réponse.
hahdawg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.