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

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

Важность функций Random Forest широко используется среди специалистов по данным, и весьма вероятно, что вы использовали ее раньше, но разве вы не замечали раньше, что ранжирование функций по их важности в некоторых случаях не соответствовало вашим знаниям в предметной области?

Важность функции необъективна

Scikit-learn опубликовал статью, объясняющую эту проблему, я не собираюсь повторять этот эксперимент, а скорее попытаюсь объяснить вам результаты и помочь вам уверенно понять, как рассчитывается важность функции.

В статье scikit-learn показано, что, добавив случайную функцию в существующий список функций, Random Forest оценил эту функцию как наиболее важную функцию.

Шокирует, правда?

Что ж, оказывается, что важность функции случайного леса смещена в сторону высоких количественных характеристик, а основные функции — это функции с большим количеством категорий (количество уникальных значений в этой функции).

Теперь пришло время пересмотреть все бизнес-решения, которые вы принимали ранее на основе этих метрик, но прежде чем сделать это, давайте разберемся, почему важность функции Random Forest предвзята.

Как работает случайный лес?

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

Если я собираюсь объяснить дерево решений, я бы объяснил его в три шага.

1- Выберите функцию

2- Выберите точку разделения

3- Повторить

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

сначала мы начали с некоторых 1 и 0 с цветами синего и красного, мы определили, что у нас есть две функции [цвет, число]

На первом уровне мы выбрали цветовой признак, определили точку разделения (красный или синий), а на втором уровне (итерация) мы выбрали числовой признак и определили точку разделения ( › 0 или ≤ 0), и по следуя этой процедуре, мы смогли идентифицировать каждое число по его цвету.

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

Примесь Джини

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

Примесь Джини — это способ определить, насколько чисто ваше ведро.

Итак, в нашем примере с ведром у нас есть два класса (бананы, яблоки), допустим, есть 4 банана |S1| и 3 яблока |S2|, так что всего у нас 7 предметов, то есть |S|.

Мы можем рассчитать примесь Джини ведра, применив приведенное выше уравнение следующим образом.

G(S) = 3/7 (1- 3/7) + 4/7 (1- 4/7) = 0.48

Итак, теперь мы знаем, что примесь Джини для ведра равна 0,48, но много это или мало?

Давайте посмотрим на график примесей Джини.

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

Примесь становится равной 0, когда в вашем ведре есть один класс предметов, например: только бананы.

Как дерево решений использует примесь Джини?

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

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

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

И мы говорим, что это разделение по этому признаку уменьшило примесь на х.

МДИ

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

Это кажется логичным, но почему этот способ расчета важности признаков смещен в сторону высоких количественных признаков?

Давайте посмотрим на следующий пример

В этом примере у нас есть две функции [x1, x2] и один выход [y], где функция x1 имеет 10 уникальных значений, функция x2 имеет 2 уникальных значения, а выход может быть либо 1, либо 0.

Если мы посчитаем примесь нашего текущего ведра без какого-либо разделения, мы получим 0,5, интересно, почему? У нас есть два класса 1 и 0, и в каждом классе по 5 предметов, поэтому мы получаем максимальную примесь Джини.

Если мы выберем функцию x2 и попытаемся определить точку разделения, мы можем заметить, что у нас есть только одна точка разделения, которая находится между 4 и 5.

и эта точка разделения разделяет наше ведро на два чистых ведра, каждое из которых содержит только 1 или 0.

Таким образом, примесь Джини этого разделения будет равна 0.

Теперь, если мы выберем функцию x1, будет много точек разделения, но лучшая точка разделения будет между 5 и 6, что даст нам примесь 0.

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

Вы заметили это?, если не волнуйтесь, просто следуйте за мной.

Что, если мы поменяем местами две единицы с двумя нулями, и мы получим следующее

Если мы вычислим примесь Джини для новых данных, мы заметим, что она не изменится, у нас все еще есть два класса, и каждый из них имеет одинаковое количество элементов, поэтому примесь Джини будет равна 0,5.

Теперь давайте выберем функцию x2 и попробуем найти лучшую точку разделения, к сожалению, у нас нет выбора, у нас есть только одна точка разделения между 4 и 5.

Давайте вычислим примесь Джини этого разделения

Левое поддерево :

P (класс = 1) = 2/5 = 0,4, P (класс = 0) = 3/5 = 0,6

G (левое поддерево) = 0,4 * (0,6) + 0,6 * (0,4) = 0,48

Правое поддерево:

P (класс = 1) = 3/5 = 0,6, P (класс = 0) = 2/5 = 0,4

G (левое поддерево) = 0,6 * (0,4) + 0,4 * (0,6) = 0,48

G(разделить) = 0,5 * 0,48 + 0,5 * 0,48 = 0,48

Таким образом, это разделение уменьшило примесь на 0,02.

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

Давайте посчитаем примесь Джини для этого разделения.

Левое поддерево :

Примесь Джини — это просто 0, она состоит только из 0, но чтобы доказать это, давайте проследим за вычислениями.

P (класс = 1) = 0/5 = 0, P (класс = 0) = 3/3 = 1

G (левое поддерево) = 0 * (1) + 1 * (0) = 0

Правое поддерево:

P (класс = 1) = 5/7 = 0,71, P (класс = 0) = 2/7 = 0,29

G (левое поддерево) = 0,71 * (0,29) + 0,29 * (0,71) = 0,41

G(разделить) = 3/10 * 0 + 7/10 * 0,41 = 0,29

Таким образом, функция x1 смогла уменьшить примесь с 0,5 до 0,29.

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

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