机器学习可解释性⽅法Lime⼩结
机器学习相对简单线性模型有更优异的效果,但是其复杂的原理让模型并不容易理解和解释。可解释的⽅法有很多众,⼤概可以分为全局解释和局部解释,以及与模型适配和与模型⽆关的⽅法,本⽂对⼀种局部的、与模型⽆关的⽅法Lime进⾏介绍,尝试从原理并结合python的Lime⼯具包进⾏梳理。
原理介绍
Lime(Local Interpretable Model-Agnostic Explanations)是使⽤训练的局部代理模型来对单个样本进⾏解释。假设对于需要解释的⿊盒模型,取关注的实例样本,在其附近进⾏扰动⽣成新的样本点,并得到⿊盒模型的预测值,使⽤新的数据集训练可解释的模型(如线性回归、决策树),得到对⿊盒模型良好的局部近似。
实现步骤
1. 如上图是⼀个⾮线性的复杂模型,蓝/粉背景的交界为决策函数;
2. 选取关注的样本点,如图粗线的红⾊⼗字叉为关注的样本点X;
3. 定义⼀个相似度计算⽅式,以及要选取的K个特征来解释;
4. 在该样本点周围进⾏扰动采样(细线的红⾊⼗字叉),按照它们到X的距离赋予样本权重;
5. ⽤原模型对这些样本进⾏预测,并训练⼀个线性模型(虚线)在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.datats
ble
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,
ed=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 = plain_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历史最⼤逾期期数的变量的特征重要性最⼤。
参考资料
Interpretable Machine Learning:A Guide for Making Black Box Models Explainable
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).