À 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)
machine-learning
python
algorithms
scikit-learn
kaggle
user2592989
la source
la source
Réponses:
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:
il est raisonnable de construire un modèle
f(x) = x/10-1
qui, pour,x<10
renvoie 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.
la source
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.la source