Como eu aumentar o número de árvores em scikit aprender 's GradientBoostingRegressor
, eu recebo previsões mais negativas, mesmo que não existem valores negativos em meu treinamento ou testar set. Eu tenho cerca de 10 recursos, a maioria dos quais são binários.
Alguns dos parâmetros que eu estava ajustando foram:
- o número de árvores / iterações;
- profundidade de aprendizagem;
- e taxa de aprendizado.
A porcentagem de valores negativos parecia máxima em ~ 2%. A profundidade de aprendizado de 1 (tocos) parecia ter o maior% de valores negativos. Esse percentual também parecia aumentar com mais árvores e uma menor taxa de aprendizado. O conjunto de dados é de uma das competições do playground kaggle.
Meu código é 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
user2592989
fonte
fonte
Respostas:
Em geral, os modelos de regressão (qualquer) podem se comportar de maneira arbitrária além do domínio abrangido pelas amostras de treinamento. Em particular, eles são livres para assumir a linearidade da função modelada; portanto, se você, por exemplo, treina um modelo de regressão com pontos:
é razoável construir um modelo
f(x) = x/10-1
quex<10
retorne valores negativos.O mesmo se aplica "entre" seus pontos de dados, é sempre possível que, devido à suposta familiaridade de funções (que podem ser modeladas por um método específico), você obtenha valores "de suas amostras de treinamento".
Você pode pensar sobre isso de outra maneira - "o que há de tão especial nos valores negativos?", Por que você acha estranha a existência de valores negativos (se não fornecidos no conjunto de treinamento) enquanto você não fica alarmado com a existência de digamos. .. valor 2131,23? A menos que seja desenvolvido dessa maneira, nenhum modelo tratará valores negativos "diferentes" dos positivos. Este é apenas um elemento natural dos valores reais que podem ser atingidos como qualquer outro valor.
fonte
Lembre-se de que a
GradientBoostingRegressor
(assumindo uma função de perda de erro ao quadrado) ajusta sucessivamente as árvores de regressão aos resíduos do estágio anterior. Agora, se a árvore no estágio i predizer um valor maior que a variável de destino para um exemplo de treinamento específico, o resíduo do estágio i desse exemplo será negativo e, portanto, a árvore de regressão no estágio i + 1 enfrentará valores de destino negativos (quais são os resíduos do estágio i). Como o algoritmo de reforço adiciona todas essas árvores para fazer a previsão final, acredito que isso possa explicar por que você pode ter previsões negativas, mesmo que todos os valores-alvo no conjunto de treinamento tenham sido positivos, especialmente porque você mencionou que isso acontece mais frequentemente quando você aumenta o número de árvores.fonte