机器学习-可解释性机器学习:支持向量机与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

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

全面解析HTML5中Checkbox标签

《全面解析HTML5中Checkbox标签》Checkbox是HTML5中非常重要的表单元素之一,通过合理使用其属性和样式自定义方法,可以为用户提供丰富多样的交互体验,这篇文章给大家介绍HTML5中C... 在html5中,Checkbox(复选框)是一种常用的表单元素,允许用户在一组选项中选择多个项目。本

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

华为鸿蒙HarmonyOS 5.1官宣7月开启升级! 首批支持名单公布

《华为鸿蒙HarmonyOS5.1官宣7月开启升级!首批支持名单公布》在刚刚结束的华为Pura80系列及全场景新品发布会上,除了众多新品的发布,还有一个消息也点燃了所有鸿蒙用户的期待,那就是Ha... 在今日的华为 Pura 80 系列及全场景新品发布会上,华为宣布鸿蒙 HarmonyOS 5.1 将于 7

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

深入解析 Java Future 类及代码示例

《深入解析JavaFuture类及代码示例》JavaFuture是java.util.concurrent包中用于表示异步计算结果的核心接口,下面给大家介绍JavaFuture类及实例代码,感兴... 目录一、Future 类概述二、核心工作机制代码示例执行流程2. 状态机模型3. 核心方法解析行为总结:三

springboot项目中使用JOSN解析库的方法

《springboot项目中使用JOSN解析库的方法》JSON,全程是JavaScriptObjectNotation,是一种轻量级的数据交换格式,本文给大家介绍springboot项目中使用JOSN... 目录一、jsON解析简介二、Spring Boot项目中使用JSON解析1、pom.XML文件引入依