Как интерпретировать внутреннюю работу деревьев решений и случайных лесов?

машинное обучение искусственный интеллект GitHub NumPy
Случайные леса переживают бум в последние несколько лет. Это нелинейная древовидная модель, которая дает точные результаты. Однако рабочий процесс случайного леса в основном находится в состоянии черного ящика, которое часто трудно интерпретировать и полностью понять. Недавно на веб-сайте Pivotal Engineering Journal была опубликована статья, в которой дается углубленная интерпретация основ случайных лесов. Эта статья начинается с дерева решений модуля построения случайного леса и знакомит с рабочим процессом случайного леса с помощью ярких диаграмм, которые могут помочь читателям получить более полное представление о методе работы случайного леса. Эта статья основана на проекте GitHub Андо Саабаса. Кроме того, вы можете найти код, используемый для создания различных диаграмм, в этой статье на GitHub.

Как работают деревья решений

Дерево решений можно рассматривать как совокупность правил "если-то", то есть правило строится из каждого пути от корневого узла дерева решений до конечного узла. Характеристики внутренних узлов на пути соответствуют условия правила, а класс листового узла соответствует заключению правила. Следовательно, дерево решений можно рассматривать как состоящее из условия если (внутренний узел) и соответствующего правила тогда (ребро), когда условие выполняется.

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

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

Рисунок 1: Итеративный процесс дерева решений


Вклад деревьев решений

Возьмите набор данных морского ушка (archive.ICS.UCI.credits/beauty/datasets…) Например. Мы предскажем количество колец на раковине морского ушка на основе таких переменных, как вес раковины, длина, диаметр и т. д. Для демонстрации мы построим очень мелкое дерево решений. Мы можем получить это дерево, ограничив максимальный уровень дерева до 3.



Рисунок 2: Прогнозирование путей дерева решений для разного количества циклов

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

Например, если мы возьмем морское ушко с весом раковины 0,02 и длиной 0,220, оно приземлится на крайний левый листовой узел с предсказанным количеством колец 4,4731. Вклад веса снаряда в прогнозируемое количество колец:

(7.587 - 9.958) + (5.701 - 7.587) = -4.257

Вклад длины:

(4.473 - 5.701) = -1.228

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

Мы можем получить эти вклады, запустив следующий код.

from treeinterpreter import treeinterpreter as ti dt_reg_pred, dt_reg_bias, dt_reg_contrib = ti.predict(dt_reg, X_test)

где переменная dt_reg — это цель классификатора sklearn, а X_test — это массив данных Pandas DataFrame или numpy, содержащий функции, которые мы хотим прогнозировать и вносить. Его вспомогательная переменная dt_reg_contrib представляет собой двумерный массив numpy (n_obs, n_features), где n_obs — количество наблюдений, а n_features — количество признаков.

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

Рисунок 3: Пример графика вклада (дерево решений)


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

Рисунок 4: Диаграмма вклада (дерево решений), нарисованная диаграммой скрипки для выборки наблюдения, основная концепция и использование диаграммы скрипки будут прикреплены в конце статьи.

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

Рисунок 5: Вклад и вес оболочки (дерево решений)

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

Рисунок 6: Вклад и вес без скорлупы (дерево решений)


Расширение до случайного леса

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

Рисунок 7: График вклада для одного наблюдения с использованием графика скрипки (случайный лес)

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

Рисунок 8: Вклад в зависимости от веса оболочки (случайный лес)

Точно так же мы можем наблюдать сложные немонотонные тренды. Вклад диаметра снижается около 0,45 и достигает пика около 0,3 и 0,6. Кроме того, соотношение между диаметром и числом колец в основном увеличивается.

Рисунок 9: Вклад против диаметра (случайный лес)


Классификация

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

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

Рисунок 10: Путь дерева решений для полиномиальной классификации

Каждый узел имеет 3 значения — соответствующие пропорции самок, самцов и молодых особей в этом подмножестве. Морское ушко с весом органа 0,1 и весом раковины 0,1 принадлежит самому левому листовому узлу (вероятности 0,082, 0,171 и 0,747). Здесь применяется та же логика вклада, которая применяется к деревьям регрессии.

Если это конкретное морское ушко является подростком, вклад веса органа составляет:

(0.59 - 0.315) = 0.275

Вклад веса снаряда:

(0.747 - 0.59) = 0.157

Мы можем нарисовать график вклада для каждой категории. Ниже мы представляем график вклада для категории личинок.

Рисунок 11: График вклада для одного наблюдения за личинками с использованием графика скрипки (дерево решений для нескольких классов)

Как и раньше, мы также можем построить график вклада в зависимости от функций для каждого класса. Вклад веса раковины в то, что морское ушко является самкой, увеличивается с увеличением веса раковины, в то время как вклад в то, что морское ушко является молодым, уменьшается с увеличением веса раковины. У самцов вклад массы раковины сначала увеличивается, а затем уменьшается после того, как масса раковины превышает 0,5.


Рисунок 12: Вклад в зависимости от веса оболочки на класс (случайный лес)


Эпилог

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

Прикрепленная фигурка скрипки

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

Приведенный выше набор данных показывает, что:

  • Минимальное значение равно 5
  • Максимальное значение равно 10
  • В среднем 8
  • Нижний квартиль равен 7, первый квартиль (Q1), который равен 25-му процентилю всех значений в выборке, отсортированных от наименьшего к наибольшему.
  • Медиана составляет 8,5, второй квартиль (Q2), равный 50-му процентилю всех значений в выборке, отсортированных от наименьшего к наибольшему.
  • Верхний квартиль равен 9, третий квартиль (Q3) равен 75-му процентилю всех значений в выборке, отсортированных от наименьшего к наибольшему.
  • Межквартильный диапазон равен 2 (т.е. ΔQ=Q3-Q1).

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


Сюжет скрипки обобщает статистику, представленную коробчатой ​​диаграммой:

  • Белые точки выше представляют медиану
  • Серые прямоугольники представляют межквартильный диапазон между Q3 и Q1.
  • Серая линия представляет собой 95% доверительный интервал.

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

Оригинальный адрес:engineering.pivotal.IO/post/inter P…


из основного

Сборник "Сердце машины"

Участие: Панда