Skip to content

IMNJL/ml_course

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Системы с применением искусственного интеллекта


https://ml-course.github.io/master/labs/lab-1a-linear-models-for-regression/

1. Постановка задачи

Цель работы: исследовать эффективность ансамблевых методов на основе деревьев решений для задачи многоклассовой классификации типов лесного покрова на наборе данных Covertype.

В работе рассматриваются:

  • Random Forest
  • Gradient Boosting

Что требуется проанализировать:

  • влияние гиперпараметров (глубина деревьев, число деревьев, скорость обучения);
  • различия метрик Accuracy и Balanced Accuracy;
  • важность признаков и отбор признаков;
  • матрицу ошибок (Confusion Matrix);
  • бинарный классификатор для классов 1 и 2, ROC-кривую и AUC;
  • калибровку вероятностей (Platt Scaling / sigmoid calibration).

Данные: Covertype, 7 классов, 55 признаков.


2. Ход работы и подробные пояснения

2.1 Подготовка данных

Для ускорения перебора гиперпараметров использовалась подвыборка 50% исходных данных. Это допустимый компромисс между скоростью и стабильностью оценки при условии, что разбиение сохраняет распределение классов.

Для валидации применялась 3-кратная кросс-валидация (3-fold CV) с фиксированным random_state=1 для воспроизводимости результатов.


2.2 Exercise 1. Random Forest

Что делалось:

  • реализована функция evaluate_RF;
  • обучались модели с max_depth: 2, 8, 32, 64;
  • для каждого значения глубины варьировалось число деревьев n_estimators в диапазоне 1..30;
  • метрика: Accuracy (средняя по 3-fold CV).

Как работает Random Forest:

  • Каждое дерево обучается на бутстрап-выборке (случайная выборка объектов с возвращением).
  • В каждом узле дерево рассматривает случайное подмножество признаков.
  • Предсказание леса получается голосованием деревьев.

Почему это работает:

  • Отдельное дерево обычно имеет низкое смещение, но высокую дисперсию (легко переобучается).
  • Усреднение многих слабо коррелированных деревьев снижает дисперсию и улучшает обобщающую способность.

Интерпретация результата:

  • Увеличение n_estimators обычно улучшает качество, но эффект насыщается.
  • Глубина деревьев влияет сильнее, чем число деревьев.
  • Неглубокие деревья (например, depth=2,8) недообучаются, поэтому ансамбль из них ограничен по качеству.
  • Depth около 32 дает лучший компромисс, а дальнейшее увеличение до 64 уже почти не помогает.

Практический вывод:

  • Для Random Forest сначала настраивают max_depth и только потом доводят n_estimators до зоны насыщения.

2.3 Exercise 2. Accuracy vs Balanced Accuracy

Что делалось:

  • построен аналогичный график, но с метрикой Balanced Accuracy;
  • использована оптимальная глубина из Exercise 1 (max_depth=32).

Зачем нужна Balanced Accuracy:

  • Accuracy считает общую долю верных ответов.
  • Если классы несбалансированы, модель может получить высокую Accuracy, хорошо угадывая только частые классы.
  • Balanced Accuracy усредняет recall по каждому классу и потому лучше показывает качество на редких классах.

Интерпретация:

  • Если Balanced Accuracy заметно ниже Accuracy, модель игнорирует часть классов.
  • В данной работе различие умеренное, значит сильной деградации на редких классах нет, но контроль этой метрики обязателен.

2.4 Exercise 3. Feature Importance

Что делалось:

  • извлечены важности признаков из настроенного Random Forest;
  • построен рейтинг признаков.

Как интерпретировать важность в Random Forest:

  • Важность отражает, насколько признак уменьшает неоднородность в узлах деревьев (например, по Gini impurity), усредненно по лесу.
  • Более важный признак чаще участвует в полезных разбиениях, дающих прирост качества.

Ограничения:

  • Важности могут быть смещены в пользу признаков с большим числом уникальных значений.
  • Коррелирующие признаки делят вклад между собой, поэтому каждый по отдельности может выглядеть менее важным.

2.5 Exercise 4. Feature Selection

Что делалось:

  • повторно обучен настроенный Random Forest;
  • использованы только топ-10 признаков из предыдущего шага;
  • измерены Balanced Accuracy и время обучения.

Результат и объяснение:

  • Качество стало очень близким к исходному, но немного хуже.
  • Время обучения изменилось несущественно.
  • Это типично для Random Forest: метод устойчив к шумовым признакам, поэтому удаление слабых признаков не всегда дает большой выигрыш.

Когда feature selection полезен сильнее:

  • при очень большом числе признаков;
  • при дорогом вычислении признаков;
  • для упрощения интерпретации модели.

2.6 Exercise 5. Confusion Matrix

Что делалось:

  • выполнено стратифицированное hold-out разбиение;
  • построена матрица ошибок для настроенного Random Forest.

Что такое Confusion Matrix и зачем она нужна:

  • Строки обычно соответствуют истинным классам, столбцы - предсказанным.
  • Диагональ показывает верные классификации.
  • Внедиагональные элементы показывают, какие классы модель путает между собой.

Почему это важно:

  • Одна общая метрика (например, Accuracy) не показывает структуру ошибок.
  • Матрица ошибок позволяет увидеть конкретные пары трудноразличимых классов.
  • На ее основе можно проектировать улучшения: доработка признаков, отдельные модели для сложных пар, изменение порогов или переобучение с весами классов.

Наблюдение:

  • Наиболее частая путаница возникает между классами 1 и 2 (Spruce/Fir и Lodgepole Pine).

2.7 Exercise 6. Бинарная модель для классов 1 и 2

Что делалось:

  • выделены только объекты двух классов (1 и 2);
  • обучен отдельный Random Forest для бинарной задачи;
  • построена ROC-кривая.

Зачем отдельная бинарная модель:

  • Если в многоклассовой задаче есть «конфликтная» пара классов, узкоспециализированная модель для этой пары часто дает более точный разбор границы.

Что показывает ROC-кривая:

  • По оси X: FPR (доля ложноположительных),
  • По оси Y: TPR (доля истинноположительных).
  • Кривая показывает качество при всех порогах вероятности.
  • ROC AUC - интегральная оценка: чем ближе к 1, тем лучше разделение классов.

2.8 Exercise 7. Калибровка вероятностей

Что делалось:

  • для бинарной модели построена calibration curve;
  • выполнена калибровка методом Platt Scaling (sigmoid) через CalibratedClassifierCV;
  • сравнен ROC AUC до и после калибровки.

Почему калибровка нужна:

  • Модель может хорошо ранжировать объекты (высокий ROC AUC), но выдавать плохо интерпретируемые вероятности.
  • Пример: объекты с прогнозом 0.8 должны быть положительными примерно в 80% случаев. Если это не так, вероятности некалиброваны.

Как работает Platt Scaling:

  • Берется «сырое» значение уверенности модели.
  • Обучается логистическая функция, преобразующая это значение в более реалистичную вероятность.
  • Важно: калибровка должна выполняться на данных, не использованных для обучения базовой модели.

Полученный результат:

  • ROC AUC uncalibrated: 0.973
  • ROC AUC calibrated: 0.9684

Комментарий:

  • Небольшое снижение ROC AUC допустимо. Цель калибровки - не максимизировать AUC, а улучшить качество вероятностной интерпретации.

2.9 Exercise 8. Gradient Boosting

Что делалось:

  • исследовано влияние n_estimators и learning_rate для Gradient Boosting;
  • построены кривые зависимости качества от числа деревьев при разных скоростях обучения.

Как работает Gradient Boosting (интуитивно и по шагам):

  1. Строится первое слабое дерево, дающее грубый прогноз.
  2. Вычисляется ошибка текущего ансамбля.
  3. Новое дерево обучается исправлять именно эту ошибку (градиент функции потерь).
  4. Прогноз обновляется с шагом learning_rate.
  5. Процесс повторяется n_estimators раз.

Ключевая идея:

  • В отличие от Random Forest, где деревья строятся независимо и параллельно, в бустинге деревья строятся последовательно и каждое следующее зависит от предыдущих.

Роль learning_rate:

  • Малый learning_rate: более осторожные шаги, обычно нужно больше деревьев, но риск переобучения ниже.
  • Большой learning_rate: быстрые, но грубые шаги; модель может «перескакивать» минимум и деградировать.

Наблюдения в работе:

  • Градиентный бустинг обучается медленнее Random Forest.
  • При небольшом числе итераций бустинг уступает по качеству.
  • learning_rate=1 дает нестабильное поведение: после начального роста качество ухудшается.

Лучшие найденные параметры:

  • learning_rate=0.1
  • n_estimators=400
  • balanced_accuracy=0.4778

Важно про интерпретацию 0.4778:

  • Для задачи с 7 классами случайное угадывание дает около 0.1429 по balanced accuracy при равномерном поведении.
  • Значение 0.4778 значительно выше случайного уровня, но заметно хуже, чем у настроенного Random Forest.
  • Следовательно, формулировка «ниже случайного угадывания» неверна; корректнее: «результат недостаточно высок и уступает Random Forest».

3. Итоговые выводы

  1. Random Forest оказался наиболее надежным и сильным методом для данной задачи. Главный гиперпараметр - глубина деревьев; оптимальная зона около 32.
  2. Увеличение числа деревьев улучшает качество до насыщения, но эффект слабее, чем от настройки глубины.
  3. Balanced Accuracy обязательна для контроля качества по всем классам, особенно при возможном дисбалансе.
  4. Feature importance позволила выделить ключевые признаки, а обучение на топ-10 признаках показало лишь небольшую потерю качества.
  5. Confusion Matrix выявила главную проблемную пару классов (1 и 2), что обосновывает построение отдельной бинарной модели.
  6. Калибровка вероятностей улучшает интерпретируемость прогнозов, даже если ROC AUC слегка снижается.
  7. Gradient Boosting требует более аккуратной и дорогой настройки; в этой работе он не превзошел Random Forest.

Практическая рекомендация:

  • Для задач с большим числом признаков и сложной структурой классов сначала использовать Random Forest как сильный базовый ориентир, а бустинг применять после тщательной настройки и с достаточным вычислительным бюджетом.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors