На каком этапе выбираются случайные признаки в случайном лесу: на каждом разбиении или для всего дерева?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
В случайном лесу случайные признаки выбираются не один раз на всё дерево, а заново на каждом разбиении узла. Это и даёт разнообразие между деревьями, снижая корреляцию и риск переобучения. Обычно говорят, что на каждом сплите модель рассматривает только случайное подмножество признаков.
Определение:
Случайный лес строит много деревьев решений на разных подвыборках данных. При каждом разбиении узла дерево не перебирает все признаки, а проверяет только случайно выбранный набор признаков. Среди них выбирается лучший сплит по целевой метрике.
Пример использования:
Например, в задаче скоринга клиента на каждом узле дерева модель может оценивать не все поля анкеты, а только случайные 5–10 признаков из общего набора. На следующем узле набор признаков будет уже другим.
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(
n_estimators=200,
max_features="sqrt", # случайное подмножество признаков на каждом разбиении
random_state=42
)
Пояснение кода:
Код показывает настройку случайного леса в scikit-learn. Параметр max_features="sqrt" означает, что на каждом разбиении будет рассматриваться случайное подмножество признаков размером примерно как квадратный корень от общего числа признаков. Это не выбор признаков на всё дерево, а именно на каждый узел при поиске лучшего сплита.
Ключевые моменты:
- Случайные признаки выбираются на каждом разбиении узла, а не один раз для всего дерева.
- На каждом сплите рассматривается случайное подмножество признаков.
- Это снижает корреляцию между деревьями и повышает устойчивость ансамбля.
- Если бы признаки фиксировались на всё дерево, разнообразие деревьев было бы меньше.
- Обычно вместе со случайными признаками используют и bootstrap-выборку объектов.