一、The permutation feature importance
置换特征重要性仅对感兴趣的目标特征进行置换,具体的公式如下:
假设=,保持其他特征值不变,仅仅对进行打乱,并把每次打乱后的模型损失函数计算出来,重复R次即可得到特征的重要性。
不难发现,The permutation feature importance仅能用于特征的全局解释。
图例:
二、PDP(部分依赖图,Partial Dependence Plot)
TPFI是固定除了Xj以外的所有特征值。
PDP则是固定Xj的的特征值,并假设所有的特征是独立的,然后将其他所有的特征值进行组合。具体公式如下:
实例中的特征值往往是离散的,即使是离散,计算量依然很大。
假设|xi|代表特征xi集合的大小,那么计算一个特征xj=1的PDP值就需要对特征j以外的所有特征集合大小相乘。即计算次数为:,且i≠j。
因此,实际中使用样本数n来代替,用某一样本的Xc取值来代替原本的组合。近似计算公式如下:
实例:
样本 | 特征1 | 特征2 | 特征3 |
样本1 | 1 | 5 | 9 |
样本2 | 2 | 6 | 8 |
样本3 | 3 | 7 | 7 |
样本4 | 4 | 8 | 6 |
假设=,将所有的X1替换为X1=X1i,并把预测值计算出来取均值即可得到x1i的PDP值,重复i次即可得到绘制PDP图所需的点。下图是以X1=1为例。
样本 | 特征1 | 特征2 | 特征3 |
样本1 | 1 | 5 | 9 |
样本2 | 1 | 6 | 8 |
样本3 | 1 | 7 | 7 |
样本4 | 1 | 8 | 6 |
可以设想,如果不进行近似计算,特征2的取值有4个:{5,6,7,8},特征3的取值有4个:{6,7,8,9},因此计算特征1=1时的PDP值(即下图的一个点),需要4*4=16次,然后取均值。如果样本的特征维度比较高,则需要更多次计算。以分子指纹为例,如果生成的二进制分子指纹维度为2048,每一位取值为0或1,那么想要绘制PDP图中的一个点,就需要2^2048次计算。
而使用近似计算后,对于上述的实例,仅需要计算n=4次。对于分子指纹的例子,也仅需样本数n次计算。
不难发现,PDP不仅能用于特征的全局解释,也可以进行局部解释。即目标变量与某特征具体取值之间的关系。
图例:
局部解释
如果需要全局解释,对所有特征的yhat分别取均值绘图即可。
三、SHAP值
以下是对样本集内样本j特征xi的shap值定义:
理论上,一个集合的子集有2^n个,本例中也就是需要进行2^S次求和。
但在实际的计算中,面临两个问题:
第一:如何划分子集S?
如果按照理论来计算,高纬度的特征计算量将非常的大。且需要对所有的样本、特征进行计算。
假设样本数为n,特征数量为m,那么需要的计算次数为:。
第二:如何代表该特征未被选择?
由于上述两个问题处理方式可能有很多,因此无法结合实际给出具体的计算过程。
下面只给出一个理论上的计算过程:
如此,我们就得到了一个样本的特征x1的shap值,计算全部样本即可得到所有样本特征x1的shap值。这样就可以计算特征重要度了。之后想要出什么图,就看怎么操作了。
不难发现,shap值不但可以用于局部解释,还可以用于全局解释。即每个特征在该实例上的具体贡献,从而解释模型对该实例的预测,这种局部解释有助于理解模型的决策过程,
关于shap值是否考虑了特征之间的交互效应,这需要依据S子集的划分方式来确定,按照理论上的方式来计算,确实是考虑了交互效应。
图例:
局部解释
全局解释