admin管理员组文章数量:1609899
可解释性机器学习
背景
写这篇文章的背景就是可解释性机器学习在中文领域资料非常少,有一些零散的资料也不成系统,笔者根据这两个月的整理现阶段的一些可解释性的资料,可常用的代码和库,希望为大家尽一份力。文章分成,原理讲解,论文解析,代码整理,衡量特征重要性的度量四个部分。
Model-Agnostic Methods
找到所有模型都通用的检验方法,也成为post hoc interpretation。
模型解释分为两类,一类是全局的解释性(global),衡量特征在模型中起的整体作用,另一类是局部的解释性(local),目的是对一个特定的预测条目,衡量该条样本预测分高的原因。
两类解释具有较大区别,以线性模型的解释为例,对于进行了归一化处理后的特征而言,最终的模型权重绝对值即为全局的特征重要性,因为权值越大该特征对最终分值影响越大,而对于一个取得高分的具体预测实例而言,可能在全局最重要的特征上,其分值较小,在该条样本的得分计算上并无多大贡献,因此对于线性模型单条样本的局部解释性,会使用权值乘以特征值来作为该维特征的贡献度,从而得到各个特征间的重要性排序。
Local的解释性可以通过两种方式来实现:
- 通过在一个instance的领域取点,通过简单的可解释性模型来学习complex模型的这个特定instance周边的关系。
- 用Surrogate方式。
PDP, Feature Importance, 是Global的解释方法。ICE, LIME, ALE, Anchors是local的解释方法。 Shap是既可以local又可以global。
PD & ICE
Partial Dependence和ICE通常放置在一起用,原理是对给定instance,固定除选择的特征外的其它特征值,然后对选择的特征列进行分箱迭代,每次迭代将选择的特征列全部赋予同一个值,从小到大,如果是PDP,则平均所有样本的预测值。
能展示预测值和特征之间的关系是线性的,单调性的,还是更复杂的。
For a selected predictor (x)
1. Determine grid space of j evenly spaced values across distribution of x
2: for value i in {1,...,j} of grid space do
| set x to i for all observations
| apply given ML model
| estimate predicted value
| if PDP: average predicted values across all observations
end
def par_dep(xs, frame, model, resolution=20, bins=None):
'''
xs: 列名
frame: Dataframe
model: xgboost, lightgbm
resolution: 分箱的精度
'''
pd.options.mode.chained_assignment = None
par_dep_frame = pd.DataFrame(columns=[xs, 'partial_dependence'])
# 保留特定列
col_cache = frame.loc[:, xs].copy(deep=True)
# 确定PD图x轴需要计算值
if bins == None:
min_ = frame[xs].min()
max_ = frame[xs].max()
by = (max_ - min_)/resolution
bins = np.arange(min_, max_, by)
# 设置列为一个常数j,j按bins取值。i为总体预测的y值,j为i的均值。
for j in bins:
frame.loc[:, xs] = j
dframe = xgb.DMatrix(frame)
par_dep_i = pd.DataFrame(model.predict(dframe))
par_dep_j = par_dep_i.mean()[0]
par_dep_frame = par_dep_frame.append({
xs:j,
'partial_dependence': par_dep_j},
ignore_index=True)
# 将特定列返回
frame.loc[:, xs] = col_cache
return par_dep_frame
ALE
主要解决特征间相互依赖问题。比如预测房子价格,特征-房间数量和特征-房子大小,比如PD会固定住房间大小,增加房间数量来画PD图,但这两个变量明显是有相关性的。ALE希望反映特征效果的相关性。通过找特征的条件分布的均值,我们平均了相似的x1值的instances的预测值。M-Plots避免平均不相似的数据的instances,但是他们混合了一个特征和其它相关特征的效果,其实就是画出两个变量的条件概率的分布。ALE通过计算预测值之间的差值,而不是求平均。比如,对于面积30m的,ALE用所有30m的例子,假装这批房子是31m和29m,用模型预测后做差。这样给了我们纯粹的面积的效果,而没有混合其它相关的特征。简单来说
,PDP和ALE都是计算了一个特征在某个格点值v时的效果。
-
PDP展示的是,模型的平均预测值,在数据的instance对应想要知道的特征,都赋予选定同一个格点值v,。
-
ALE是展示模型预测值在small window的变化。也就是用特征在格点值v的附近的small window的变化值。用small window的upper and lower limit of the interval来输入模型中预测后相减得到差值。
For a selected predictor (x)
1. Determine grid space of j evenly spaced values across distribution of x
2: for value i_lower, i_upper in {1,...,j} of grid space do
if x in (i_lower, i_upper)
| set x to i for all observations
| apply given ML model
| estimate difference between predicted value i_lower and i_upper
end
Feature Interaction
通过H-statistic来衡量特征与其它特征的interaction的强度,H-statistic能够衡量根据预测结果中的特征间交互程度的方差。一般的工作流程是,先衡量interaction的强度,然后画出2D-PDP来检验interaction。
例子1: 衡量两个特征之间的Interaction程度。若两个特征之间没有interaction,则
P D j k ( x j , x k ) = P D j ( x j ) + P D k ( x k ) P D_{j k}\left(x_{j}, x_{k}\right)=P D_{j}\left(x_{j}\right)+P D_{k}\left(x_{k}\right) PDjk(xj,xk)=PDj(xj)+PDk(xk)
H j k 2 = ∑ i = 1 n [ P D j k ( x j ( i ) , x k ( i ) ) − P D j ( x j ( i ) ) − P D k ( x k ( i ) ) ] 2 / ∑ i = 1 n P D j k 2 ( x j ( i ) , x k ( i ) ) H_{j k}^{2}=\sum_{i=1}^{n}\left[P D_{j k}\left(x_{j}^{(i)}, x_{k}^{(i)}\right)-P D_{j}\left(x_{j}^{(i)}\right)-P D_{k}\left(x_{k}^{(i)}\right)\right]^{2} / \sum_{i=1}^{n} P D_{j k}^{2}\left(x_{j}^{(i)}, x_{k}^{(i)}\right) Hjk2=i=1∑n[PDjk(xj(i),xk(i))−PDj(xj(i))−PDk(xk(i))]2/i=1∑nPDjk2(xj(i),xk(i))
PD指partial dependence function。
1: for variable i in {1,...,p} do
| f(x) = estimate predicted values with original model
| pd(x) = partial dependence of variable i
| pd(!x) = partial dependence of all features excluding i
| upper = sum(f(x) - pd(x) - pd(!x))
| lower = variance(f(x))
| rho = upper / lower
end
5. Sort variables by descending rho (interaction strength)
例子2:衡量一个特征与其余特征之间的Interaction程度。
f ^ ( x ) = P D j ( x j ) + P D − j ( x − j ) \hat{f}(x)=P D_{j}\left(x_{j}\right)+P D_{-j}\left(x_{-j}\right) f^(x)=P
版权声明:本文标题:可解释性机器学习 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728576427a1164523.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论