Создание интуиции для использования LIME для интерпретации моделей машинного обучения

Часть 1. Развитие интуиции

Часть 2. LIME для интерпретации изображений и текстовых моделей

LIMEозначает Lлокальные iинтерпретируемые mнезависимые от модели eобъяснения , который представляет собой метод объяснения моделей машинного обучения "черный ящик" с использованием локальных суррогатных моделей. Объяснение LIME: например, любой не зависит от модели.

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

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

В приведенном ниже примере красная и синяя области имеют очень нелинейную границу классификации, но для наблюдения КРАСНЫЙ ПЛЮС мы можем использовать простую линию регрессии, чтобы объяснить ее классификацию, и это общая идея LIME.

Демистификация LIME Intuition

Учитывая обученную модель f(x1, x2, x3, , , xd) с функциями d а набор обучающих данных — X, который представляет собой табличный набор данных.

Ниже приведены шаги запуска LIME для получения пояснения к экземпляру x.

Шаг 1.Создайте новый синтетический набор данныхZ’, Z’, имеющий ту же схему функций, что и набор данных для обучения модели X. Но для каждого наблюдения в Z' мы случайным образом устанавливаем значение каждого признака как 0 или 1, например, одно наблюдение в Z' может быть (x1=0, x2=1, x3=1, x4=0 , , , xd=1), значение признака, равное 0 или 1, устанавливается случайным образом.

Шаг 2. Сопоставление Z’ с Z. Сопоставление заключается в сопоставлении значения признака Z’ 1 или 0 со значениями, которые можно ввести в модель f. Правила сопоставления следующие:

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

б. Для числового признака 1 по-прежнему сопоставляется с соответствующим значением признака в экземпляре x, 0сопоставление — это выборка значения из Normal(0,1 ) и выполнение обратной операции (обратная стандартизация) центрирования среднего значения и масштабирования в соответствии со средним и стандартным значением соответствующего признака в обучающих данных X».

Шаг 3.Спрогнозируйте результат Z, используя обученную модель, результат равен f(Z)

Шаг 4.Рассчитайте вес каждого наблюдения в Z.

В формуле веса D — это расстояние между экземпляром x и наблюдениями в Z, δ — константа, которую мы может тюнинг.

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

Шаг 5. Теперь мы можем начать строить приведенную ниже линейную регрессию, независимая переменная регрессии — Z',целевая переменная — f (Z), которое является известным значением.

также LIME вводит приведенную ниже взвешенную ошибку наименьших квадратов в качестве функции потерь для разрешения регрессии g(z'), цель добавления веса состоит в том, что нам нужна регрессия g(z' )более точно предсказывает ближайшие соседи экземпляра x, чем удаленные соседи, поскольку мы фокусируемся на экземпляре x.

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

Шаг 6. Еще одна вещь, которую LIME предлагает для устранения регрессии g(z’ ), — это уменьшение количества функций. Один из предлагаемых способов — добавить регуляризацию LASSO(L1) к ​​функции потерь, начать с очень большого параметра регуляризации λ, который приводит все коэффициенты признаков к 0, а затем медленно уменьшать λ, пока коэффициенты Best-K признаков не равны 0, тогда мы будем использовать Best-K признаков для объяснения регрессии.

ИЗВЕСТЬ Пример

Во-первых, нам нужно установить библиотеку Python LIME с помощью следующей команды

pip install lime

Пример модели — обученный RandomForestRegressor, исходные данные — цены на жилье в Бостоне от Kaggle.

import numpy as np
import pandas as pd
import lime
import lime.lime_tabular
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn import metrics
boston = load_boston()
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=22)
model = RandomForestRegressor(n_estimators=1000)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
print('R-Squared:', metrics.r2_score(y_test, y_pred))
#RMSE: 3.959655514886183
#R-Squared: 0.8231724590161542

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

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

categorical_features = np.argwhere(
    np.array([len(set(boston.data[:,x])) for x in range(boston.data.shape[1])]) <= 10).flatten()

Также мы выбираем экземпляр из тестового набора и используем объяснитель LIME, чтобы объяснить прогноз экземпляра, выбранный экземпляр, как показано ниже.

X_test.iloc[10,:]

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

Пожалуйста, обратитесь к https://lime-ml.readthedocs.io/en/latest/lime.html#module-lime.lime_tabular для получения подробной информации о методе.

explainer = lime.lime_tabular.LimeTabularExplainer(
    train, 
    feature_names=boston.feature_names, 
    class_names=['price'], 
    categorical_features=categorical_features, 
    verbose=True, 
    mode='regression',
    discretize_continuous=False)
#Intercept 24.1171706493745
#Prediction_local [22.36560785]
#Right(Model Prediction): 19.744900000000076

Описание экземпляра

exp = explainer.explain_instance(
    X_test.iloc[10,:], 
    model.predict, 
    num_features=5)

exp.show_in_notebook(show_table=True)

exp.as_list()
# local surrogate regression coefficients
#[('LSTAT', -4.550192483817742),
# ('RM', 2.6441938803314087),
# ('DIS', -1.9802639380327312),
# ('TAX', -0.3144135103939565),
# ('PTRATIO', -0.2682944259385174)]

19,74 – это прогноз модели RandomForestRegressor, 22,37  – результат локального суррогатного регрессионного анализа, эти два значения близки (мы можем настроить вес и параметры объяснения, чтобы эти два прогноза были ближе). Таким образом, мы можем использовать локальные суррогатные коэффициенты регрессии, чтобы объяснить вклад каждой функции в выходные данные модели RandomForestRegressor в целевом экземпляре.

Резюме

Я надеюсь, что эта история поможет вам быстро развить интуицию в LIME, и основной вывод заключается в том, что LIME использует интерпретируемую суррогатную модель для локальной аппроксимации предсказания модели черного ящика на целевом экземпляре. И объясните прогноз целевого экземпляра с помощью суррогатной модели. В следующей статье мы рассмотрим, как LIME можно использовать для текстовых и графических данных Часть 2.

ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА

  1. Интерпретируемое машинное обучение: https://christophm.github.io/interpretable-ml-book/shap.html
  2. Почему я должен вам доверять?
    Объяснение предсказаний любого классификатора: https://arxiv.org/pdf/1602.04938.pdf
  3. Наука, стоящая за InterpretML: LIME https://www.youtube.com/watch?v=g2WtL45-PFQ&feature=emb_rel_end
  4. Интерпретируемое машинное обучение с использованием LIME Framework — Касия Кулма (доктор философии) https://www.youtube.com/watch?v=CY3t11vuuOM&t=888s
  5. Понимание того, как LIME объясняет прогнозы https://towardsdatascience.com/understanding-how-lime-explains-predictions-d404e5d1829c
  6. https://github.com/marcotcr/лайм
  7. https://lime-ml.readthedocs.io/en/latest/index.html