Como puedo aumentar el número de árboles en scikit aprender 's GradientBoostingRegressor
, consigo predicciones más negativas, a pesar de que no hay valores negativos en mi entrenamiento o de prueba establecido. Tengo alrededor de 10 características, la mayoría de las cuales son binarias.
Algunos de los parámetros que estaba ajustando fueron:
- el número de árboles / iteraciones;
- profundidad de aprendizaje;
- y tasa de aprendizaje.
El porcentaje de valores negativos parecía alcanzar un máximo de ~ 2%. La profundidad de aprendizaje de 1 (tocones) parecía tener el mayor porcentaje de valores negativos. Este porcentaje también pareció aumentar con más árboles y una tasa de aprendizaje menor. El conjunto de datos es de una de las competiciones de juegos infantiles de kaggle.
Mi código es algo como:
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
usuario2592989
fuente
fuente
Respuestas:
En general, los modelos de regresión (cualquiera) pueden comportarse de manera arbitraria más allá del dominio abarcado por las muestras de entrenamiento. En particular, son libres de asumir la linealidad de la función modelada, por lo que si, por ejemplo, entrena un modelo de regresión con puntos:
Es razonable construir un modelo
f(x) = x/10-1
quex<10
devuelva valores negativos.Lo mismo se aplica "entre" sus puntos de datos, siempre es posible que debido a la supuesta familia de funciones (que puede modelarse mediante un método particular) obtendrá valores "de sus muestras de entrenamiento".
Puedes pensar en esto de otra manera: "¿qué tienen de especial los valores negativos?", ¿Por qué encuentras extraña la existencia de valores negativos (si no se proporciona en el conjunto de entrenamiento) mientras no te alarmas por la existencia de, digamos? .. valor 2131.23? A menos que se desarrolle de tal manera, ningún modelo tratará los valores negativos "diferentes" que los positivos. Este es solo un elemento natural de los valores reales que se puede obtener como cualquier otro valor.
fuente
Recuerde que el
GradientBoostingRegressor
(suponiendo una función de pérdida de error al cuadrado) ajusta sucesivamente los árboles de regresión a los residuos de la etapa anterior. Ahora, si el árbol en la etapa i predice un valor mayor que la variable objetivo para un ejemplo de entrenamiento en particular, el residuo de la etapa i para ese ejemplo será negativo, por lo que el árbol de regresión en la etapa i + 1 enfrentará valores objetivos negativos (que son los residuos de la etapa i). A medida que el algoritmo de refuerzo agrega todos estos árboles para hacer la predicción final, creo que esto puede explicar por qué puede terminar con predicciones negativas, a pesar de que todos los valores objetivo en el conjunto de entrenamiento fueron positivos, especialmente cuando mencionó que esto sucede más a menudo cuando aumenta la cantidad de árboles.fuente