ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ | ОБЪЯСНИМОСТЬ | НАУКА ДАННЫХ

Как интерпретировать любой прогноз машинного обучения

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

Local Interpretable Model-agnostic Explanations (LIME) — это проект Python, разработанный Ribeiro et al. [1] для интерпретации прогнозов любой модели контролируемого машинного обучения (ML).

Большинство алгоритмов машинного обучения — это черные ящики; мы не можем правильно понять, как они выполняют конкретное предсказание. Это огромный недостаток машинного обучения, и по мере того, как искусственный интеллект (ИИ) становится все более и более распространенным, важность понимания «почему?» постоянно возрастает.

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

Понимание основ машинного обучения

Прежде чем мы сможем понять и по-настоящему оценить удивительные возможности LIME, мы должны сначала понять основную интуицию машинного обучения.

Любую контролируемую проблему можно свести к двум основным характеристикам: 𝒙 (наши особенности) и 𝑦 (наша целевая цель). Мы хотим построить модель ƒ(𝒙), чтобы генерировать прогноз 𝑦’ всякий раз, когда мы предоставляем некоторую выборку 𝒙’.

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

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

Понимание типов объяснимости модели

Существует два основных типа объяснимости модели:

1. Общие пояснения

Учитывая модель ƒ, глобальные объяснения генерируются с использованием всего набора обучающих данных. Глобальные объяснения показывают общую важность функции для модели. Для каждой функции общие пояснения обычно отвечают на вопрос: «Насколько важна была эта функция для ƒ в целом?»

2. Местные пояснения

Местные объяснения основаны непосредственно на единичном наблюдении. Используя локальные объяснения, мы пытаемся понять, почему ƒ сгенерировал именно этот прогноз для этой конкретной выборки. Для любой конкретной выборки локальные объяснения обычно отвечают на вопрос: "Какие особенности больше всего повлияли на этот конкретный прогноз?"

В оставшейся части этого поста мы сосредоточимся на местных объяснениях и обсудим их.

Интуиция LIME

LIME пытается аппроксимировать функцию отображения модели ƒ(𝒙) путем выборки экземпляров (называемых входным возмущением). С точки зрения непрофессионала, LIME генерирует набор синтетических сэмплов 𝒙’, которые тесно связаны с исходным экземпляром 𝒙. Затем LIME передает 𝒙’ исходной модели ƒ и записывает соответствующий прогноз. Этот процесс позволяет LIME определить, как различные входные колебания влияют на ƒ. В конце процесса для данной выборки 𝒙 LIME сможет аппроксимировать прогноз ƒ, определив индивидуальное влияние каждого признака. Таким образом, LIME может объяснить конкретный прогноз, понимая, какие функции внесли наибольший вклад в прогноз.

В итоге

  • Образцы экземпляров LIME 𝒙’
  • LIME использует 𝒙’ для генерации набора прогнозов 𝑦’ с использованием ƒ(𝒙)
  • LIME сравнивает близость прогноза с исходным прогнозом и взвешивает их.
  • LIME использует веса, чтобы определить, какие функции больше всего влияют на этот индивидуальный прогноз.

Погружение глубже

Как упоминалось ранее, вся идея LIME заключается в попытке интерпретировать ƒ(𝒙). LIME достигает этого с помощью суррогатных моделей. Суррогатная модель g — это любая модель, которая используется для интерпретации результатов другого алгоритма прогнозирования. Как правило, g будет гораздо более простой и более интерпретируемой моделью (например, деревом решений или линейной моделью). Мы можем формально определить набор суррогатных моделей как G, так что g ∈G.

Но как LIME выбирает, какой g использовать для интерпретации исходной модели?

LIME учитывает два основных решающих фактора:

*ВНИМАНИЕ: поступают умно звучащие слова*

  1. Локальная достоверность, обозначаемая L(f, g, π) — также называемая функцией точности
  2. Сложность, обозначаемая Ω(g)

Что такое местная верность?

У нас есть две части:

  • Местный

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

  • Верность

Подразумевается, что это мера того, насколько точно выбранный нами g может следовать исходной модели ƒ. Чем ближе предсказания g к предсказаниям ƒ, тем более точным считается g относительно ƒ. Мы называем «близость» двух предсказаний близостью, которая математически определяется как π.

Просто, верно?

Что такое Сложность?

Объяснить 2+2 5-летнему ребенку проще, чем объяснить ∫ tan(𝒙). Почему? Потому что «функция сопоставления», стоящая за 2+2, намного проще, чем функция интегрирования.

Основная мотивация g - интерпретировать ƒ. Следовательно, g должно быть интерпретируемым. Чем проще g, тем более интерпретируемым оно становится.

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

LIME пытается свести к минимуму сложность и максимально повысить достоверность.

Функция достоверности L(f, g, π) может быть определена любой функцией потерь. LIME использует функцию расстояния квадратичных потерь. Функция потерь также меняется в зависимости от типа интерпретируемой модели (для классификатора изображений потребуется функция потерь, отличная от табличной).

Это в основном суть проекта LIME. Это еще не все, поэтому, если вам понравилась эта статья, я настоятельно рекомендую прочитать [1].

Теперь давайте запачкаем руки некоторыми примерами Python!

Рабочий пример LIME на Python

Прежде всего, нам нужно установить LIME с помощью pip. Вы можете найти исходный код LIME в [2].

pip install lime

Мы будем использовать набор данных iris, предоставленный нам Scikit-learn [3], в качестве примера для демонстрации использования пакетов.

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

# imports
import numpy as np
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

Мы также можем импортировать LIME следующим образом:

from lime.lime_tabular import LimeTabularExplainer

Наша задача имеет контролируемую табличную структуру. Поэтому нам нужно импортировать LimeTabularExplainer. Кроме того, при работе с LIME, вероятно, было бы неплохо установить случайное начальное число NumPy. LIME использует NumPy для своей серверной части; следовательно, установка случайного начального числа на число по нашему выбору гарантирует, что мы сможем получить повторяемые эксперименты. Мы можем установить случайное начальное число, используя:

np.random.seed(1)

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

Мы извлекаем наш набор данных из Scikit-learn, разделяем его и обучаем нашу модель следующим образом:

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

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

Запустив этот последний фрагмент кода для трех разных прогнозов, мы получим:

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

Например, в первом прогнозе модель предсказала, что образец будет Versicolor с достоверностью 99%. 24% этой оценки было связано с тем, что длина лепестка была больше 1,58 см, а еще 14% влияния были добавлены из-за того, что ширина лепестка была больше 0,3 см.

Заключение

И это действительно так! Прелесть этого пакета в том, что он строго следует «шаблону кода», который мы только что рассмотрели. Даже при объяснении классификаторов изображений или текста. Единственная другая часть — импортировать необходимый объяснитель (в нашем случае мы использовали LimeTabularExplainer, потому что хотели интерпретировать табличные данные).

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

LIME — это удивительное введение в мир объяснимого ИИ. И LIME, и домен постоянно растут и совершенствуются, поэтому сейчас самое подходящее время, чтобы начать включать XAI в конвейеры моделирования данных.

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



Рекомендации

[1] Рибейро, М.Т., Сингх, С. и Гестрин, К., 2016 г., август. — Почему я должен тебе доверять? Объяснение предсказаний любого классификатора. В Материалы 22-й международной конференции ACM SIGKDD по открытию знаний и интеллектуальному анализу данных (стр. 1135–1144).

[2] https://github.com/marcotcr/lime

[3] https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html

Хочешь угостить меня кофе?



Хотите связаться?

Я хотел бы услышать ваши мысли по теме, или что-либо AI действительно. Напишите мне по адресу [email protected], если вы хотите связаться с нами.

ЛинкединТвиттер