Ядро SHAP - это метод, не зависящий от модели, для аппроксимации значений SHAP с использованием идей из значений LIME и Shapley. Это моя вторая статья о SHAP. Обратитесь к моему предыдущему посту здесь для теоретического введения в SHAP.

Что такое ЛАЙМ?

Локальные интерпретируемые независимые от модели объяснения (LIME) - это метод объяснения предсказаний модели машинного обучения черного ящика путем построения ряда интерпретируемых локальных суррогатных моделей (например, линейной регрессии). Суррогатные модели обучаются предсказаниям базовой модели черного ящика. Рецепт обучения местных суррогатных моделей:

  • Выберите интересующий экземпляр xᵢ, для которого вы хотите получить объяснение предсказания модели черного ящика.
  • Создайте новый набор данных, изменив значения признаков xᵢ. Мы не используем фактические значения характеристик xᵢ для суррогатных моделей, но упрощенная двоичная версия (zᵢ) строится следующим образом: Если x∈Rᴾ является исходным представлением xᵢ, упрощенная двоичная версия (называемая интерпретируемым представлением²) - это zᵢ ∈ {0, 1} ᴾ. Например, если xᵢ = (x₁, x₂, x₃), соответствующее интерпретируемое представление zᵢ задается как zᵢ = (z₁, z₂, z₃), где каждый из z₁, z₂ и z₃ может принимать значения 0 или 1.
  • Обратите внимание на предсказания модели черного ящика для каждой возмущенной выборки zᵢ. Прогнозы получены путем отображения zᵢ обратно в исходное представление Rᴾ следующим образом: '1' в zᵢ отображается на фактическое значение признака, а '0' отображается на соответствующее неинформативное значение в соответствии с типом набора данных. . Обратитесь к разделу Понимание того, как LIME объясняет прогнозы и Знакомство с известью, чтобы понять, как обрабатываются наборы данных в виде таблиц, текста и изображений. Функция SHAP KernelExplainer () (объясненная ниже) заменяет 0 в упрощенном представлении zᵢ на случайное значение выборки для соответствующей функции из заданного набора фоновых данных. Таким образом, независимые переменные для локальной суррогатной модели представляют собой набор единиц и нулей, а зависимая переменная - это полученный прогноз. Однако этот процесс вычисления вкладов функций делает дополнительные предположения о независимости функций и линейности модели, по крайней мере, локально в районе близости xᵢ.
  • Взвесьте новые образцы в зависимости от их близости к интересующему экземпляру (xᵢ).
  • Обучите интерпретируемую модель (например, линейную регрессию, лассо, дерево решений и т. Д.) На этом новом наборе данных.
  • Объясните предсказание модели черного ящика, интерпретируя локальную модель (также называемую моделью объяснения).

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

SHAP ядра: линейные значения LIME + Shapley

В статье SHAP3 авторы показывают, что с моделью взвешенной линейной регрессии в качестве локальной суррогатной модели и подходящего весового ядра коэффициенты регрессии суррогатной модели LIME оценивают значения SHAP. Ядро Шепли, которое восстанавливает значения SHAP, определяется следующим образом:

Где M - количество функций & | z ’| - количество отличных от нуля функций в упрощенном вводе z ’.

Мы рассмотрим пример набора данных iris, чтобы понять работу KernelExplainer. Мы будем использовать Google Colab для запуска нашего кода. Файл кода загружен сюда: Kernel_SHAP.ipynb

Мы будем использовать SHAP KernelExplainer для объяснения модели SVM.

Аргументы функции KernelExplainer ():

  • модель: Модель, которую предстоит объяснить. Выходные данные модели могут быть вектором размера n_samples или матрицей размера [n_samples x n_output] (для модели классификации).
  • data: Фоновый набор данных для создания набора возмущенных данных, необходимого для обучения суррогатных моделей. Мы имитируем «отсутствующие» («0 в z»), заменяя элемент значениями, которые он принимает в фоновом наборе данных. Итак, если набор фоновых данных представляет собой простой образец всех нулей, то мы могли бы аппроксимировать отсутствующую функцию, установив ее на ноль. Для небольших задач этот фоновый набор данных может представлять собой весь обучающий набор, но для более крупных задач рассмотрите возможность использования одного ссылочного значения или функции kmeans для суммирования набора данных.
  • link: функция для подключения значений вкладов функций к выходным данным модели. Для модели классификации мы обычно объясняем логит предсказанной вероятности как сумму вкладов признаков. Следовательно, если выходом «модели» (первый аргумент) является вероятность, мы устанавливаем link = «logit», чтобы получить вклад функции в форме logit.

Затем мы вычисляем значения SHAP, как показано ниже:

Аргументы функции объяснитель.shap_values ​​():

  • X: Набор данных для объяснения выходных данных модели.
  • nsamples: количество выборок, которые нужно нарисовать для построения суррогатной модели для объяснения каждого прогноза.
  • l1_reg: регуляризация l1, используемая для выбора функций для объяснения предсказания модели. Возможные значения: «num_features (‹int›)» - выбирает фиксированное количество функций для объяснения прогноза модели; «Aic» / «bic» - использует правила AIC / BIC для регуляризации; ‹Float› -Устанавливает альфа-параметр для sklearn.linear_model.lasso; «Auto» - использует AIC, когда перечислено менее 20% возможного пространства выборки, в противном случае регуляризация не используется.

Для проблем классификации объяснитель.shap_values ​​() возвращает список размером n_classes (количество классов). Для модели бинарной классификации n_classes = 2 (отрицательный и положительный класс). Каждый объект этого списка представляет собой массив размером [n_samples, n_features] и соответствует значениям SHAP для соответствующего класса. Для регрессионных моделей мы получаем единый набор значений формы размером [n_samples, n_features]. Здесь у нас есть проблема классификации 3 классов, следовательно, мы получаем список длиной 3.

Объяснение одного прогноза

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

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

Объяснение прогнозов для нескольких образцов

Если мы возьмем приведенный выше график для любого одного класса для каждого образца, повернем их на 90 градусов и сложим бок о бок, мы сможем объяснить прогнозы для нескольких образцов на одном графике (обратите внимание, что образцы упорядочены по сходству):

Сводные графики SHAP
shap.summary_plot () может отображать средние значения shap для каждого класса, если ему предоставлен список значений shap (вывод объяснителя.shap_values ​​() для задачи классификации) как показано ниже:

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

Если предоставляется один набор значений SHAP (значения shap для одного класса для проблемы классификации или значения shap для проблемы регрессии), shap.summary_plot () создает диаграмму разброса плотности значений SHAP для каждой функции, чтобы определить степень воздействия каждая функция имеет на выходе модели. Функции сортируются по сумме величин значений SHAP для всех выборок.

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

Графики зависимости SHAP

Графики зависимости SHAP показывают эффекты взаимодействия.

Результат Versicolor отображает взаимосвязь между длиной лепестка (см) и шириной лепестка (см).

Найдите загруженный файл кода: Kernel_SHAP.ipynb.

Ссылка на другие статьи из этой серии:

SHAP. Часть 1: Введение в SHAP

ФОРМА ЧАСТЬ 3: ФОРМА ДЕРЕВА

Ссылки:

  1. Интерпретируемое машинное обучение - Руководство по объяснению моделей черного ящика.
  2. «Почему я должен тебе доверять?»: Объяснение прогнозов любого классификатора. arXiv: 1602.04938
  3. SHAP: единый подход к интерпретации прогнозов модели. arXiv: 1705.07874
  4. Https://towardsdatascience.com/understanding-how-lime-explains-predictions-d404e5d1829c
  5. Https://cran.r-project.org/web/packages/lime/vignettes/Understanding_lime.html