Интерпретируемость модели

Интерпретация моделей машинного обучения черного ящика с помощью LIME

Визуальное понимание LIME путем моделирования данных о раке молочной железы

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

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

Фактически, недавний опрос рентгенологов в Европе рисует реалистичную картину использования моделей черного ящика в радиологии. Опрос показывает, что только 55,4% врачей считают, что пациенты не будут принимать приложения, основанные исключительно на искусственном интеллекте, без наблюдения врача. [1]

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

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

Есть много решений, которые могут помочь в объяснении моделей черного ящика. Такие решения включают в себя значения Шепли, график частичной зависимости и агностические объяснения локальной интерпретируемой модели (LIME), которые популярны среди практиков машинного обучения. Сегодня я сосредоточусь на ЛАЙМЕ.

Согласно статье LIME Рибейро и др. [2], цель LIME состоит в том, чтобы идентифицировать интерпретируемую модель поверх интерпретируемого представления, которая локально соответствует классификатору. Другими словами, LIME может объяснить результат классификации одной точки. LIME также работает со всеми типами моделей, что делает его независимым от модели.

Интуитивное объяснение LIME: визуальный обзор

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

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

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

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

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

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

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

Набор данных по раку груди в Висконсине: понимание предикторов раковых клеток

Набор данных по раку груди в Висконсине [3], опубликованный UCI в 1992 г., содержит 699 точек данных. Каждая точка данных представляет собой образец клеток, который может быть злокачественным или доброкачественным. Каждому образцу также присваивается номер от 1 до 10 для следующих характеристик.

  • Толщина комка
  • Однородность размера ячеек
  • Однородность формы ячейки
  • Размер одной эпителиальной клетки
  • Митозы
  • Нормальные ядрышки
  • Блочный хроматин
  • Голые ядра
  • Маргинальная адгезия

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

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

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

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

Импорт, очистка и исследование данных

#Data Importing and Cleaning
import pandas as pd
df = pd.read_csv("/BreastCancerWisconsin.csv", 
                 dtype = 'float', header = 0)
df = df.dropna() #All rows with missing values are removed.
# The original data set labels benign and malignant cell using a value of 2 and 4 in the Class column. This code block formats it such that a benign cell is of class 0 and a malignant cell is of class 1.
def reformat(value):
    if value == 2: 
        return 0 #benign
    elif value == 4:
        return 1 #malignant
df['Class'] = df.apply(lambda row: reformat(row['Class']), axis = 'columns')

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

import seaborn as sns
sns.countplot(y='Class', data=df)

Визуализируя гистограммы каждой из характеристик, мы обнаруживаем, что большинство функций имеют режим 1 или 2, за исключением ClumpThickness и BlandChromatin, чьи распределения более равномерно распределены от 1 до 10. Это указывает на то, что ClumpThickness и BlandChromatin могут быть более слабыми предикторами класс.

from matplotlib import pyplot as plt
fig, axes = plt.subplots(4,3, figsize=(20,15))
for i in range(0,4):
    for j in range(0,3):
        axes[i,j].hist(df.iloc[:,1+i+j])
        axes[i,j].set_title(df.iloc[:,1+i+j].name)

Модельное обучение и тестирование

Затем набор данных разделяется на типичные наборы тестов для проверки поездов в соотношении 80% -10% -10%, и модель K-Nearest Neighbor строится с использованием Sklearn. После некоторой настройки гиперпараметров (не показано) выяснилось, что модель с k = 10 хорошо работает на этапе оценки - она ​​имеет показатель F1 0,9655. Блок кода показан ниже.

from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold

# Train-test split
X_traincv, X_test, y_traincv, y_test = train_test_split(data, target, test_size=0.1, random_state=42)

# K-Fold Validation
kf = KFold(n_splits=5, random_state=42, shuffle=True)
for train_index, test_index in kf.split(X_traincv):
    X_train, X_cv = X_traincv.iloc[train_index], X_traincv.iloc[test_index]
    y_train, y_cv = y_traincv.iloc[train_index], y_traincv.iloc[test_index]
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import f1_score,
# Train KNN Model
KNN = KNeighborsClassifier(k=10)
KNN.fit(X_train, y_train)
# Evaluate the KNN model
score =  f1_score(y_testset, y_pred, average="binary", pos_label = 4)
print ("{} => F1-Score is {}" .format(text, round(score,4)))

Описание модели с использованием LIME

Знаток Kaggle может сказать, что это отличный результат и что мы можем завершить проект на этом. Однако следует скептически относиться к решениям модели, даже если модель хорошо себя зарекомендовала. Таким образом, мы используем LIME, чтобы объяснить решение, принятое моделью KNN на этом наборе данных. Это подтверждает достоверность модели, проверяя, соответствуют ли принятые решения нашей интуиции.

import lime
import lime.lime_tabular
# Preparation for LIME
predict_fn_rf = lambda x: KNN.predict_proba(x).astype(float)
# Create a LIME Explainer
X = X_test.values
explainer = lime.lime_tabular.LimeTabularExplainer(X,feature_names =X_test.columns, class_names = ['benign','malignant'], kernel_width = 5)
# Choose the data point to be explained
chosen_index = X_test.index[j]
chosen_instance = X_test.loc[chosen_index].values
# Use the LIME explainer to explain the data point
exp = explainer.explain_instance(chosen_instance, predict_fn_rf, num_features = 10)
exp.show_in_notebook(show_all=False)

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

Объяснение того, почему образец считается злокачественным

Здесь у нас есть точка данных, которая на самом деле является злокачественной и, согласно прогнозам, является злокачественной. На левой панели мы видим, что модель KNN предсказала, что эта точка с вероятностью, близкой к 100%, будет злокачественной. В середине мы видим, что LIME может объяснить этот прогноз, используя каждую особенность интересующей точки данных в порядке важности. Согласно LIME,

  1. тот факт, что образец имеет значение ›6.0 для BareNuclei, делает его более злокачественным.
  2. так как образец имеет высокое маргинальное прилипание, он скорее будет злокачественным, чем доброкачественным.
  3. поскольку образец имеет толщину комка> 4, он более вероятно злокачественный.
  4. с другой стороны, тот факт, что образец имеет значение ≤1,00 для митозов, делает его более доброкачественным.

В целом, учитывая все особенности образца (на правой панели), предполагается, что образец является злокачественным.

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

Объяснение того, почему образец считается доброкачественным

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

  1. Этот образец имеет значение BareNuclei ≤ 1
  2. Этот образец имеет значение NormalNucleoli ≤ 1.
  3. Он также имеет ClumpThickness ≤1
  4. UniformityOfCellShape также ≤ 1

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

Объяснение того, почему примерный прогноз неясен

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

Заключение

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

Если вас интересует интерпретируемость машинного обучения, обязательно ознакомьтесь с моей статьей, в которой основное внимание уделяется использованию График частичной зависимости для объяснения модели черного ящика.

Не стесняйтесь обращаться ко мне через LinkedIn для получения любых отзывов. Спасибо за уделенное время!



использованная литература

[1] Кодари М., Мелаццини Л., Морозов С.П. и др., Влияние искусственного интеллекта на радиологию: исследование EuroAIM среди членов Европейского общества радиологов (2019) , Insights into Imaging

[2] М. Рибейро, С. Сингх и К. Гестрин, Почему я должен вам доверять? Объясняя предсказания любого классификатора »(2016), KDD

[3] Д-р Уильям Х. Вольберг, Висконсинская база данных рака груди (1991), Больницы Висконсинского университета, Мэдисон.