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

本文主要是介绍机器学习-可解释性机器学习:支持向量机与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值计算效率的同时,也能保持解释性的优势,使得解释性机器学习更加实用。

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

这篇关于机器学习-可解释性机器学习:支持向量机与fastshap的可视化模型解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834141

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程