机器学习-可解释性机器学习:支持向量机与fastshap的可视化模型解析

一、引言

支持向量机(Support Vector Machine, SVM)作为一种经典的监督学习方法,在分类和回归问题中表现出色。其优点之一是生成的模型具有较好的泛化能力和可解释性,能够清晰地展示特征对于分类的重要性。

fastshap是一种用于快速计算SHAP值(SHapley Additive exPlanations)的工具,通过近似SHAP值的计算加速了模型的解释过程,使得模型的解释更为高效和可视化。

综上所述,本文将探讨支持向量机和fastshap在可解释性机器学习中的作用。通过结合支持向量机和fastshap,我们可以深入分析模型的决策过程,解释模型的预测结果,从而提高模型的可解释性和可信度。

二、SVM简介

2.1 SVM的原理和优点

支持向量机(Support Vector Machine, SVM)的原理是通过寻找最大间隔超平面来进行分类或回归。在二分类情况下,SVM的目标是找到一个能够将不同类别的数据点分开的超平面,并且使得该超平面到最近的数据点(支持向量)的距离最大化。这种最大化间隔的方法使得SVM具有较强的泛化能力。

对于线性不可分的情况,SVM可以通过核函数将数据映射到高维空间,从而在高维空间中找到一个线性可分的超平面,从而解决非线性分类问题。

  1. 「泛化能力强」:SVM通过最大化间隔的方式进行分类,因此对未知数据的泛化能力较强,有较好的预测性能。
  2. 「高维空间的处理能力」:SVM可以通过核函数将数据映射到高维空间,从而处理线性不可分的问题。
  3. 「对特征的依赖较小」:SVM在模型训练过程中主要依赖支持向量,对于非支持向量的数据点不敏感,可以避免维度灾难和过拟合问题。
  4. 「有效处理小样本数据」:SVM在小样本数据情况下表现出色,可以有效地进行分类和回归。 总的来说,SVM具有较强的泛化能力、高维空间处理能力以及对特征的不敏感性等优点,使其成为机器学习中广泛应用的方法之一。

2.2 SVM在机器学习中的应用场景

  1. 文本分类:SVM可以用于对文本进行分类,如垃圾邮件识别、情感分析等。
  2. 识别:SVM可以应用于图像分类和目标检测等领域,例如人脸识别、车牌识别等。
  3. 生物信息学:SVM在基因分类、蛋白质分类等生物信息学领域有着重要应用。

综上所述,支持向量机作为一种强大的监督学习方法,在文本分类、图像识别、生物信息学等领域展现出了良好的应用前景,同时其高维空间处理能力和泛化能力也使其成为解决复杂问题的重要工具。

三、fastshap方法封装

FastSHAP 是一个用于加速 SHAP(SHapley Additive exPlanations)计算的工具,旨在提高模型可解释性的效率和准确性。

library(magrittr)
library(tidyverse)
library(fastshap)
plot_shap <- function(model,newdata){
    shap <- explain(rf,X=newdata,nsim=10,
        pred_wrapper = function(model,newdata){
           predict(rf, newdata = newdata, type = "class")
        })
    shap_handle <- shap %>% as.data.frame() %>% mutate(id=1:n()) %>% pivot_longer(cols = -(ncol(train_data[,-10])+1),values_to="shap"# 长宽数据转换
    data2 <- newdata %>% mutate(id=1:n()) %>% pivot_longer(cols = -(ncol(newdata)+1))

    shap_scale <- shap_handle %>%
        left_join(data2)%>%
        rename("feature"
        ="name")%>%
        group_by(feature)%>%
        mutate(value=(value-min(value))/(max(value)-min(value))) %>% sample_n(200)
        
    p <- ggplot(data=shap_scale, aes(x=shap, y=feature, color=value)) +
      geom_jitter(size=2, height=0.1, width=0) +
      scale_color_gradient(low="#FFCC33", high="#6600CC", breaks=c(01), labels=c("Low""High"), 
                           guide=guide_colorbar(barwidth=2, barheight=30), 
                           name="Feature value"
                           aesthetics = c("color")) + theme_bw()
      
    return(p)
}

四、实例展示

  • 「数据集准备」
library(survival)
head(gbsg)

结果展示:

   pid age meno size grade nodes pgr er hormon rfstime status
1  132  49    0   18     2     2   0  0      0    1838      0
2 1575  55    1   20     3    16   0  0      0     403      1
3 1140  56    1   40     3     3   0  0      0    1603      0
4  769  45    0   25     3     1   0  4      0     177      0
5  130  65    1   30     2     5   0 36      1    1855      0
6 1642  48    0   52     2    11   0  0      0     842      1
  • 「示例数据集介绍」
> str(gbsg)
'data.frame':   686 obs. of  10 variables:
 $ age    : int  49 55 56 45 65 48 48 37 67 45 ...
 $ meno   : int  0 1 1 0 1 0 0 0 1 0 ...
 $ size   : int  18 20 40 25 30 52 21 20 20 30 ...
 $ grade  : int  2 3 3 3 2 2 3 2 2 2 ...
 $ nodes  : int  2 16 3 1 5 11 8 9 1 1 ...
 $ pgr    : int  0 0 0 0 0 0 0 0 0 0 ...
 $ er     : int  0 0 0 4 36 0 0 0 0 0 ...
 $ hormon : int  0 0 0 0 1 0 0 1 1 0 ...
 $ rfstime: int  1838 403 1603 177 1855 842 293 42 564 1093 ...
 $ status : Factor w/ 2 levels "0","1"1 2 1 1 1 2 2 1 2 2 ...

age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 「划分训练集和测试集」
# 划分训练集和测试集
set.seed(123)
data <- gbsg[,c(-1)]


# 划分训练集和测试集
set.seed(123)
train_indices <- sample(x = 1:nrow(data), size = 0.7 * nrow(data), replace = FALSE)
test_indices <- sample(setdiff(1:nrow(data), train_indices), size = 0.3 * nrow(data), replace = FALSE)

train_data <- data[train_indices, ]
test_data <- data[test_indices, ]

train_data_feature <- train_data[,-10]
train_data_label <- as.numeric(as.character(train_data$status))
  • 「模型拟合」
library(e1071)
library(pROC)
model <- svm(train_data_feature, train_data_label) 
pred_prob <- predict(model, newdata =train_data_feature,type="raw",threshold = 0.001)
# 计算ROC曲线的参数
roc <- roc(train_data_label, pred_prob)
plot(roc, col = "blue", main = "ROC Curve", xlab = "False Positive Rate", ylab = "True Positive Rate", print.auc = TRUE, legacy.axes = TRUE)


# 绘制shap图
plot_shap(model,train_data_feature)

五、总结

总结支持向量机(Support Vector Machine, SVM)与FastSHAP在可解释性机器学习中的作用:

「支持向量机(SVM)」


  • SVM是一种常用的机器学习算法,主要用于分类和回归任务。
  • 在可解释性方面,SVM的决策边界可以清晰地将不同类别的数据分开,使得模型的预测过程相对容易理解。
  • 可以通过观察支持向量等方式来解释SVM模型的预测结果,帮助用户理解模型的决策依据。

「FastSHAP」


  • FastSHAP是一种加速版的SHAP(SHapley Additive exPlanations)计算方法,用于解释复杂模型的预测过程。
  • 通过FastSHAP可以有效地计算特征的SHAP值,帮助用户理解模型对于不同特征的依赖程度。
  • FastSHAP在提高SHAP值计算效率的同时,也能保持解释性的优势,使得解释性机器学习更加实用。

*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】弥补C语言的不足(②有默认参数的函数)

&#x1f33b;缺省参数 我们先来看一个简单地例子&#xff0c;对于在函数的定义中三个形参都给定默认值&#xff1a; #include <iostream> using namespace std; void fun(int a 10, int b 20, int c 30) {cout << "a " << a << endl;…

RentrantLock关键字详解

一、什么是AQS 全称是 AbstractQueuedSynchronizer&#xff08;队列同步器&#xff0c;下文简称同步器&#xff09;&#xff0c;是阻塞式锁和相关的同步器工具的框架&#xff0c;它是构建锁或者其他同步组件的基础框架。【AQS是实现锁的关键&#xff0c;在锁的实现中聚合同步器…

Python:柱状-折线图

写论文&#xff0c;需要画数据分析图&#xff1a; 用柱状图描述算法执行时间用折线图描述性能改进 示例代码&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib.pyplot import MultipleLocatorSecurity ["128", "192",…

供电营业厅安防监控视频智能监管解决方案

一、方案背景 供电营业厅作为电力服务的重要窗口&#xff0c;其运营效率和客户满意度直接影响到企业的形象和声誉。在传统的监管模式下&#xff0c;供电营业厅的监控系统与其他消防报警、门禁系统等独立运行&#xff0c;无法做到集中管理、综合监控。为了提升供电营业厅的安防及…

windows上打开redis服务闪退问题处理

方法1&#xff1a;在windows上面打开redis服务时&#xff0c;弹窗闪退可能是6379端口占用&#xff0c;可以用以下命令查看&#xff1a; netstat -aon | findstr 6379 如果端口被占用可以用这个命令解决&#xff1a; taskkill /f /pid 进程号 方法2&#xff1a; 可以使用…

Astra plus 深度相机校准标定

前期工作 在ros中已配置Astra plus 并且深度&#xff0c;ir&#xff0c;彩色图像 首先获取依赖项并编译驱动程序 sudo apt install ros-$ROS_DISTRO-camera-calibration 启动相机 source ./devel/setup.bash roslaunch astra_camera astra_plus.launch 查看发布主题 rostop…

HubSpot社交媒体与CRM数据整合:精准定位与营销优化的新路径

在当今数字化时代&#xff0c;社交媒体与CRM&#xff08;客户关系管理&#xff09;系统已经成为企业营销与客户服务的重要工具。然而&#xff0c;这两大系统之间的数据割裂往往导致企业无法充分利用各自的优势&#xff0c;实现更精准的定位和更有效的营销。HubSpot作为一款功能…

大数据推给需要的人

1.编写一个程序&#xff0c;把变量n的初始值设置为1678&#xff0c;然后利用除法运算和取余运算把变量的每位数字都提出来并打印&#xff0c;输出结果为&#xff1a;n1678n的每位数字是1,6,7,8。 public static void main(String[]args) {int n1678;int a,b,c,d;an%10;bn/10%1…

原创!分解+集成思想新模型!VMD-CNN-BiGRU-Attention一键实现时间序列预测!以风速数据集为例

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 数据介绍 模型流程 创新点 结果展示 部…

基于electron29版本桌面应用app开发例子

基于electron29版本桌面应用app开发例子 htmljsnode.js 开发模式 生成package.json文件&#xff1a; yarn init --yes 或 npm init --yes 运行打包 yarn dev yarn build # electron与electron-builder版本不兼容问题处理办法&#xff1a; 在package.json中scripts中添加 “…

世媒讯软文营销策略如何做才能达到引流的目的

软文营销是一种通过撰写软文来宣传企业、产品或服务的网络营销方式。通过撰写具有故事性、吸引人的文章来间接推广产品、服务或品牌的营销策略。要实现软文营销的目的&#xff0c;即引流&#xff08;吸引流量&#xff09;&#xff0c;以下是一些有效的策略&#xff1a; 新闻策略…

10.注册页面

注册页面 在pages中新建页面register 复制粘贴之前的登录页面 设置上传头像图片 微信官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/userProfile.html <button class"avatar-wrapper" open-type"chooseAvatar&quo…

PCL安装(C++)并配置vs

准备工作&#xff1a; 1.PCL下载包(此教程使用PCL1.11.0) 3.visual studio(此教程使用vs2019) PCL下载&#xff1a; 1、找到自己适合的PCL版本,我选择的是PCL1.11.0。 1.1 Github下载&#xff1a;Releases PointCloudLibrary/pcl GitHub 1.2 百度网盘&#xff1a;https://pan…

初识数据库原理:为什么需要数据库?

初识数据库原理&#xff1a;什么是数据库&#xff1f; Chapter1&#xff1a;什么是数据库&#xff1f; 笔记来源&#xff1a;《漫画数据库》–科学出版社 1.1 为什么需要数据库&#xff1f; 文件应用的管理方式&#xff0c;数据会出现重复。 若各个部门各自管理自己一方的数…

牛客NC196 编辑距离(一)【较难 DFS/DP,动态规划,样本对应模型 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da 思路 编辑距离问题 什么是两个字符串的编辑距离&#xff08;edit distance&#xff09;&#xff1f;给定字符串s1和s2&#xff0c;以及在s1上的如下操作&#xff1a;插入&…

【ARM】DSTREAM上面的各个指示灯代表什么意思?

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 对于DStream仿真器上面的指示灯亮灭代表的意义进行分析。 2、 问题场景 主要对于DStream仿真器的使用过程中&#xff0c;不同的情况下面仿真器的指示灯会进行相应的亮灭。了解一下不同指示灯的亮灭所提示的信息…

部署Prometheus+grafana详解

目录 一、prometheus 介绍 二、prometheus 对比 zabbix 三、prometheus 监控插件 四、部署 1、下载所需的包 2.编辑prometheus的配置文件 3、编辑alertmanager 的配置文件 4、tmpl 模板&#xff08;将此文件创建在/opt/alertmanager/tmpl/&#xff09; 5.启动&#xff0…

Google colab中如何从kaggle中接入数据?

写在前面 使用google colab进行数据分析和探索时&#xff0c;可引用的数据源包括但不限于&#xff1a;1.可上传的数据文件用本地加载的的方式打开数据资源&#xff1b;2.从网络链接中直接打开后加载到缓存中的文件资源&#xff1b;3.通过API或者外部的开放接口加载数据&#x…

人生亏钱指南pdf分享【谨防上当】【警钟长鸣】不知道动了多少人蛋糕,看到后赶快收藏起来

查理芒格&#xff1a;如果知道我会死在哪里&#xff0c;那我将永远不去那个地方 书中分别投资篇、知识付费篇、合伙合作篇、实体项目篇、欺诈篇、借贷篇、健康篇等方向详细解释可能亏钱的坑&#xff01; 书中说到&#xff1a; 成年人的世界&#xff0c;踩坑已是日常&#xff0…

java框架 2 springboot 过滤器 拦截器 异常处理 事务管理 AOP

Filter 过滤器 对所有请求都可以过滤。 实现Filter接口&#xff0c;重写几个方法&#xff0c;加上WebFilter注解&#xff0c;表示拦截哪些路由&#xff0c;如上是所有请求都会拦截。 然后还需要在入口处加上SvlterComponentScan注解&#xff0c;因为Filter是javaweb三大组件之…