Min samples split (Случайный лес)
Материал из Documentation.
min_samples_split — один из ключевых гиперпараметров Случайного леса, контролирующих сложность и глубину каждого отдельного дерева решений в ансамбле. Он играет важную роль в предотвращении переобучения.
min_samples_split определяет минимальное количество образцов (экземпляров данных), которое должно быть в узле, чтобы он мог быть разделён (расщеплён). Если в узле меньше образцов, чем указано в min_samples_split, этот узел не будет разделён дальше и станет листовым узлом (терминальным узлом) дерева.
По умолчанию min_samples_split равен 2. Это означает, что узел должен содержать как минимум 2 образца, чтобы быть разделенным. Если в узле всего 1 образец, он автоматически становится листом.
[править] Влияние на модель
min_samples_split напрямую влияет на компромисс между смещением (bias) и дисперсией (variance) модели, а также на её вычислительную эффективность.
Высокое значение min_samples_split (например, 10, 20, 50 или больше):
- Эффект на отдельные деревья: Деревья будут более мелкие и менее сложные. Они перестанут делиться раньше, так как для дальнейших разделений потребуется больше образцов в узле.
- Высокое смещение (Bias): Мелкие деревья менее способны улавливать сложные и тонкие зависимости в данных. Они делают более общие разделения, что может привести к недообучению, если истинная зависимость сложна.
- Низкая дисперсия (Variance) для отдельных деревьев: Так как разделения происходят только при наличии достаточного количества образцов, эти разделения становятся более надежными и менее чувствительными к шуму или выбросам в данных. Это делает отдельные деревья более стабильными.
- Вычислительные затраты:
- Время обучения: Значительно сокращается, так как деревья растут не так глубоко и имеют меньше узлов.
- Использование памяти: Уменьшается.
- Влияние на Случайный Лес: Если min_samples_split слишком высок, отдельные деревья становятся слишком «общими» и имеют высокое смещение. Даже ансамбль из таких деревьев может привести к недообучению всей модели, поскольку он не сможет компенсировать недостаточную способность отдельных деревьев к обучению.
Низкое значение min_samples_split (например, 2, 3, 4 — близко к дефолту):
- Эффект на отдельные деревья: Деревья могут расти очень глубоко и быть очень сложными. Они будут продолжать делиться до тех пор, пока в узлах не останется очень мало образцов (вплоть до 2).
- Низкое смещение (Bias): Глубокие деревья могут улавливать очень сложные и детализированные паттерны в данных, включая тонкие взаимодействия между признаками. Это позволяет им лучше «обучаться» обучающим данным, что приводит к низкому смещению.
- Высокая дисперсия (Variance) для отдельных деревьев: Каждое глубокое дерево склонно к переобучению на обучающих данных. Оно может запоминать шум, случайные флуктуации или выбросы, которые не являются частью истинной underlying зависимости, особенно когда разделения происходят на очень малом количестве образцов.
- Вычислительные затраты:
- Время обучения: Увеличивается, поскольку деревьям приходится делать больше разделений и обрабатывать больше узлов.
- Использование памяти: Увеличивается.
- Влияние на Случайный Лес: Это часто желаемое поведение для Случайного леса. Несмотря на то, что отдельные глубокие деревья могут переобучаться, ансамблевая природа Случайного леса (с помощью бэггинга и случайного подмножества признаков) помогает усреднить эти переобученные предсказания, значительно снижая общую дисперсию ансамбля. Таким образом, Случайный лес с такими параметрами часто показывает хорошую производительность, так как он сохраняет низкое смещение, одновременно эффективно управляя дисперсией.
[править] Взаимодействие с другими гиперпараметрами
min_samples_split не работает изолированно и взаимодействует с другими параметрами, которые также влияют на рост деревьев.
max_depth: Если max_depth очень мал (например, 3-5), то он может ограничить рост дерева раньше, чем min_samples_split вступит в силу. Если max_depth большой или None, то min_samples_split становится одним из основных контроллеров глубины.
min_samples_leaf: Этот параметр определяет минимальное количество образцов, которое должно быть в листовом узле. min_samples_split относится к внутренним узлам, которые ещё могут быть разделены. Если min_samples_leaf установлен, например, в 5, то min_samples_split должен быть как минимум в два раза больше min_samples_leaf (поскольку разделение создает два новых узла, каждый из которых должен удовлетворять min_samples_leaf). Фактически, если min_samples_leaf = k, то min_samples_split должен быть как минимум 2k.
min_impurity_decrease: Минимальное уменьшение неопределённости (impurity) для выполнения разделения. Если потенциальное разделение не приводит к достаточному уменьшению неопределенности, оно не будет выполнено, независимо от min_samples_split.
n_estimators: Большее количество деревьев в лесу (больше n_estimators) обычно позволяет использовать более сложные отдельные деревья (то есть меньший min_samples_split), поскольку ансамбль будет иметь больше «мнений» для агрегации и усреднения дисперсии.
[править] Тюнинг
Начните с дефолта: Для большинства задач min_samples_split=2 является хорошей отправной точкой для Случайного леса. Эта низкая граница позволяет деревьям быть достаточно глубокими и сложными, что обычно хорошо работает благодаря способности Случайного леса справляться с переобучением отдельных деревьев.
Используйте кросс-валидацию: Всегда оценивайте производительность модели на отложенном (валидационном) наборе данных или с помощью кросс-валидации, чтобы избежать переобучения на обучающих данных.
Когда увеличивать min_samples_split:
- Переобучение: Если модель демонстрирует сильное переобучение (очень высокая точность на обучающих данных, но значительно более низкая на валидационных/тестовых данных), увеличение min_samples_split может помочь «успокоить» отдельные деревья, сделав их менее склонными к запоминанию шума.
- Шумные данные: На очень зашумленных наборах данных, где полная глубина может привести к чрезмерному запоминанию шума, увеличение min_samples_split может быть полезным.
- Вычислительные ограничения: Если время обучения слишком велико или модель потребляет слишком много памяти, увеличение min_samples_split (вместе с уменьшением max_depth) является одним из самых эффективных способов снизить потребление ресурсов.
Диапазон для поиска: При использовании методов поиска гиперпараметров (например, GridSearchCV или RandomizedSearchCV), типичный диапазон для min_samples_split может быть: [2, 5, 10, 20, 50, 100] (или даже проценты от размера выборки для очень больших датасетов, например, 0.01 для 1 % от общего числа образцов).
Помните о min_samples_leaf: Если вы настраиваете min_samples_split, рассмотрите также настройку min_samples_leaf, так как они взаимосвязаны.