Одна из самых полезных моделей, с которыми я столкнулся за короткое время работы специалистом по анализу данных, - это случайные леса. Вы спросите, что такое случайные леса? Они представляют собой метод ансамбля для моделей классификации и регрессии, который запускается путем компиляции нескольких деревьев решений при выборе режима классов в моделях классификации и среднего выходного значения в моделях регрессии. Что делает их такими замечательными, так это то, что они исправляют переоснащение одной модели дерева решений с помощью Bagging, также известного как Bootstrap Aggregating. Бэггинг - это когда модель многократно генерирует случайную выборку из ваших обучающих данных и помещает ее в дерево с заменой. Это означает, что каждое дерево, которое создается в случайном лесу с одним и тем же исходным источником данных, компилируется на случайно выбранных выборках этих данных, а конечные результаты являются совокупностью этих деревьев. Вы можете спросить, в чем разница между сложенными деревьями решений и случайными лесами. При каждом разбиении в нескольких деревьях решений случайный лес генерирует случайное подмножество функций, которые будут использоваться, в отличие от дерева решений с пакетами, которое также использует агрегирование Bootstrap, но использует те же функции для всех своих деревьев.

В Python есть две модели случайного леса: RandomForestClassifier () и RandomForestRegressor (). Оба взяты из библиотеки sklearn.ensemble. В этой статье речь пойдет о классификаторе.

Во-первых, чтобы облегчить себе жизнь, вам следует импортировать классификатор. Классификатор без каких-либо параметров и импорт библиотеки sklearn.ensemble выглядят просто так;

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier() 
#for later in your notebook it will be easier to simply refer to it as model or whatever name you deem appropriate

Хотя вы можете просто вставить это и подогнать свою модель к переменным X, y, используя .fit (X, y), классификатор будет работать намного лучше, если вы будете использовать его множество различных параметров. Важно знать, что большинство, если не все, параметры имеют настройки по умолчанию, но ваша модель, скорее всего, выиграет от их настройки в той или иной форме.

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

Parameters:
n_estimators,
criterion,
max_features,
max_depth,
min_samples_split,
min_samples_leaf,
min_weight_leaf,
min_weight_fraction_leaf,
max_leaf_nodes,
min_impurity_decrease,
bootstrap,
oob_score,
n_jobs,
random_state,
verbose,
warm_start,
class_weight

ПАРАМЕТРЫ:

n_estimators - (целое) - по умолчанию = 10

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

критерий - (строка) -Default = ”gini

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

max_features - (integer, float, string или None) -Default = ”auto

Максимальное количество функций, учитываемых при поиске наилучшего разделения. Это улучшает производительность модели, поскольку каждый узел каждого дерева теперь рассматривает большее количество вариантов. Еще раз, при увеличении количества функций ваша скорость обработки уменьшится. max_features - один из наиболее сложных параметров, поскольку он зависит от типа, который вы его задали.

Если это целое число, вам следует тщательно подумать о max_features в каждом разбиении, потому что это число в основном зависит от вас. Если это float, это процент (max_features x количество функций).

Если для него установлено значение auto или sqrt, то оно устанавливается равным квадратному корню из числа функций (sqrt (n_features)).

Если вы установите для него значение log2, оно будет равно log2 (n_features).

Ни один из них, как вы могли ожидать, просто не использует количество функций или n_features.

max_depth - (целое число или нет) - По умолчанию = Нет

Это определяет, насколько глубоко вы хотите сделать деревья. Вы хотите разделить один, два раза или выберите «Нет», пока все листья не станут чистыми или не будут содержать меньше образцов, чем min_samples_split. Я предлагаю установить max_depth, потому что, если вы позволите ему опуститься до пуристического варианта, вы рискуете переобучить свою модель.

min_samples_split- (integer, float) -Default = 2

Устанавливает минимальное количество выборок, которые должны присутствовать из ваших данных, чтобы произошло разделение. Если это число с плавающей запятой, то оно рассчитывается с помощью min_samples_split * n_samples.

min_samples_leaf- (integer, float) -Default = 1

Этот параметр помогает определить минимальный размер конечного узла каждого дерева решений. Конечный узел также известен как лист.

min_weight_fraction_leaf - (float) -Default = 0

Это очень похоже на min_samples_leaf, но вместо этого использует часть общего количества наблюдений.

max_leaf_nodes - (integer, None) -Default = None

Этот параметр увеличивает дерево методом наилучшего первого, что приводит к относительному уменьшению примесей.

min_impurity_decrease - (float) -Default = 0

«Узел будет разделен, если это разделение вызовет уменьшение примеси, большее или равное этому значению.

Уравнение взвешенного уменьшения примесей выглядит следующим образом:

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)

где N - общее количество выборок, N_t - количество выборок в текущем узле, N_t_L - количество выборок в левом потомке, а N_t_R - количество выборок в правом потомке.

N, N_t, N_t_R и N_t_L все относятся к взвешенной сумме, если sample_weight передается ». - Из библиотеки SkLearn

Примечание. Библиотека sklearn использовала это вместо разделения min_impurity.

bootstrap - (логическое) -Default = True

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

oob_score - (логическое) -Default = False

Это метод перекрестной проверки, который очень похож на метод проверки без исключения, когда обобщенная оценочная производительность модели обучается на n-1 выборках данных. Однако oob_score намного быстрее, потому что он захватывает все наблюдения, используемые в деревьях, и определяет максимальную оценку для каждой базы наблюдений на деревьях, которые не использовали это наблюдение для обучения.

n_jobs - (целое) -Default = 1

Это позволяет компьютеру узнать, сколько процессоров ему разрешено использовать. Значение по умолчанию 1 означает, что он может использовать только один процессор. Если вы используете -1, это означает, что нет ограничений на то, сколько вычислительной мощности может использовать код. Установка вашего n_jobs на -1 часто приводит к более быстрой обработке.

random_state - (integer, RandomState instance, None) -Default = None

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

подробный - (integer) -Default = 0

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

теплый_старт - (логическое) -Default = False

При значении "Ложь" каждый раз подгоняется под новый лес, в отличие от значения "Истина", которое добавляет оценщики и повторно использует решение предыдущего подбора. В основном он используется, когда вы используете рекурсивный выбор функций. Это означает, что когда вы отбрасываете некоторые функции, важность других функций возрастает, и чтобы «оценить» деревья, их нужно использовать повторно. Он часто используется с обратным исключением в регрессионных моделях и не часто используется в моделях классификации.

вес_класса - (словарь, список словарей, «сбалансированный»)

Ни один, также известный как «сбалансированная подвыборка», взвешивает классы. Если вы что-то не поместите здесь, будет считаться, что все классы имеют вес 1, но если у вас есть проблема с несколькими выходами, список словарей используется в качестве столбцов y.

Когда используется «сбалансированный» режим, значения y автоматически корректируют свои «веса, обратно пропорциональные частотам классов» в данных, используя «n_samples / (n_classes * np.bincount (y))»

Сбалансированная подвыборка и сбалансированный режим одинаковы, за исключением того, что сбалансированная подвыборка использовала загрузочные веса для каждого дерева.

Надеюсь, вы нашли эту статью полезной. Для дальнейших описаний, примеров и дальнейших шагов, которые вы можете предпринять для настройки своего классификатора случайного леса, я предлагаю щелкнуть эту ссылку для описания библиотеки SkLearn. Если вы хотите увидеть параметры модели RandomForest Regressor, нажмите здесь.