精华内容
下载资源
问答
  • 文章目录前言1.XGB建模2.SHAP分析参考文档 前言 Xgboost相对于逻辑回归模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性。 Feature importance可以直观地反映出特征的重要性,看出哪些特征...


    前言

    Xgboost相对于逻辑回归模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性。

    Feature importance可以直观地反映出特征的重要性,看出哪些特征对最终的模型影响较大。但是无法判断特征与最终预测结果的关系是如何的。

    Lundberg和Lee的论文提出了SHAP值这一广泛适用的方法用来解释各种模型(分类以及回归),如boosting和神经网络模型。


    下面我们通过实战讲解SHAP。请在SofaSofa数据竞赛页面进行数据下载,下载解压这个文件。

    1.XGB建模

    1.1 数据处理:

    import shap
    from xgboost import XGBRegressor as XGBR
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    plt.style.use('seaborn')
    
    # 读取数据------
    data = pd.read_csv(r'D:\Download\data\train.csv',parse_dates=[3])
    

    在这里插入图片描述

    # 分类变量编码处理------
    pd.set_option('display.max_rows',500) #调整最大显示行
    print(data.dtypes) # 找出分类特征,稍后进行OneHotEncoder
    
    col = ['club', 'league',  'height_cm', 'weight_kg',
           'nationality', 'potential', 'pac', 'sho', 'pas', 'dri', 'def', 'phy',
           'international_reputation', 'skill_moves', 'weak_foot', 'preferred_foot', 'crossing', 'finishing',
           'heading_accuracy', 'short_passing', 'volleys', 'dribbling', 'curve',
           'free_kick_accuracy', 'long_passing', 'ball_control', 'acceleration',
           'sprint_speed', 'agility', 'reactions', 'balance', 'shot_power',
           'jumping', 'stamina', 'strength', 'long_shots', 'aggression',
           'interceptions', 'positioning', 'vision', 'penalties', 'marking',
           'standing_tackle', 'sliding_tackle', 'gk_diving', 'gk_handling',
           'gk_kicking', 'gk_positioning', 'gk_reflexes', 'rw', 'rb', 'st', 'lw',
           'cf', 'cam', 'cm', 'cdm', 'cb', 'lb', 'age'] # 去掉不相干变量
    x = data[col].values
    y = data['y'].values
    
    from sklearn.preprocessing import OneHotEncoder
    enc = OneHotEncoder()
    array_1 = enc.fit_transform(data[['work_rate_att','work_rate_def']]).toarray()
    enc_lab = enc.get_feature_names(['work_rate_att','work_rate_def']).tolist() #返回新的特征列名
    x_new = np.hstack([x,array_1])   # 组合好特征变量array
    #col_new = [i for i in col if i not in ['work_rate_att','work_rate_def']]
    col.extend(enc_lab)   # 组合好特征变量列名,稍后画图待用
    

    1.2.建模与实例化:

    # 建模------
    model = XGBR(max_depth=4, learning_rate=0.05, n_estimators=150)
    model.fit(x_new,y)
    
    # 特征重要性----
    plt.bar(range(len(col)),model.feature_importances_)
    plt.xticks(range(len(col)), col, rotation=-45, fontsize=5)
    

    在这里插入图片描述

    2.SHAP分析

    SHAP是由Shapley value启发的可加性解释模型。对于每个预测样本,模型都产生一个预测值,SHAP value就是该样本中每个特征所分配到的数值。

    假设第i个样本为xi,第i个样本的第jj个特征为xi,j,模型对第i个样本的预测值为yi,整个模型的基线(通常是所有样本的目标变量的均值)为ybase,那么SHAP value服从:yi=ybase+f(xi,1)+f(xi,2)+⋯+f(xi,k),其中f(xi,1)为xi,j的SHAP值。

    直观上看,f(xi,1)就是对yiyi的贡献值,当f(xi,1)>0f(xi,1)>0,说明该特征提升了预测值,也正向作用;反之,说明该特征使得预测值降低,有反作用。

    2.1 单样本特征上的shap值
    查看其中一位球员身价的预测值以及其特征对预测值的影响。

    # SHAP实例化------
    import shap
    explainer = shap.TreeExplainer(model)
    
    df = pd.DataFrame(x_new,columns=col)
    shap_values = explainer.shap_values(x_new)  # 计算出每个样本在66个特征上的shap值
    shap_values.shape  # shap值矩阵(10441, 66)
    

    下图,蓝色表示该特征的贡献是负数,红色则表示该特征的贡献是正数。球员的身价73.46万;最长的蓝色条是潜力,身价也因此降低了180万元。

    # shap可视化------
    shap.initjs()
    j = 0 # 以第一个样本为例,查看shap值
    shap.force_plot(explainer.expected_value, shap_values[j], x_new[j])
    

    在这里插入图片描述
    2.2 特征在全样本的shap分析
    纵轴为特征变量,横轴为shap_value(左负右正),点代表样本点。样本点红色表示特征值较高,紫色表示特征值较低。

    举例来看,特征potential对预测结果的影响最大,是与value_shape正相关,potential越高会拉高shap_value。特征age与value_shape负相关,该特征值高的表示年龄较大的样本,图中为红色点,均处于纵轴左侧,即说明负向影响。

    shap.summary_plot(shap_values, df)
    

    在这里插入图片描述
    我们也可以把一个特征对目标变量影响程度的绝对值的均值作为这个特征的重要性。
    因为SHAP和feature_importance的计算方法不同,所以我们这里也得到了与modle.feature_importances_不同的重要性排序。

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

    在这里插入图片描述

    参考文档

    https://zhuanlan.zhihu.com/p/64799119

    展开全文
  • shap安装记录

    千次阅读 2020-07-09 11:04:16
    pip install shap ## 安装python 报错1: 解决1: 将python切换为python3.6即可(可重建一个python3.6的虚拟环境) step2. 在pycharm中运行脚本 import xgboost import shap # 训练一个XGBoost 模型 X, y = shap....

    环境准备:
    windows10
    python3.7

    step1. 直接在python命令行输入

    pip install shap   ## 安装python
    

    报错1:
    解决:
    解决1: 将python切换为python3.6即可(可重建一个python3.6的虚拟环境)

    step2. 在pycharm中运行脚本

    import xgboost
    import shap
    
    # 训练一个XGBoost 模型  
    X, y = shap.datasets.boston()  
    model = xgboost.train({"learning_rate": 0.1, "silent": 1}, 
                            xgboost.DMatrix(X, label=y), 100)
                            
    # 对模型文件model进行解释  
    explainer = shap.TreeExplainer(model)  
    

    报错2: 上述代码块中最后一步报错:‘UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x96 in position 34: invalid start byte’
    解决2: 卸载xgboost,重装xgboost1.1.0版本即可。具体原因

    pip install xgboost==1.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple       ## xgboost重装
    

    step3. 继续运行代码

    # 可视化第一个样本预测的解释  
    shap.force_plot(explainer.expected_value, 
                      shap_values[0,:], 
                      X.iloc[0,:], matplotlib=True)
                      
    # 所有样本Shap图  
    shap.force_plot(explainer.expected_value, shap_values, X)
    
    # 计算所有特征的影响  
    shap.summary_plot(shap_values, X)
    
    # 特征重要性  
    shap.summary_plot(shap_values, X, plot_type="bar")  
    

    报错3:“AssertionError: IPython must be installed to use this visualizer! Run pip install ipython and then…”
    解决3: 根据提示安装ipython

    pip3 install ipython
    

    ipython安装成功,但是在命令行输入ipython启动时,出现:
    报错4:“ImportError: cannot import name ‘AsyncGenerator’”
    在这里插入图片描述
    解决4:

    pip install prompt-toolkit==2.0.10
    

    此时直接在命令行输入"ipython"时,可以发现ipython已安装成功:
    在这里插入图片描述
    继续在IDE中运行完整代码,没有报错

    import xgboost
    import shap
    
    # 训练一个XGBoost 模型  
    X, y = shap.datasets.boston()  
    model = xgboost.train({"learning_rate": 0.1, "silent": 1}, 
                            xgboost.DMatrix(X, label=y), 100)
    
    # 对模型文件model进行解释  
    explainer = shap.TreeExplainer(model)  
    # 传入特征矩阵X,计算SHAP值  
    shap_values = explainer.shap_values(X)    
    print(shap_values.shape)
    
    # 可视化第一个样本预测的解释  
    shap.force_plot(explainer.expected_value, 
                      shap_values[0,:], 
                      X.iloc[0,:], matplotlib=True)
    
    # 所有样本Shap图  
    shap.force_plot(explainer.expected_value, shap_values, X)
    
    # 计算所有特征的影响  
    shap.summary_plot(shap_values, X)
    
    # 特征重要性  
    shap.summary_plot(shap_values, X, plot_type="bar")  
    

    上述代码运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    附: shap Github地址

    展开全文
  • python中安装shap第三方库

    千次阅读 2020-09-23 18:48:17
    shap安装失败的话, 再已经安装过anaconda3的前提下,可以用这个命令来安装: conda install -c conda-forge shap

    shap安装失败的话,

    再已经安装过anaconda3的前提下,可以用这个命令来安装:

    conda install -c conda-forge shap
    
    展开全文
  • pip安装shap报错

    2021-05-29 14:37:04
    python pip install shap 报错 error ERROR: Command errored out with exit status 1: linux pip安装shap 报错 Building wheel for shap (setup.py) … error ERROR: Command errored out with exit status 1: ...

    python pip install shap 报错 error ERROR: Command errored out with exit status 1:

    linux pip安装shap 报错 Building wheel for shap (setup.py) … error ERROR: Command errored out with exit status 1: command: /usr/python/anaconda3/bin/python -u -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘"’"’/tmp/pip-install-g0yvh0xs/shap_cdc81c9cd7784671b7edc8e56d244549/setup.py’"’"’; file=’"’"’/tmp/pip-install-g0yvh0xs/shap_cdc81c9cd7784671b7edc8e56d244549/setup.py’"’"’;f=getattr(tokenize, ‘"’"‘open’"’"’, open)(file);code=f.read().replace(’"’"’\r\n’"’"’, ‘"’"’\n’"’"’);f.close();exec(compile(code, file, ‘"’"‘exec’"’"’))’ bdist_wheel -d /tmp/pip-wheel-y3wnvdej cwd: /tmp/pip-install-g0yvh0xs/shap_cdc81c9cd7784671b7edc8e56d244549/ error: command ‘gcc’ failed with exit status 1

    原因:

    缺少cpp

    解决:

    安装cpp

    > sudo apt install build-essential # ubuntu
    > sudo yum install build-essential # centos
    

    结果:

    > pip install shap
    

    在这里插入图片描述



    如果这篇文章对你有用,请点个赞吧....
    展开全文
  • Py之shapshap库的简介、安装、使用方法之详细攻略 目录 shap库的简介 shap库的安装 shap库的使用方法 1、树类集成模型案例 2、带有深度解释器的深度学习示例(TensorFlow/Keras模型) 3、带有...
  • SHAP分析lightGBM

    2021-01-02 12:25:55
    SHAP (SHapley Additive exPlanations) is a game theoretic approach to explain the output of any machine learning model. It connects optimal credit allocation with local explanations using the classic ...
  • 机器学习很大一个问题是可解释性较差,虽然在RandomForest、LightGBM等算法中,均有feature_importance可以展现模型最重要的N个特征,但是对于单个样本来说情况可能并不与整体模型一致,所以就需要使用SHAP等算法将...
  • 安装SHAP

    2021-11-04 20:25:32
    记录一下我的SHAP安装史 作为一个python小白,从第一步开始安装python都是那么的难。 安装Python 从官网下载https://www.python.org/。说明一下其实没必要下载太新的,对于SHAP,就只有3.8的版本,我之前下载了3.9就...
  • pycharm导入shap值不成功解决办法 pycharm导入shap值不成功解决办法 pycharm:import shap,提示安装失败 1.在anaconda命令框运行命令:conda install -c conda-forge shap。 2.最后一行显示Proceed[y/n]:...
  • shap的使用

    2017-03-21 08:19:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • SHAP (SHapley Additive exPlanations)

    千次阅读 2020-12-06 01:07:05
    Interpretable Machine Learning(2)——SHAP
  • 全国地图SHAP文件.rar

    2020-03-09 17:53:54
    全国地图shp文件,包括地级城市、县级统计数据、省会城市、省级行政区、县城驻地、中国湖泊、主要铁路公路等
  • shap 模型Responsible AI has been a very hot topic in recent years. Accountability and explainability now become the necessary components of your machine learning models, particularly when the models ...
  • 气死个人,python各种的向下兼容太差了,出现各种不匹配 . 一句话,重装重装再重装!!!
  • python国内模块下载镜像地址 ** 作为备忘 清华镜像 :https://pypi.tuna.tsinghua.edu.cn/simple 阿里云镜像 :http://mirrors.aliyun.com/pypi/simple/ 中国科技大学镜像地址:...
  • 与原始R(将用户限制为随机森林模型)不同,BorutaShap允许用户在特征选择过程中选择任何基于树的学习器作为基础模型。 尽管BorutaShap的运行时性能有所提高,但是SHAP TreeExplainer随观察次数线性增长,这使得...
  • pycharm换源安装依赖

    千次阅读 2020-04-14 17:47:59
    准备工作(源): 默认源:https://pypi.python.org/simple 清华源:https://pypi.tuna.tsinghua.edu.cn/simple/ 豆瓣源:http://pypi.douban.com/simple/ 阿里源:... 打开设置,搜索 interpreter ...
  • 利用Shap解释Xgboost(或者别的)模型

    千次阅读 2019-12-07 16:33:07
    Shap的一些介绍: SHAP包 算法解析 shap的中文解析 知乎的翻译 ps,sklearn库的模型可以用lime模块解析 本文参考利用SHAP解释Xgboost模型 数据集
  • pip离线环境安装包

    2020-08-07 15:25:57
    pip离线环境安装包pip离线环境安装包基础环境功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与...服务器没有镜像的情况下,offline机器安装python的。 背景: 有一台可以联网的windows电脑
  • SHAP: 在我眼里,没有黑箱

    千次阅读 热门讨论 2020-07-17 19:47:06
    lgb, cat)和神经网络模型, 它们相对于普通线性模型在进行预测时往往有更好的精度,但是同时也失去了线性模型的可解释性, 所以这些模型也往往看作是黑箱模型, 在2017年,Lundberg和Lee的论文提出了SHAP值这一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,428
精华内容 571
关键字:

shap包