Часть I | Часть II | Часть III | Объяснимый искусственный интеллект - Часть IV

Интерпретируемое машинное обучение за 10 минут с RuleFit и Scikit Learn

Извлечение значимых комбинаций правил из обученной модели машинного обучения с помощью RuleFit | Объяснимый искусственный интеллект

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

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

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

Давайте быстро сравним прозрачные модели и модели черного ящика:

Быстрое сравнение прозрачных моделей и моделей черного ящика

Чем проще, тем хуже производительность

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

Менее стабильные прозрачные модели

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

Проще обычно означает исходные допущения

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

Более простой обычно означает отсутствие эффекта взаимодействия.

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

Что ж, есть модель, которая решает большинство из упомянутых выше проблем: RuleFit.

Давайте посмотрим, что такое алгоритм RuleFit:

Алгоритм RuleFit

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

Пример: ЕСЛИ количество комнат ›2 И возраст дома‹ 15, ТО 1 ИНАЧЕ 0 (ниже среднего)

Вот как работает алгоритм RuleFit:

Шаг I. Алгоритм обучает древовидную модель, предсказывающую цель, и использует ее для создания этих правил принятия решений (Результат: много правил, не все информативные);

Шаг II. Затем он обучает разреженную линейную модель, такую ​​как LASSO, чтобы выбрать лучшие из исходных и вновь созданных элементов.

Давайте посмотрим, как работает алгоритм RuleFit:

Набор данных о ценах на жилье в Бостоне

Набор данных о ценах на жилье в Бостоне - это относительно небольшой набор данных с 506 выборками и 13 независимыми переменными. Переменной отклика, естественно, является цена домов, и цель состоит в том, чтобы разработать модель со значимыми переменными, которая может предсказать дом с использованием заданных независимых переменных. Каждая запись в базе данных описывает пригород или город Бостона. Данные были получены из Бостонской стандартной столичной статистической области (SMSA) в 70-х годах. Атрибуты определены следующим образом:

  • ПРЕСТУПНОСТЬ: уровень преступности на душу населения по городам.
  • ZN: доля участков под жилую застройку площадью более 25 000 кв. футов.
  • ПРОМЫШЛЕННОСТЬ: доля акров, не относящихся к розничной торговле, на город.
  • CHAS: фиктивная переменная реки Чарльз (= 1, если участок граничит с рекой; 0 в противном случае)
  • NOX: концентрация оксидов азота (частей на 10 миллионов).
  • RM: среднее количество комнат в доме.
  • ВОЗРАСТ: доля занимаемых владельцами единиц жилья, построенных до 1940 года.
  • DIS: взвешенные расстояния до пяти бостонских центров занятости
  • RAD: индекс доступности радиальных магистралей.
  • НАЛОГ: полная ставка налога на имущество из расчета на 10 000 долларов США.
  • PTRATIO: соотношение учеников и учителей по городам
  • B: 1000 (Bk − 0,63) 2, где Bk - доля чернокожих по городам.
  • LSTAT: на% более низкий статус населения
  • MEDV: средняя стоимость домов, занимаемых владельцами, в 1000 долларов США.

Загрузим набор данных:

Загрузка набора данных

Мы можем легко загрузить набор данных Boston House Price с помощью scikit-learn. Следующий код, загрузите набор данных и создайте объект DataFrame pandas:

Вот head () DataFrame:

Также давайте посмотрим на цены на жилье с Plotly Express:

А вот гистограмма распределения цен на жилье:

Теперь, когда у нас есть подготовленные данные, мы можем построить и обучить модель:

Обучить случайный лесной регрессор

Перед применением модели RuleFit нам необходимо обучить модель на основе дерева, такую ​​как модель дерева решений, случайного леса или дерева градиентного бустинга. В этом уроке я собираюсь использовать RandomForestRegressor:

Вот краткое изложение нашей простой модели случайного леса:

RandomForestRegressor(bootstrap=True, ccp_alpha=0.0,   criterion='mse', max_depth=None, max_features='auto', max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0,                       min_impurity_split=None, min_samples_leaf=1,                       min_samples_split=2, min_weight_fraction_leaf=0.0,                       n_estimators=50, n_jobs=-1, oob_score=False,                       random_state=42, verbose=0, warm_start=False)

Оценить случайный лес

Обучение модели продлится пару секунд, и вот наши строки расчета RMSE:

и вывод:

1.2328287822419268

Обратите внимание, что мы никогда не разделяли набор данных на обучение и тестирование. Причина этого выбора - упростить руководство, поскольку в настоящий момент нас не беспокоит переоснащение.

Важность функций

Теперь, когда у нас есть обученная модель, мы можем ранжировать и визуализировать независимые переменные (то есть функции) с помощью функции feature_importances_() и Plotly Express модели случайного леса:

Вот выходной график:

Как вы можете легко определить, LSTAT и RM на сегодняшний день являются наиболее важными функциями, влияющими на цель (то есть цену дома). Теперь, когда у нас есть обученная модель, давайте создадим собственные правила для большей объяснимости и интерпретируемости.

Создание и обучение модели RuleFit

Сначала нам нужно установить rulefit библиотеку. Затем нам нужно скормить наш RandomForestRegressor модели RuleFit. Вы можете выбрать Gradient Boosting или Decision Tree независимо от приведенного выше кода. Приведенный ниже код устанавливает и импортирует rulefit, создает модель RuleFit с помощью RandomForestRegressor и обучает модель с использованием набора данных:

Вот краткое изложение модели:

RuleFit(Cs=None, cv=3, exp_rand_tree_size=True, lin_standardise=True, lin_trim_quantile=0.025, max_rules=2000, memory_par=0.01, model_type='rl', random_state=None, rfmode='regress', sample_fract='default', tree_generator=RandomForestRegressor(bootstrap=True, ccp_alpha=0.0, criterion='mse', max_depth=None, max_features='auto', max_leaf_nodes=6, max_samples=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimators=563, n_jobs=None, oob_score=False, random_state=562, verbose=0, warm_start=False), tree_size=4)

Обратите внимание, что это обучение займет немного больше времени (все же меньше минуты), поскольку модель RuleFit генерирует сотни комбинаций правил и тестирует их.

Теперь мы можем оценить нашу модель с помощью следующего кода:

Выход:

1.6828402423155089

До сих пор наши модели RandomForestRegressor и RuleFit работали точно с очень похожим кодом. Но на заднем плане наша модель RuleFit сгенерировала сотни потенциальных комбинаций правил.

Давайте посмотрим на эти правила:

Правила RuleFit

Чтобы получить правила, мы можем использовать функцию .get_rules () модели RuleFit. Затем мы можем отсортировать их по значению поддержки с помощью следующего кода:

Вот результат:

Давайте взглянем на названия наших столбцов и опишем их:

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

Чтобы получить лучший результат, мы должны

  • исключить существующие особенности;
  • исключить правила с коэффициентом 0,00, поскольку они не значимы;
  • отсортируйте их по их поддерживающей ценности; а также
  • удалите самые простые правила, чтобы увидеть более сложные правила (необязательно).

Вот строки, которые выполняют все эти задачи:

и вот результат, показывающий некоторые правила:

Как мы определили, LSTAT и RM были наиболее важными функциями. Поэтому неудивительно, что наиболее значимые комбинации правил также в большинстве своем содержат эти особенности. Первые правила выше работают как фиктивная переменная. IF LSTAT ≤ 15.62 and RM ≤ 6.84, THEN 1 ELSE 0. Как видите, второе правило очень похоже на первое. Следовательно, может иметь смысл объединить / исключить некоторые из похожих правил для более интерпретируемого набора правил. Следовательно, в идеале нам нужно применить некоторые методы НЛП, чтобы сгруппировать похожие правила и создать более компактную модель, которая бы охватывала все эффекты взаимодействия, что в конечном итоге помогло бы нам понять рабочий механизм нашей обученной модели.

Заключительные примечания

Алгоритм RuleFit - хорошее решение для понимания взаимосвязи между функциями. Алгоритм RuleFit основан на комбинации модели дерева и регрессора LASSO, и он может генерировать сотни правил-кандидатов, которые могут помочь нам лучше интерпретировать наши прогнозы. Однако для получения значимых результатов требуется дополнительная фильтрация и комбинирование.

Подпишитесь на список рассылки для получения дополнительной информации

Помимо моего последнего контента, я также делюсь с подписчиками своими блокнотами Google Colab, содержащими полные коды для каждой публикации, которую я опубликовал. Если вы хотите иметь доступ к кодам других моих обучающих сообщений в Google Colab и ранний доступ к моему последнему контенту, подумайте о подписке на список рассылки: ✉️

Подпишитесь сейчас

Если вас интересует глубокое обучение, также ознакомьтесь с руководством к моему контенту по искусственному интеллекту:



Если вы читаете эту статью, я уверен, что мы разделяем схожие интересы и работаем / будем работать в схожих отраслях. Итак, подключимся через Linkedin! Пожалуйста, не стесняйтесь отправить запрос на контакт! Орхан Г. Ялчин - Linkedin