解释为脑瘫的那张图_SHAP:Python的可解释机器学习库

解释为脑瘫的那张图_SHAP:Python的可解释机器学习库

2023年6月29日发(作者:)

解释为脑瘫的那张图_SHAP:Python的可解释机器学习库SHAP介绍可解释机器学习在这⼏年慢慢成为了机器学习的重要研究⽅向。作为数据科学家需要防⽌模型存在偏见,且帮助决策者理解如何正确地使⽤我们的模型。越是严苛的场景,越需要模型提供证明它们是如何运作且避免错误的证据关于模型解释性,除了线性模型和决策树这种天⽣就有很好解释性的模型意外,sklean中有很多模型都有importance这⼀接⼝,可以查看特征的重要性。其实这已经含沙射影地体现了模型解释性的理念。只不过传统的importance的计算⽅法其实有很多争议,且并不总是⼀致。有兴趣可以之后阅读相关⽂章 permutation importance、 interpretable_with_xgboostSHAP是Python开发的⼀个"模型解释"包,可以解释任何机器学习模型的输出。其名称来源于SHSHAPSHapley AAdditive exPPlanation,在合作博弈论的启发下SHAP构建⼀个加性的解释模型,所有的特征都视为“贡献者”。对于每个预测样本,模型都产⽣⼀个预测值,SHAP value就是该样本中每个特征所分配到的数值。假设第i个样本为xi,第i个样本的第j个特征为xi_j,模型对该样本的预测值为yi,整个模型的基线(通常是所有样本的⽬标变量的均值)为y_base,那么SHAP value服从以下等式:其中f(x_ij)为x_ij的SHAP值。直观上看,f(xi,1)就是第i个样本中第1个特征对最终预测值yi的贡献值,当f(xi,1)>0,说明该特征提升了预测值,也正向作⽤;反之,说明该特征使得预测值降低,有反作⽤。传统的feature importance只告诉哪个特征重要,但我们并不清楚该特征是怎样影响预测结果的。SHAP value最⼤的优势是SHAP能对于反映出每⼀个样本每⼀个样本中的特征的影响⼒,⽽且还表现出影响的正负性。通过pip install shap即可安装import () # notebook环境下,加载⽤于可视化的JS代码# 我们先训练好⼀个XGBoost modelX,y = ()model = ({"learning_rate": 0.01}, x(X, label=y), 100)Explainer在SHAP中进⾏模型解释需要先创建⼀个explainerexplainer,SHAP⽀持很多类型的explainer(例如deep, gradient, kernel, linear, tree,sampling),我们先以tree为例,因为它⽀持常⽤的XGB、LGB、CatBoost等树集成算法。explainer = plainer(model)shap_values = _values(X) # 传⼊特征矩阵X,计算SHAP值Local InterperLocal可解释性提供了预测的细节,侧重于解释单个预测是如何⽣成的解释单个预测是如何⽣成的。它可以帮助决策者信任模型,并且解释各个特征是如何影响模型单次的决策。单个prediction的解释SHAP提供极其强⼤的数据可视化功能,来展⽰模型或预测的解释结果。# 可视化第⼀个prediction的解释 如果不想⽤JS,传⼊matplotlib=_plot(ed_value, shap_values[0,:], [0,:])上图的"explanation"展⽰了每个特征都各⾃有其贡献,将模型的预测结果从基本值(base value)推动到最终的取值(model output);将预测推⾼的特征⽤红⾊表⽰,将预测推低的特征⽤蓝⾊表⽰基本值(base_value)是我们传⼊数据集上模型预测值的均值,可以通过⾃⼰计算来验证:y_base = ed_valueprint(y_base)pred = t(x(X))print(())多个预测的解释如果对多个样本进⾏解释,将上述形式旋转90度然后⽔平并排放置,我们可以看到整个数据集的explanations :_plot(ed_value, shap_values, X)Global InterperGlobal可解释性:寻求理解模型的overall structure(总体结构)overall structure(总体结构)。这往往⽐解释单个预测困难得多,因为它涉及到对模型的⼀般⼯作原理作出说明,⽽不仅仅是⼀个预测。summary_plotsummary plot 为每个样本绘制其每个特征的SHAP值,这可以更好地理解整体模式,并允许发现预测异常值。每⼀⾏代表⼀个特征,横坐标为SHAP值。⼀个点代表⼀个样本,颜⾊表⽰特征值(红⾊⾼,蓝⾊低)。⽐如,这张图表明LSTAT特征较⾼的取值会降低预测的房价# summarize the effects of all the y_plot(shap_values, X)Feature Importance:之前提到传统的importance的计算⽅法效果不好,SHAP提供了另⼀种计算特征重要性的思路。取每个特征的SHAP值的绝对值的平均值作为该特征的重要性,得到⼀个标准的条形图(multi-class则⽣成堆叠的条形图)y_plot(shap_values, X, plot_type="bar")Interaction Valuesinteraction value是将SHAP值推⼴到更⾼阶交互的⼀种⽅法。树模型实现了快速、精确的两两交互计算,这将为每个预测返回⼀个矩阵,其中主要影响在对⾓线上,交互影响在对⾓线外。这些数值往往揭⽰了有趣的隐藏关系(交互作⽤)shap_interaction_values = _interaction_values(X)y_plot(shap_interaction_values, X)dependence_plot为了理解单个feature如何影响模型的输出,我们可以将该feature的SHAP值与数据集中所有样本的feature值进⾏⽐较。由于SHAP值表⽰⼀个feature对模型输出中的变动量的贡献,下⾯的图表⽰随着特征RM变化的预测房价(output)的变化。单⼀RM(特征)值垂直⽅向上的⾊散表⽰与其他特征的相互作⽤,为了帮助揭⽰这些交互作⽤,“dependence_plot函数”⾃动选择另⼀个⽤于着⾊的feature。在这个案例中,RAD特征着⾊强调了RM(每栋房屋的平均房间数)对RAD值较⾼地区的房价影响较⼩。# create a SHAP dependence plot to show the effect of a single feature across the whole ence_plot("RM", shap_values, X)其他类型的explainersSHAP库可⽤的explainers有:deep:⽤于计算深度学习模型,基于DeepLIFT算法gradient:⽤于深度学习模型,综合了SHAP、集成梯度、和SmoothGrad等思想,形成单⼀期望值⽅程kernel:模型⽆关,适⽤于任何模型linear:适⽤于特征独⽴不相关的线性模型tree:适⽤于树模型和基于树模型的集成算法sampling :基于特征独⽴性假设,当你想使⽤的后台数据集很⼤时,kenel的⼀个很好的替代⽅案Kernel Explainer:模型⽆关⽅法(解释任意模型)kernel explainer适⽤于任何模型任何模型,但性能不⼀定是最优的,可能很慢;例如KNN算法只能使⽤kernel explainer不过可以⽤K-mean聚类算法对数据集进⾏summarizing,这样可以有效提⾼kenel的速度(当然,会损失⼀些准确性)# using kmeansX_train_summary = (X_train, 10)t0 = ()explainerKNN = Explainer(t, X_train_summary)shap_values_KNN_train = _values(X_train)shap_values_KNN_test = _values(X_test)timeit=()-t0timeit通过SHAP,⽤knn模型在整个"波⼠顿房价"数据集上跑完需要1个⼩时。如果我们牺牲⼀些精度,通过k-means聚类对数据进⾏summarizing,可以将时间缩短到3分钟

发布者:admin,转转请注明出处:http://www.yc00.com/web/1687978187a62958.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信