对于已交付(客户流失预警)模型的模型可解释LIME

目录

介绍: 

数据: 

数据处理:

随机森林建模: 

LIME

例一:

例二:

介绍: 

LIME (Local Interpretable Model-agnostic Explanations) 是一种解释机器学习模型的方法。它通过生成一个可解释模型,来解释黑盒模型的预测。LIME的主要思想是在附近生成一组局部数据点,然后使用可解释模型来逼近黑盒模型在这些数据点上的预测。通过解释局部数据点上的预测结果,LIME可以帮助我们理解黑盒模型的决策过程,并提供对预测结果的解释。LIME广泛应用于解释图像分类、自然语言处理和其他机器学习任务中的模型预测。

LIME的核心函数是`lime.lime_tabular.LimeTabularExplainer`,它用于解释基于表格数据的模型。这个函数有以下参数:- `training_data`: 用于训练解释模型的样本数据。
- `feature_names`: 具有特征名称的特征的列表。
- `class_names`: 目标变量的名称。
- `mode`: 解释模型的模式,默认为 "classification",也可以设置为 "regression"。
- `discretize_continuous`: 是否对连续特征进行离散化,默认为 True。
- `discretizer`: 离散化连续特征的方法,默认为 "quartile"。
- `feature_selection`: 用于选择最重要特征的方法,默认为 "auto"。
- `kernel_width`: 连续特征离散化后的宽度,默认为 None。
- `verbose`: 控制详细程度的标志,默认为 False。另外,使用`explain_instance`函数可以为给定的实例解释模型的预测结果。这个函数有以下参数:- `data_row`: 要解释的实例数据。
- `predict_fn`: 用于预测的函数。
- `num_features`: 返回解释结果中重要特征的数量,默认为 10。
- `top_labels`: 返回解释结果中预测结果的数量,默认为 1。
- `labels`: 预测结果的标签。
- `categorical_features`: 类别型特征的索引。
- `categorical_names`: 类别型特征的名称。这些函数是LIME的核心组成部分,帮助我们解释机器学习模型的预测结果。

数据: 

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd# Importing the dataset
data = pd.read_csv('Churn_Modelling.csv')
X = data.iloc[:, 3:13]
y = data.iloc[:, 13]data.isnull().sum()
'''
RowNumber          0
CustomerId         0
Surname            0
CreditScore        0
Geography          0
Gender             0
Age                0
Tenure             0
Balance            0
NumOfProducts      0
HasCrCard          0
IsActiveMember     0
EstimatedSalary    0
Exited             0
dtype: int64
'''
data

数据处理:

#Create dummy variables 机器不能识别字符,转为数字
geography=pd.get_dummies(X["Geography"],drop_first=True)
gender=pd.get_dummies(X['Gender'],drop_first=True)## Concatenate the Data FramesX=pd.concat([X,geography,gender],axis=1)## Drop Unnecessary columns
X=X.drop(['Geography','Gender'],axis=1)

随机森林建模: 

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)from sklearn.ensemble import RandomForestClassifier
classifier=RandomForestClassifier()
classifier.fit(X_train,y_train)y_pred=classifier.predict(X_test)
#Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics# Model Accuracy, how often is the classifier correct?
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
#结果:Accuracy: 0.8646666666666667

LIME

import pickle
pickle.dump(classifier, open("classifier.pkl", 'wb'))classifier1=pd.read_pickle('classifier.pkl')import lime
from lime import lime_tabularinterpretor = lime_tabular.LimeTabularExplainer(training_data=np.array(X_train),#用于训练解释模型的样本数据。feature_names=X_train.columns,#具有特征名称的特征的列表。mode='classification'#解释模型的模式,默认为 "classification",也可以设置为 "regression"。
)# feature importance of the random forest model
feature_importance = pd.DataFrame()
feature_importance['variable'] = X_train.columns
feature_importance['importance'] = classifier1.feature_importances_# feature_importance values in descending order
feature_importance.sort_values(by='importance', ascending=False).head(10)#该模型权重

例一:

X_test.iloc[88]
'''结果:
CreditScore           756.00
Age                    39.00
Tenure                  3.00
Balance            100717.85
NumOfProducts           3.00
HasCrCard               1.00
IsActiveMember          1.00
EstimatedSalary     73406.04
Germany                 1.00
Spain                   0.00
Male                    0.00
Name: 1096, dtype: float64
'''print('prediction: {}'.format(classifier1.predict(X_test.iloc[[88],:])))
#结果:prediction: [1]exp = interpretor.explain_instance(data_row=X_test.iloc[88], ##new data要解释的实例数据predict_fn=classifier1.predict_proba#: 用于预测的函数。
)exp.show_in_notebook(show_table=True)#该人可能属于流失或不流失的概率及各特征占比可能性

exp.as_pyplot_figure()

 

例二: 

exp = interpretor.explain_instance(data_row=X_test.iloc[2], ##new datapredict_fn=classifier1.predict_proba,num_features=10
)X_test.iloc[2]
'''结果:
CreditScore          706.00
Age                   42.00
Tenure                 8.00
Balance            95386.82
NumOfProducts          1.00
HasCrCard              1.00
IsActiveMember         1.00
EstimatedSalary    75732.25
Germany                0.00
Spain                  1.00
Male                   0.00
Name: 2398, dtype: float64
'''exp.show_in_notebook(show_table=True,show_all=False)

exp.as_pyplot_figure()

 

exp.as_list()
'''结果:
[('0.00 < IsActiveMember <= 1.00', -0.11661097094408614),('NumOfProducts <= 1.00', 0.08686460877739129),('Male <= 0.00', 0.043159886277428304),('Germany <= 0.00', -0.029197882161009953),('652.00 < CreditScore <= 719.00', -0.022598898299313823),('50910.68 < EstimatedSalary <= 99954.45', -0.01532003910694092),('Spain > 0.00', 0.013041709019348565),('37.00 < Age <= 44.00', -0.009812578647407045),('0.00 < HasCrCard <= 1.00', -0.008498455231089774),('Tenure > 7.00', -0.0038766005937966638)]​
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439023.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI_Design】Midjourney学习笔记

目录 后缀解析Promot合格使用prompt关键词描述 关键词化合作用关键词网站推荐 联合Chatgpt 后缀解析 –ar&#xff1a;宽高比设置–c&#xff1a;多样性设置&#xff08;数值0-100&#xff0c;默认值0&#xff09;–s&#xff1a;风格化设置&#xff08;数值0-1000&#xff0c…

Java 与 JavaScript的区别

Java 与 JavaScript的区别 Java 与 JavaScript&#xff1a;概述Java的特点JavaScript 的起源JavaScript 的特点Java 与 JavaScript&#xff0c;哪个更好&#xff1f;JavaScript 与 Java 相似吗&#xff1f;Java 与 JavaScript 的区别JavaScript 在服务器端的运行方式是怎样的&a…

《HTML 简易速速上手小册》第10章:HTML 的维护与优化(2024 最新版)

文章目录 10.1 网页性能优化10.1.1 基础知识10.1.2 案例 1&#xff1a;优化网页图像10.1.3 案例 2&#xff1a;使用延迟加载优化性能10.1.4 案例 3&#xff1a;优化 CSS 和 JavaScript 的加载 10.2 SEO 最佳实践10.2.1 基础知识10.2.2 案例 1&#xff1a;创建一个 SEO 友好的博…

Linux系统Shell脚本-----------正则表达式 、grep、 sed

一、正则表达式 1.前言 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。在Linux中也就是代表我们定义的模式模板&…

常用芯片学习——AMS1117芯片

AMS1117 1A 低压差线性稳压器 使用说明 AMS1117 是一款低压差线性稳压电路&#xff0c;该电路输出电流能力为1A。该系列电路包含固定输出电压版本和可调输出电压版本&#xff0c;其输出电压精度为士1.5%。为了保证芯片和电源系统的稳定性&#xff0c;XBLWAMS1117 内置热保护和…

基于Pytorch的DDP训练Mnist数据集

在前几期的博文中我们讲了pytorch的DDP&#xff0c;但是当时的demo是自制的虚拟数据集&#xff08;Pytorch分布式训练&#xff1a;DDP&#xff09;&#xff0c;这期文章我们使用Mnist数据集做测试&#xff0c;测试并完善代码。 快速开始 1. 我们修改一下main函数&#xff0c;在…

MySQL之索引使用原则详解(验证索引效率,SQL提示等)

索引使用 验证索引效率 在未建立索引之前&#xff0c;执行如下SQL语句&#xff0c;查看SQL的耗时 select * from tb_user where id 1; 针对字段创建索引 create index idx_sku_sn on tb_sku(sn) ; 针对于用户量大的表中&#xff0c;添加索引要比没有添加索引的字段查询…

【基础算法练习】单调队列与单调栈模板

文章目录 单调栈模板题代码模板算法思想 单调队列模板题代码模板算法思想 单调栈 模板题 题目链接&#xff1a;ACwing 830. 单调栈 代码模板 #include <iostream> #include <vector> #include <stack>using namespace std;const int N 100010;vector<…

STM32标准库+HAL库 | 输入捕获测量PWM的脉冲频率+占空比

提醒&#xff1a;本文的代码Demo中使用的是&#xff0c;单通道捕捉采集PWM输入信号的频率占空比。 在上一篇博客中已经讲解了过PWM输出配置&#xff0c;本文主要讲解TIM输入捕获配置。STM32标准库HAL库 | 高精度动态调节PWM输出频率占空比_hal库改变pwm频率-CSDN博客 目录 1…

Mac安装配置maven

Mac安装配置maven 官网下载地址&#xff1a;https://maven.apache.org/download.cgi 下载好以后解压配置 maven 环境变量 打开终端&#xff0c;输入命令打开配置文件./bash_profile open ~/.bash_profile输入i进入编辑模式,进行maven配置; MAVEN_HOME为maven的本地路径 ex…

机器学习3-简单线性回归

需求&#xff1a; 现在要根据学生的学习时间来预测学习成绩&#xff0c;给出现有数据&#xff0c;用来训练模型并预测新数据。 分析&#xff1a; 使用线性回归模型。 代码&#xff1a; import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection i…

蓝桥杯备战——8.DS1302时钟芯片

1.分析原理图 由上图可以看到&#xff0c;芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。 2.查阅DS1302芯片手册 具体细节还需自行翻阅手册&#xff0c;我只截出重点部分 总结&#xff1a;数据在上升沿写出&#xff0c;下降沿读入&#xff0c;…