Добро пожаловать в пост о пяти лучших библиотеках интерпретации моделей машинного обучения Python!

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

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



Цель этого поста - выделить некоторые из самых популярных библиотек в данной области на основе нашей метрики и дать четкий обзор, который, надеюсь, упростит вам понимание на высоком уровне! Если вы хотите опробовать их, мы можем порекомендовать для этого наш контейнер ml-workspace, поскольку он предустановлен со всеми библиотеками в списке, кроме последней!

Вы спрашиваете себя, как мы отбирали библиотеки? Что ж, мы взяли их из нашего списка Лучшее из машинного обучения с Python. Все библиотеки в этом списке лучших автоматически получают рейтинг качества на основе различных показателей, таких как звезды GitHub, активность кода, использованная лицензия и другие факторы. Подробности читайте в репо best-of-generator.

Итак, это достаточно введение, вот список наших 5 лучших библиотек интерпретируемости.

1. SHAP

Первой библиотекой в ​​нашем списке является SHAP, и это правильно с впечатляющим количеством звезд в 11,4 тыс. На GitHub и активным обслуживанием: только в декабре было совершено более 200 коммитов. SHAP, который является аббревиатурой от SHapley Additive exPlanations, представляет собой независимую от модели объясняющую библиотеку, которая следует подходу теории игр для присвоения значений важности функциям. Оригинальную статью 2017 года, появившуюся в НИПС, вы можете найти на arxiv.

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

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

может быть сгенерирован с помощью этого фрагмента кода

import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
shap.force_plot(
    explainer.expected_value, shap_values[1, :], X.iloc[1, :]
)

где model - модель, которую нужно объяснить, а X - входные данные. Поскольку SHAP не зависит от модели, он работает со всеми типами моделей.

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

Страница GitHub содержит хорошие примеры и записные книжки, так что начать с нее будет довольно легко!

«2. Лайм"

Библиотека Lime, сокращение от Локальные интерпретируемые объяснения, не зависящие от модели, следует вторым в нашем списке с впечатляющим количеством 8,3 тыс. Звезд, последней активностью 21 день назад и некоторыми хорошими учебниками и определениями API. ».

Lime может объяснить классификаторы табличных данных и текстовые классификаторы независимо от реальной модели. Как авторы SHAP, авторы Lime приехали из Вашингтонского университета - хорошо, Вашингтон имеет 2 библиотеки в топ-5 👏 - и вы можете найти их оригинальную статью 2016 года также на arxiv.

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

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

В отличие от SHAP, не похоже, что Lime предлагает API для удобной генерации глобального объяснения, или, по крайней мере, мы это упустили. Однако, создав несколько объяснений для разных примеров, вы сможете понять поведение исходной модели.

3. ELI5

Библиотека Python ELI5 предоставляет унифицированный API для отладки и объяснения классификаторов машинного обучения. Термин ELI5 можно найти в городском словаре и на сленге означает Объясни, как я 5. Для моделей черного ящика он предлагает реализацию алгоритма Лайма для текстов. Кроме того, он предлагает поддержку scikit-learn, XGBoost, LightGBM, CatBoost, lightning, sklearn-crfsuite и Keras. Ознакомьтесь с их документацией, чтобы найти примеры и справочник по API.

На следующем изображении показано, как объяснение ELI5 выглядит для классификации текста, где показано, какие слова способствуют определенному классу.

Он генерируется этим кодом

import eli5
eli5.show_weights(clf, vec=vec, top=10, target_names=target_names)

где clf - это, например, sklearn LogisticRegressionCV, vec - векторизатор, например, sklearn CountVectorizer, который преобразует тексты в матрицу подсчета токенов, top - количество функций, отображаемых для каждого класса на изображении, и target_names сообщает eli5 фактические метки классификации на основе входных данных.

4. pyLDAvis

Как уже следует из названия, pyLDAvis фокусируется на тематических моделях LDA. Его можно использовать для интерактивной визуализации их в Jupyter Notebooks. Документация содержит примеры видео, а также обзорную записную книжку, хотя по сравнению с другими библиотеками API можно было бы задокументировать немного лучше. Оригинальный документ от 2014 года объясняет методологию и может быть найден здесь.

В документации указано, что эта библиотека не зависит от того, как была обучена модель, так как вам нужны только разделение по теме, распределение по теме и базовый корпус. информация. Для sklearn, gensim и graphlab есть даже удобные методы. Например, следующий код, использующий вспомогательную функцию gensim

import pyLDAvis.gensim 
pyLDAvis.gensim.prepare(lda, corpus, dictionary)

выведет интерактивную графику, которая отображается на следующем изображении. Параметры lda - это модель gensim lda, corpus - это рыночный корпус gensim matrix, а dictionary - словарь gensim (полный пример см. В их документации. Вот и все!

В интерактивной визуализации вы можете нажимать на разные темы, видеть, какие слова к ним относятся, изменять весовой параметр и тому подобное!

5. InterpretML

InterpretML находится в альфа-версии, но уже вошел в пятерку лучших и находится в стадии активной разработки; даже один из наших Pull Requests on GitHub, которые мы создали во время написания этого поста, был объединен в течение 7 часов 🥳! Это библиотека от Microsoft, которая имеет две функции: во-первых, обучение интерпретируемым моделям стеклянного ящика и, во-вторых, объяснение моделей черного ящика. Их статью можно найти здесь. В разделе Поддерживаемые методы они упоминают методы, которые предоставляет библиотека, например Дерево решений и Объяснение ядра SHAP как модель стеклянного ящика или объяснитель черного ящика, соответственно. Как видите, в мире библиотек интерпретируемости используются одни и те же методы и библиотеки, на которые имеются перекрестные ссылки или они используются друг в друге.

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

from interpret.glassbox import ExplainableBoostingClassifier
from interpret import show
# train
ebm = ExplainableBoostingClassifier()
ebm.fit(X_train, y_train)
# global
ebm_global = ebm.explain_global()
show(ebm_global)
# local
ebm_local = ebm.explain_local(X_test, y_test)
show(ebm_local)

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

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

Мы надеемся, что вам понравилось читать, и вы узнали что-то о самых популярных библиотеках, которые позволяют интерпретировать и объяснять свои модели 💡

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

И, конечно же, мы очень рады любым отзывам! Оставьте комментарий или свяжитесь с нами через [email protected] или через Twitter @mltooling.

С из Берлина!