Shap 统计学

5

我使用shap来确定具有相关特征的多元回归的特征重要性。

import numpy as np
import pandas as pd  
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
import shap


boston = load_boston()
regr = pd.DataFrame(boston.data)
regr.columns = boston.feature_names
regr['MEDV'] = boston.target

X = regr.drop('MEDV', axis = 1)
Y = regr['MEDV']

fit = LinearRegression().fit(X, Y)

explainer = shap.LinearExplainer(fit, X, feature_dependence = 'independent')
# I used 'independent' because the result is consistent with the ordinary 
# shapely values where `correlated' is not

shap_values = explainer.shap_values(X)

shap.summary_plot(shap_values, X, plot_type = 'bar')

enter image description here

shap 提供一个图表来获取 shap 值。是否还有可用的统计数据?我对确切的 shap 值感兴趣。我阅读了 Github 存储库和文档,但在这个主题上找不到任何相关内容。

1个回答

3
当我们查看“shap_values”时,我们会发现它包含一些正数和负数,并且其维度等于“boston”数据集的维度。线性回归是一种机器学习算法,它计算出最优的“y = wx + b”,其中“y”是MEDV,“x”是特征向量,而“w”是权重向量。在我看来,“shap_values”存储了“wx” - 一个矩阵,其中每个特征的值都乘以线性回归计算出的权重向量。
因此,为了计算所需的统计信息,我首先提取了绝对值,然后对其求平均值。顺序很重要!接下来,我使用初始列名,并按从最大影响到最小影响的顺序进行排序。希望这样就回答了你的问题! :)
from matplotlib import pyplot as plt


#rataining only the size of effect
shap_values_abs = np.absolute(shap_values)

#dividing to get good numbers
means_norm = shap_values_abs.mean(axis = 0)/1e-15

#sorting values and names
idx = np.argsort(means_norm)
means = np.array(means_norm)[idx]
names = np.array(boston.feature_names)[idx]

#plotting
plt.figure(figsize=(10,10))
plt.barh(names, means)

Mean(Abs(shap_values)) plot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接