📜  使用 LIME 的可解释 AI(XAI)简介(1)

📅  最后修改于: 2023-12-03 15:22:13.845000             🧑  作者: Mango

使用 LIME 的可解释 AI(XAI)简介

在过去的几年中,深度学习和其他机器学习技术在解决各种问题上取得了重大进展。然而,这些模型的复杂性往往使得它们难以理解和解释。

这就是为什么许多机器学习研究人员和数据科学家正在寻找一种称为可解释 AI(XAI)的方法来帮助解释和解释这些复杂的黑盒子机器学习模型的原因。

LIME 是一种用于可解释 AI 的工具,可以帮助机器学习研究人员和数据科学家更好地理解和调试他们的模型。

是什么

LIME 指的是“局部识别模型可解释性”,是一种旨在从整体模型中准确解释单个预测的算法。在 LIME 中,该模型将权重转移到数据附近的许多相似实例上,该实例是与目标数据相似的样本。

如何工作

LIME 算法通过以下步骤将复杂的机器学习模型解释为可解释的方式:

  1. 选择目标实例并生成相似的样本。
  2. 对样本进行预处理和表示为特征向量。
  3. 训练局部线性模型以近似复杂的模型行为,并在其上解释预测。
  4. 基于局部模型权重为特征属性分配重要性。
  5. 根据权重解释模型预测。

例如,如果我们想知道模型如何预测一张图片中的狗是否真的是一只狗。我们可以选择这张图片并使用 LIME 来生成相似的样本。然后,我们使用局部线性模型来近似神经网络,从而了解模型对图片中的哪些区域做出了决策。

LIME 将透明的逻辑回归模型用于每个局部模型。

怎么用

LIME是一个Python包,可以使用pip安装。

!pip install lime

我们来看一个简单的例子,使用LIME解释Keras模型的图像分类预测。

import skimage
from skimage import io, transform

import numpy as np
import keras
import lime
import lime.lime_image
import matplotlib.pyplot as plt

# download the images
!mkdir images
!wget -O images/dog.jpg https://d17fnq9dkz9hgj.cloudfront.net/breed-uploads/english-setter-dog-detail.jpg

# load the model
model = keras.applications.mobilenet_v2.MobileNetV2(weights='imagenet')

# load the image
img = io.imread('images/dog.jpg')
img = transform.resize(img, (224,224))
plt.imshow(img)

# preprocess the image
x = keras.applications.mobilenet_v2.preprocess_input(np.array([img]))

# predict the class
preds = model.predict(x)
decoded_preds = keras.applications.mobilenet_v2.decode_predictions(preds)[0]
print(decoded_preds)

# convert the image to a 2D array
img2d = np.reshape(img, (224*224*3))

# explain the predictions
explainer = lime.lime_image.LimeImageExplainer()
explanation = explainer.explain_instance(img, model.predict, top_labels=5, hide_color=0, num_samples=250)

# plot the explanations
fig, axs = plt.subplots(1,6,figsize=(12,5))
for i in range(3):
  axs[i].imshow(explanation.segments)
  axs[i].set_title('segment {}'.format(i))

  # get mask for segments
  mask1, mask = explanation.get_image_and_mask(explanation.top_labels[i], positive_only=True, num_features=5, hide_rest=False)
  axs[i+3].imshow(mask1)
  axs[i+3].imshow(mask, alpha=0.5)
  axs[i+3].set_title('class {}'.format(i+1))
总结

LIME 算法是一种用于可解释 AI 的工具,可以帮助深度学习和其他机器学习模型更好地理解和调试。它通过选择相似的样本并使用局部模型将模型解释为可解释的方式。虽然 LIME 也有一些限制和缺点,但它是解释深度学习行为的一种有用方法,可用于许多场景和应用。