Als ich die Anzahl der Bäume erhöhe in scikit lernen ist GradientBoostingRegressor
, erhalte ich negative Prognosen, auch wenn es in meiner Ausbildung oder Testsatz keine negativen Werte sind. Ich habe ungefähr 10 Funktionen, von denen die meisten binär sind.
Einige der Parameter, die ich eingestellt habe, waren:
- die Anzahl der Bäume / Iterationen;
- Lerntiefe;
- und Lernrate.
Der Prozentsatz der negativen Werte schien bei ~ 2% maximal zu sein. Die Lerntiefe von 1 (Stümpfe) schien den größten Prozentsatz der negativen Werte zu haben. Dieser Prozentsatz schien auch mit mehr Bäumen und einer geringeren Lernrate zuzunehmen. Der Datensatz stammt von einem der Kaggle-Spielplatzwettbewerbe.
Mein Code ist so etwas wie:
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
quelle
quelle
Antworten:
Im Allgemeinen können sich Regressionsmodelle (beliebige) über den von Trainingsmustern überspannten Bereich hinaus willkürlich verhalten. Insbesondere können sie die Linearität der modellierten Funktion annehmen. Wenn Sie also beispielsweise ein Regressionsmodell mit Punkten trainieren:
Es ist sinnvoll, ein Modell zu erstellen
f(x) = x/10-1
, dasx<10
negative Werte zurückgibt.Gleiches gilt "zwischen" Ihren Datenpunkten. Es ist immer möglich, dass Sie aufgrund der angenommenen Funktionsfamilie (die mit einer bestimmten Methode modelliert werden kann) Werte "aus Ihren Trainingsmustern" erhalten.
Sie können dies auf eine andere Art und Weise betrachten - "Was ist das Besondere an negativen Werten?". Warum finden Sie das Vorhandensein negativer Werte seltsam (wenn nicht im Trainingssatz angegeben), während Sie nicht durch das Vorhandensein von beispielsweise alarmiert werden? .. Wert 2131,23? Sofern nicht auf diese Weise entwickelt, behandelt kein Modell negative Werte "anders" als positive. Dies ist nur ein natürliches Element der realen Werte, die wie jeder andere Wert erreicht werden können.
quelle
Denken Sie daran, dass die
GradientBoostingRegressor
(unter der Annahme einer quadratischen Fehlerverlustfunktion) Regressionsbäume nacheinander an die Residuen der vorherigen Stufe anpasst. Wenn nun der Baum in Stufe i einen Wert vorhersagt, der größer als die Zielvariable für ein bestimmtes Trainingsbeispiel ist, wird der Rest von Stufe i für dieses Beispiel negativ sein, und daher wird der Regressionsbaum in Stufe i + 1 negativen Zielwerten ausgesetzt sein (das sind die Residuen aus Stufe i). Da der Boosting-Algorithmus alle diese Bäume addiert, um die endgültige Vorhersage zu treffen, kann dies meines Erachtens erklären, warum Sie möglicherweise negative Vorhersagen treffen, obwohl alle Zielwerte im Trainingssatz positiv waren, insbesondere, da Sie erwähnt haben, dass dies häufiger vorkommt oft, wenn Sie die Anzahl der Bäume erhöhen.quelle