概述
机器学习相对简单线性模型有更优异的效果,但是其复杂的原理让模型并不容易理解和解释。可解释的方法有很多众,大概可以分为全局解释和局部解释,以及与模型适配和与模型无关的方法,本文对一种局部的、与模型无关的方法Lime进行介绍,尝试从原理并结合python的Lime工具包进行梳理。
原理介绍
Lime(Local Interpretable Model-Agnostic Explanations)是使用训练的局部代理模型来对单个样本进行解释。假设对于需要解释的黑盒模型,取关注的实例样本,在其附近进行扰动生成新的样本点,并得到黑盒模型的预测值,使用新的数据集训练可解释的模型(如线性回归、决策树),得到对黑盒模型良好的局部近似。
实现步骤
- 如上图是一个非线性的复杂模型,蓝/粉背景的交界为决策函数;
- 选取关注的样本点,如图粗线的红色十字叉为关注的样本点X;
- 定义一个相似度计算方式,以及要选取的K个特征来解释;
- 在该样本点周围进行扰动采样(细线的红色十字叉),按照它们到X的距离赋予样本权重;
- 用原模型对这些样本进行预测,并训练一个线性模型(虚线)在X的附近对原模型近似。
这样就可以使用可解释性的模型对复杂模型进行局部解释。
目标函数
LIME会产生一个新的数据集(选定样本x周围进行扰动得到), 接着在这个新的数据集上,训练一个简单模型(可解释的模型), 通过以下目标函数衡量衡量两个模型之间的差异:
- f表示原始的模型, 即需要解释的模型;
- g表示简单模型, G是简单模型的一个集合, 如所有可能的线性模型;
- πx表示新数据集中的数据x'与原始数据 x的距离;
- Ω(g)表示模型g的复杂程度;
假设原始模型f为需要被解释的复杂模型,对实例x 的解释模型是模型g (例如线性回归模型),G 是可能的可解释模型的集,接近度πx 定义了实例x 附近进行采样的邻域大小(即对x附近进行扰动,扰动前后的样本距离)。我们希望可解释模型的复杂度Ω(g) 保持较低水平时,最小化损失L (例如均⽅误差) ,即解释模型g 与原始模型f 预测的接近程度。
样本相似度
在样本X附近进行扰动,对扰动前后的样本相似度进行定义,样本类型不同会有不同的定义(文本的话就是余弦相似性,图像的话就是L2范数距离)。相似度计算公式如下:
有了相似度的定义,便可以将原先的目标函数改写成如下的形式。其中f(z)就是扰动样本,在d维空间(原始特征)上的预测值,并把该预测值作为目标,g(z’)则是在d’维空间(可解释特征)上的预测值,然后以相似度作为权重,因此上述的目标函数便可以通过线性回归的方式进行优化。
代码实践
使用python的lime库进行实践,样本为信贷放款样本预测观察点后三期是否逾期。对单个样本进行lime的局部解释,类似于评分卡模型中输出原因码,比如预测这个样本为bad的概率大,那是哪些方面的原因导致的,是信贷历史记录较差,还是还款能力不足?用这种方法对机器学习的效果和解释性进行一个平衡。
import sklearn
import sklearn.datasets
import sklearn.ensemble
import numpy as np
import lime
import lime.lime_tabular
x = np.array(data[feats].fillna(-99999))
y = np.array(data['target'])
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state = 400)
# 训练XGBoost模型
model_xgb = xgb.XGBClassifier(
learning_rate =0.05,
n_estimators=50,
max_depth=3,
min_child_weight=1,
gamma=0.3,
subsample=0.8,
colsample_bytree=0.8,
objective= 'multi:softprob',
nthread=4,
scale_pos_weight=1,
num_class=2,
seed=27
).fit(X_train, y_train)
# 生成解释器
explainer = lime.lime_tabular.LimeTabularExplainer(X_train, feature_names=feats,
class_names=[0,1], discretize_continuous=True)
# 对局部点的解释
i = np.random.randint(0, X_test.shape[0])
exp = explainer.explain_instance(X_test[i], model_xgb.predict_proba, num_features=6)
# 显示详细信息图
exp.show_in_notebook(show_table=True, show_all=True)
# 显示权重图
exp.as_pyplot_figure()
首先训练xgboost模型,并选择需要解释的样本点进行解释,Prediction probabilities画图展示出对于样本的预测值,样本中每个变量的重要性权重,以及每个变量的取值,可以看到pre_max_overdue历史最大逾期期数的变量的特征重要性最大。
参考资料
https://christophm.github.io/interpretable-ml-bookchristophm.github.io Ribeiro, Marco Tulio, Sameer Singh, and Carlos Guestrin. “Why should I trust you?: Explaining the predictions of any classifier.” Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining. ACM (2016).www.kdd.org 加载中mathpretty.com最后
以上就是幸福高跟鞋为你收集整理的wikisql 数据集解释_机器学习可解释性Lime方法小结的全部内容,希望文章能够帮你解决wikisql 数据集解释_机器学习可解释性Lime方法小结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复