程序代码
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import lime
import lime.lime_tabular
import webbrowser
import os
# 加载数据集
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = data.target
# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 创建LIME解释器
explainer = lime.lime_tabular.LimeTabularExplainer(X_train.values, feature_names=X.columns.tolist(), class_names=data.target_names, discretize_continuous=True)
# 选择一个目标样本
i = 0
sample = X_test.values[i]
# 生成解释
exp = explainer.explain_instance(sample, model.predict_proba, num_features=4)
# 打印解释结果
print(exp.as_list())
# 将解释结果保存为HTML文件
html_path = 'lime_explanation.html'
with open(html_path, 'w', encoding='utf-8') as f:
f.write(exp.as_html())
# 使用默认浏览器打开HTML文件
webbrowser.open('file://' + os.path.realpath(html_path))
这幅图是使用LIME对一个模型预测结果的解释。让我们逐部分解读这幅图:
Prediction probabilities(预测概率):
setosa
:0.00versicolor
:0.99virginica
:0.01
这里展示了模型预测不同类别的概率。在这个例子中,模型认为该样本属于
versicolor
的概率为0.99,非常高,而属于setosa
和virginica
的概率分别是0.00和0.01。NOT versicolor 和 versicolor:
- 这些部分展示了影响模型预测的特征及其贡献度。
NOT versicolor 部分展示了哪些特征值让模型倾向于不预测为
versicolor
。在这里:sepal width (cm)
: 当sepal width
为2.80时,对模型预测不是versicolor
有微弱的贡献。
versicolor 部分展示了哪些特征值让模型倾向于预测为
versicolor
。在这里:petal length (cm) < 4.25
: 当petal length
小于4.25时,这对预测为versicolor
有较大的贡献(0.22)。sepal width (cm) < 2.75
: 当sepal width
小于2.75时,这对预测为versicolor
也有贡献(0.17)。sepal length (cm) > 5.75
: 当sepal length
大于5.75时,这对预测为versicolor
有微小的贡献(0.01)。
Feature 和 Value:
- 这一部分列出了当前样本的特征值。
petal length (cm)
: 4.70petal width (cm)
: 1.20sepal width (cm)
: 2.80sepal length (cm)
: 6.10
解释总结:
- 模型预测该样本属于
versicolor
的概率为0.99。 - 主要推动这个预测的特征是
petal length
和sepal width
,具体来说:petal length
小于4.25时显著推动了预测为versicolor
。sepal width
小于2.75时也推动了预测为versicolor
。- 样本的实际特征值显示
petal length
为4.70,petal width
为1.20,sepal width
为2.80,和sepal length
为6.10。
这幅图形象地展示了模型是如何通过特征值的不同组合来做出预测的,并且说明了每个特征值在这个特定预测中的作用和贡献。