Код: Выделить всё
y_rank = pd.Series(y).rank(method="average")
y_rank = (y_rank - 1) / (len(y_rank) - 1)
Однако во время обучения я часто вижу:
Код: Выделить всё
\[LightGBM\] \[Warning\] No further splits with positive gain, best gain: -inf
Вопросы:
- Каковы наиболее распространенные причины наилучшего выигрыша: -inf / «нет положительного выигрыша» в этой настройке (целевой рейтинг в [0,1])?
- Какие параметры мне следует настроить аккуратно, чтобы дерево можно было разделить без необходимости сильного переобучения?
- Есть ли рекомендуемая цель/подход в LightGBM, когда окончательным показателем является Спирмен (например, регрессия по рангам по сравнению с целями ранжирования)?
Код: Выделить всё
from lightgbm import LGBMRegressor
import lightgbm as lgb
model = LGBMRegressor(
objective="regression",
n_estimators=4000,
learning_rate=0.03,
num_leaves=127,
min_child_samples=20,
min_split_gain=0.0,
subsample=0.9,
subsample_freq=1,
colsample_bytree=0.9,
reg_alpha=0.0,
reg_lambda=1.0,
random_state=42,
n_jobs=-1,
force_col_wise=True,
)
model.fit(
X_tr, y_tr,
eval_set=[(X_va, y_va)],
eval_metric="rmse",
callbacks=[lgb.early_stopping(stopping_rounds=300, verbose=False)]
)
- — это float32/
Код: Выделить всё
X_tr(без меток времени и объектов)Код: Выделить всё
float64Только - Отсутствующие значения вычисляются по медиане
- не равно нулю в целом и для каждого сгиба.
Код: Выделить всё
y_rank.std()
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/798 ... h-positive
Мобильная версия