首页 > 其他分享 >LIME 模型解释器

LIME 模型解释器

时间:2022-08-31 10:55:35浏览次数:101  
标签:解释器 模型 train ax test import model data LIME

LIME 即是Local Interpretable Model-agnostic Explanations模型解释器,简单来说就是将每个变量的重要性可视化,集成学习xgb等有feature_importances_,还有专门的SHARP,那么LIME有什么优势呢?

首先我们来看看它的基本操作流程

下面使用GiveMeSomeCredit,数据地址: https://www.statsmodels.org/stable/generated/statsmodels.discrete.discrete_model.Logit.html#statsmodels.discrete.discrete_model.Logit

直接看代码:

import pandas as pd
import numpy as np

data = pd.read_csv('cs-training.csv')

#删除没有用的列
data = data.iloc[:,1:]

from xgboost import XGBClassifier
import shap
from sklearn.model_selection import train_test_split

# 训练集测试集分割
X = data.iloc[:,1:]
y = data['SeriousDlqin2yrs'] 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=2022)
# 模型训练
params={
        'eta':0.2,                        #特征权重,取值范围0~1,通常最后设置eta为0.01~0.2
        'max_depth':3,                    #树的深度,通常取值3-10,过大容易过拟合,过小欠拟合
        'min_child_weight':50,             #最小样本的权重,调大参数可以繁殖过拟合
        'gamma':0.4,                      #控制是否后剪枝,越大越保守,一般0.1、 0.2的样子
        'subsample':0.8,                  #随机取样比例
        'colsample_bytree':0.8 ,          #默认为1,取值0~1,对特征随机采集比例
        'lambda':0.8,
        'alpha':0.6,
        'n_estimators':50,
        'booster':'gbtree',               #迭代树
        'objective':'binary:logistic',    #逻辑回归,输出为概率
        'nthread':6,                      #设置最大的进程量,若不设置则会使用全部资源
        'scale_pos_weight':1.5,             #默认为0,1可以处理类别不平衡

        'seed':1234,                      #随机树种子
        'silent':1,                       #0表示输出结果
        'eval_metric':'auc'}               #评分指标
model = XGBClassifier(**params)
model.fit(X_train, y_train)
score = model.score(X_test, y_test)
score

#预测结果
t = model.predict_proba(X_test)[:,1]

计算AUC,KS 

#
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve,auc
def plot_roc(p1, p,string):
    '''
    目标:计算出分类模型的ks值
    变量:
    self:模型fit(x,y),如(self=tree.fit(x,y))
    data:一般是训练集(不包括label)或者是测试集(也是不包括label)
    y:label的column_name 
    返回:训练集(或者测试集)的auc的图片

    '''      

 
    fpr, tpr, p_threshold = roc_curve(p1, p,
                                              drop_intermediate=False,
                                              pos_label=1)
    df = pd.DataFrame({'fpr': fpr, 'tpr': tpr, 'p': p_threshold})
    df.loc[0, 'p'] = max(p)

    ks = (df['tpr'] - df['fpr']).max()
    roc_auc = auc(fpr, tpr)

    fig = plt.figure(figsize=(2.8, 2.8), dpi=140)
    ax = fig.add_subplot(111)

    ax.plot(fpr, tpr, color='darkorange', lw=2,
            label='ROC curve\nAUC = %0.4f\nK-S = %0.4f' % (roc_auc, ks)
            )
    ax.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')

    ax.set_xlim([0.0, 1.0])
    ax.set_ylim([0.0, 1.05])
    ax.set_xlabel('False Positive Rate')
    ax.set_ylabel('True Positive Rate')
    ax.set_title(string)
    ax.legend(loc="lower right")
    plt.close()
    return fig
plot_roc(y_test, t,'训练集ROC Curve')  #训练集 

 

 

 下面使用LIME 

import lime
from lime import lime_tabular
 
explainer = lime_tabular.LimeTabularExplainer(
    training_data=np.array(X_train),
    feature_names=X_train.columns,
    class_names=['good', 'bad'],
    mode='classification',
    discretize_continuous=False #记住要加这个参数,不然会报错
)

预测概率为0的可视化

exp = explainer.explain_instance(data_row=X_test.iloc[1], predict_fn=model.predict_proba)
exp.show_in_notebook(show_table=True)

预测概率为1的可视化

exp = explainer.explain_instance(data_row=X_test.iloc[25], predict_fn=model.predict_proba)
exp.show_in_notebook(show_table=True)

 

那么我们来说说它的优缺点:

优点:

(1)可以使用sklearn里面的model;

(2)可以可视化每个特征的贡献

缺点:

(1)变量中有缺失值的不能可视化,需要提前做缺失值处理

(2)看不懂预测结果0和1时的差异??可能是我们这个数据不够明显

参考资料:https://blog.csdn.net/fengdu78/article/details/118384216?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-118384216-blog-116108787.pc_relevant_multi_platform_whitelistv4eslandingrelevant&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-118384216-blog-116108787.pc_relevant_multi_platform_whitelistv4eslandingrelevant&utm_relevant_index=1

https://github.com/marcotcr/lime

 

标签:解释器,模型,train,ax,test,import,model,data,LIME
From: https://www.cnblogs.com/cgmcoding/p/16642237.html

相关文章

  • 面向对象分析设计之一--三个模型
    1.对象模型描述系统的静态结构,包括类和对象,它们的属性和操作,以及它们之间的关系。涉及UML图:类图、对象图2.动态模型着重于系统的控制逻辑,考察在任何时候对......
  • 利用Hugging Face中的模型进行句子相似性实践
      HuggingFace是什么?它作为一个GitHub史上增长最快的AI项目,创始人将它的成功归功于弥补了科学与生产之间的鸿沟。什么意思呢?因为现在很多AI研究者写了大量的论文和开源......
  • 【设计模式】25.行为型模式-解释器(Interpreter)
    一、描述给定一个语言,定义它的文法的一种标识,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式为自定义语言的设计和实现提供了一种解决方案,它用......
  • 机器学习模型中的无意识偏差
    机器学习模型中的无意识偏差您听说过多元化的团队可以创造更好的产品,但您是否看到它以数据驱动的方式得到证明?无意识的偏见影响着我们所有人。我们都在日常生活中做出假......
  • 什么是盒模型,如何进行不同盒模型的切换
    1、什么是盒子模型具备内容(content)、内边距(padding)、边框(border)、外边距(margin)这些属性2、盒模型有两种标准盒模型(W3C标准的盒子模型,大部分浏览器支持)怪异盒模型(......
  • 第四章 网络安全体系与网络安全模型
    1、网络安全体系特征(1)整体性:网络安全体系从全局、长远的角度实现安全保障,网络安全单元按照一定的规则,相互依赖、相互约束、相互作用而形成人机物一体化的网络安全保护......
  • R数据分析:用R建立预测模型
    预测模型在各个领域都越来越火,今天的分享和之前的临床预测模型背景上有些不同,但方法思路上都是一样的,多了解各个领域的方法应用,视野才不会被局限。今天试图再用一个实例给......
  • ARIMA时间序列模型,确定合适的 p 和 q 值
    图3自相关图、偏相关图通过观察图3中的acf图和pacf图,可以得到:自相关图显示滞后有三个阶超出了置信边界(第一条线代表起始点,不在滞后范围内);偏相关图显示在滞后1......
  • 周老师模型
    备份main.cpp#include<glad/glad.h>#include<GLFW/glfw3.h>#include<iostream>#include<Shader.cpp>#include<camera.cpp>#include<string>#include<vector>#de......
  • 序列化器:序列化一个模型对象和多个模型对象
    1.序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串2.反序列化,把客户端发送过来的数据,经过request以后变成字典,序列化器可以把字典转成模型......