Как я могу увеличить количество деревьев в scikit узнать «S GradientBoostingRegressor
, я получаю более негативные прогнозы, несмотря на то, нет отрицательных значений в моем обучении или тестирования набора. У меня есть около 10 функций, большинство из которых являются двоичными.
Вот некоторые параметры, которые я настраивал:
- количество деревьев / итераций;
- глубина обучения;
- и скорость обучения.
Процент отрицательных значений, по-видимому, максимально около 2%. Глубина обучения 1 (пни), казалось, имела самый большой% отрицательных значений. Этот процент также, казалось, увеличился с большим количеством деревьев и меньшей скоростью обучения. Набор данных от одного из соревнований детской игровой площадки.
Мой код что-то вроде:
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
источник
источник
Ответы:
В целом регрессионные модели (любые) могут вести себя произвольно за пределами области, охватываемой обучающими выборками. В частности, они могут предполагать линейность моделируемой функции, поэтому, если вы, например, обучите регрессионную модель с точками:
разумно построить модель
f(x) = x/10-1
, котораяx<10
возвращает отрицательные значения.То же самое относится «между» вашими точками данных, всегда возможно, что из-за предполагаемого набора функций (которые могут быть смоделированы определенным методом) вы получите значения «из ваших обучающих выборок».
Вы можете подумать об этом по-другому - «что такого особенного в отрицательных значениях?», Почему вы находите наличие отрицательных значений странным (если оно не предусмотрено в обучающем наборе), в то время как вас не пугает существование, скажем, допустимого. .. значение 2131,23? Если не разрабатывать таким образом, ни одна модель не будет относиться к отрицательным значениям «иначе», чем к положительным. Это просто естественный элемент реальных ценностей, который может быть достигнут как любая другая ценность.
источник
Помните, что
GradientBoostingRegressor
(при условии функции потери квадрата ошибок) последовательно подгоняет деревья регрессии к остаткам предыдущего этапа. Теперь, если дерево на этапе i прогнозирует значение, большее, чем целевая переменная для конкретного обучающего примера, остаток этапа i для этого примера будет отрицательным, и поэтому дерево регрессии на этапе i + 1 столкнется с отрицательными целевыми значениями. (которые являются остатками от стадии i). Поскольку алгоритм повышения складывает все эти деревья, чтобы сделать окончательный прогноз, я считаю, что это может объяснить, почему вы можете получить отрицательные прогнозы, даже если все целевые значения в обучающем наборе были положительными, особенно если вы упомянули, что это происходит чаще часто, когда вы увеличиваете количество деревьев.источник