Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ml-from-scratch

Классические алгоритмы машинного обучения, реализованные с нуля на NumPy и сравненные по качеству с промышленными библиотеками. Репозиторий создан для того, чтобы показать, почему стандартные реализации работают именно таким образом.

Содержание

boosting/ — Классификатор градиентного бустинга

  • логистическая функция потерь с аналитическими градиентом и гессианом, оптимальный размер шага (gamma) определяется с помощью line search
  • бутстреп Бернулли и байесовский бутстреп (параметр bagging_temperature, как в CatBoost)
  • метод случайных подпространств (RSM) — случайный выбор признаков для каждого дерева
  • ранняя остановка обучения (early stopping) на валидационной выборке с использованием use_best_model
  • кодирование категориальных признаков средним значением целевой переменной (mean-target encoding) со сглаживанием
  • сохранение истории обучения и вычисление важности признаков

Сравнение с LightGBM (одинаковые параметры: 300 деревьев, глубина 4, скорость обучения 0.1, subsample=0.8, feature_fraction=0.8, ранняя остановка; метрика ROC-AUC на отложенной тестовой выборке; см. examples/benchmark_boosting.py):

Набор данных BoostingClassifier LightGBM Разница
breast_cancer (n=569) 0.9725 0.9870 1.45 п.п.
synthetic (n=20 000) 0.9665 0.9730 0.65 п.п.

Качество модели отличается от LightGBM на 0.7–1.5 процентных пункта по ROC-AUC. Основная оставшаяся разница обусловлена использованием в LightGBM поиска разбиений по гистограммам и роста деревьев по листьям (leaf-wise growth)

from boosting import BoostingClassifier

model = BoostingClassifier(
    n_estimators=300, learning_rate=0.1,
    base_model_params={"max_depth": 4},
    bootstrap_type="Bernoulli", subsample=0.8, rsm=0.8,
    early_stopping_rounds=30, eval_metric="val_roc_auc",
)
model.fit(X_train, y_train, eval_set=(X_val, y_val), use_best_model=True)
proba = model.predict_proba(X_test)

About

Classic ML algorithms from scratch in NumPy, benchmarked against LightGBM

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages