一文读懂常用机器学习解释性算法:特征权重,feature_importance, lime,shap

目录

1.线性回归中的特征权重β:

2. 树模型中的feature_importance:

3. lime:

4. shap:

5. 各种算法对比:


1.线性回归中的特征权重β:

线性模型中,特征可以归类为:数值特征(比如气温)、二进制特征(性别0/1)、范畴特征(天气:下雨、阴天、晴天,使用one-hot编码,让具体类别有自己的二进制选项)

2. 树模型中的feature_importance:

无论是经典的决策树算法,还是基于决策树算法的boost算法(xgboost)还是bagging算法(随机森林),都能利用基尼系数,信息增益和分裂次数,添加权重计算特征重要性。

3. lime:

Lime(Local Interpretable Model-Agnostic Explanations)是使用训练的局部代理模型来对单个样本进行解释。假设对于需要解释的黑盒模型,取关注的实例样本,在其附近进行扰动生成新的样本点,并得到黑盒模型的预测值,使用新的数据集训练可解释的模型(如线性回归、决策树),得到对黑盒模型良好的局部近似。

​实现步骤

  1. 如上图是一个非线性的复杂模型,蓝/粉背景的交界为决策函数;

  2. 选取关注的样本点,如图粗线的红色十字叉为关注的样本点X;

  3. 定义一个相似度计算方式,以及要选取的K个特征来解释;

  4. 在该样本点周围进行扰动采样(细线的红色十字叉),按照它们到X的距离赋予样本权重;

  5. 用原模型对这些样本进行预测,并训练一个线性模型(虚线)在X的附近对原模型近似。

这样就可以使用可解释性的模型对复杂模型进行局部解释。

4. shap:

基于博弈论计算边际效益来计算各个特征对结果的贡献:

小明,小军,小强(是的,就是他们小学课本三人组),组队参加王者农药大赛,大赛设定哪个队先拿100个人头,可以获得一万元奖金。终于在他们三个的通力配合下,赢得了比赛,获得一万元奖金,但到了分钱阶段,分歧出现了,因为他们三个人的水平、角色不一,小强个人实力最强善用高输出角色,光是他自己就拿了大半的人头;但若是按照人头数分,也不合适,因为前期小强有几次差点挂掉,多亏队友及时治疗,另外有好多人头也是靠攻速抢到的。那么,应该怎么分配这一万块钱,才是最公平的呢?

_

机智(厚脸皮)的小老弟登场了,这个问题,我们可以从贡献出发:

小强自己可以干掉35个人,小军可以干掉15个人,小明可以干掉10个人,显然,他们每个人都无法独立完成目标。

小强和小军联手可以干掉70个人,小强和小明可以干掉60个人,小军和小明联手可以干掉40个人,同样,无法完成任务。

而只有当三个人联手时候,才可以干掉100个人,达成目标。

(可以理解为小军小强小明有辅助有输出有坦克)

考虑先后顺序,他们三个人一共有6种组队方式。

我们定义边际贡献:假定初始组合为小强一个人,贡献35,加入小军后,他们俩的组合贡献为70,则小军的边际贡献就是70-35=35,再加入小明,三个人的组合贡献为100,则小明的边际贡献为100-70=30;

根据组合次序计算全部的组合及组合中每个人的边际贡献,如表格所示,则可以求得每个人的贡献度。

因此,最合理的分配方案就是小强小军小明分别获得4916、2917、2167。

大家可能奇怪上面的故事和本文主题有啥关系,实际上,上面的问题就是通俗的解释了SHAP方法的核心:shapley value(沙普利值)的简化版计算方法。

结果展示:

5. 各种算法对比:

  1. 线性算法的权重需要可以非常清晰的表明特征的重要程度,以及对结果的影响,但是缺点是需要做标准化,并缺模型准确度不高。

  2. 树类型算法的feature_importance也非常实用,特别是最近大火的xgboost, lightgbm都基于树算法,树类型算法无需对数据样本进行标准化,但是无法实现对单一样本对预测结果影响的刻画。

  3. lime和shap都能实现单一单一样本对预测结果影响的刻画,但是对整个样本对预测结果的刻画上稍显不足,可以用在各种类型算法的解释性,以及线上模型突然结果恶化的场景描述上。

### Python 中实现机器学习模型可解释性的方法和工具 #### ELI5 软件包的应用 ELI5 是一个用于提高机器学习模型可解释性的 Python 包。该软件包允许用户检查模型参数,从而帮助理解模型整体工作原理;还可以深入探究单个预测的结果,揭示模型决策背后的逻辑[^1]。 对于线性回归和支持向量机等简单模型,可以通过展示特征权重的方式提供直观的理解。而对于更复杂的黑盒模型(如随机森林或神经网络),则可以利用特定函数生成详细的解析报告。 ```python import eli5 from sklearn.datasets import load_iris from sklearn.ensemble import RandomForestClassifier # 加载数据集并训练分类器 data = load_iris() clf = RandomForestClassifier().fit(data.data, data.target) # 显示模型的权重信息 eli5.show_weights(clf) ``` #### SHAP 值计算与可视化 SHAP (Shapley Additive exPlanations) 提供了一种统一衡量各个输入变量对最终输出影响程度的方法。这种方法基于博弈论中的 Shapley value 概念,能够有效处理不同类型的机器学习算法,并给出具有统计意义的重要性评分[^3]。 针对文本类任务,比如情感分析,SHAP 不仅能指出哪些词语促进了正面情绪表达,也能识别出那些倾向于负面评价的关键字眼。这使得开发者可以根据这些反馈调整优化策略,进而提升系统的性能表现。 ```python import shap import xgboost as xgb # 训练XGBoost模型... model = xgb.XGBRegressor() # 这里假设已经完成训练 explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) # 绘制摘要图以查看各特征重要性 shap.summary_plot(shap_values, X_test, plot_type="bar") ``` 除了上述两种主要手段外,在实际项目开发过程中还存在其他多种辅助技术可供选择,例如 LIME 局部近似、Permutation Importance 排列重要性和 Partial Dependence Plots 部分依赖关系绘图等等。每一种都有其独特的优势场景适用范围,建议根据具体需求灵活选用合适的方案组合起来使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值