揭秘乳腺癌预测黑科技:R语言和支持向量机的奇妙之旅!

news2024/11/27 6:19:59

一、引言

乳腺癌被认为是全球范围内最常见的癌症之一,对女性健康造成了重大威胁[1]。根据世界卫生组织的统计数据,乳腺癌是女性恶性肿瘤中的主要类型,并且是导致女性死亡的第二大原因[2]。这个事实凸显了乳腺癌在全球范围内的流行程度以及对公共卫生的重要性。因此,早期检测和准确预测乳腺癌是至关重要的。

本文旨在探讨乳腺癌预测的重要性和挑战。首先,我们描述了乳腺癌作为全球常见癌症的背景和重要性。随后,我们引入了乳腺癌预测的重要性,并强调了早期检测和准确预测对于提高患者生存率的重要性。然而,乳腺癌预测面临着多方面的挑战,包括乳腺癌复杂的发病机制、数据获取和处理的困难,以及模型选择和解释的问题。为了克服这些挑战,我们需要深入研究乳腺癌预测领域,并不断改进和优化预测方法和技术。通过准确的乳腺癌预测,我们可以提供更有效的医疗护理,为患者提供更好的预防和治疗策略。

二、乳腺癌预测技术概述

传统的乳腺癌预测方法在应对乳腺癌的复杂性和高维数据方面存在一些局限性,需要进一步改进。传统方法如逻辑回归和决策树等可以捕捉特征与乳腺癌之间的线性关系,但对于非线性关系的建模能力较弱。此外,这些方法依赖于人工选择的特征,可能忽略了潜在的重要特征。

支持向量机(SVM)是一种强大的机器学习方法,已经在乳腺癌预测中取得了显著的成果。SVM通过将样本映射到高维特征空间,并构建一个能够最大化分类间隔的超平面来实现分类任务。它通过引入核函数来处理非线性关系,从而捕捉到更复杂的数据模式。SVM还具有良好的泛化能力和鲁棒性,可以处理小样本和高维数据,对异常值和噪声有较好的容忍性。

三、支持向量机(SVM)简介

  • 「VM的原理和背景」

「支持向量机(Support Vector Machine,SVM)」 是一种常用的机器学习方法,最早由Vapnik等人于1995年提出。SVM的主要目标是找到一个超平面,将不同类别的实例样本在特征空间中分开。其核心思想是找到能够最大化两类样本之间的间隔的超平面。

SVM的训练过程可以归结为一个凸优化问题,其中目标是最小化模型参数的误差,并使得约束条件满足。通过引入拉格朗日乘子法和核函数,SVM能够处理非线性分割问题,并在高维特征空间中进行计算,从而更好地处理复杂数据。

  • 「线性分类和非线性分类的 SVM 模型」

对于线性可分的问题,SVM使用线性分类器来构建一个超平面,将不同类别的样本分开。这个超平面可以表示为w·x + b = 0,其中w是法向量,b是偏置项。SVM的目标是最大化两个平行超平面之间的间隔,使得样本点与超平面间的距离最大化。这些样本点被称为支持向量。

对于非线性可分的问题,SVM采用核函数的方式将数据映射到高维特征空间中。通过使用核函数,SVM可以将非线性问题转化为线性问题来解决,从而得到非线性分类模型。常用的核函数有线性核函数、多项式核函数和高斯径向基函数(RBF)核函数等。

  • 「SVM在乳腺癌预测中的优势和适用性」

SVM在乳腺癌预测中具有许多优势和适用性。首先,SVM可以处理高维特征空间中的数据,并且对于小样本集合也表现良好。其次,SVM能够处理非线性关系,通过使用核函数引入非线性特征映射,能够更好地捕捉数据中的复杂模式。此外,SVM的泛化能力较强,在面对新样本时具有较好的预测能力。

在乳腺癌预测中,SVM可以利用临床和影像数据进行特征提取和模式识别,以辅助诊断。例如,SVM可以利用乳腺X光、超声和核磁共振等影像数据,结合相关临床特征,进行乳腺肿瘤的分类和预测。相比传统的统计方法,SVM能够更准确地进行乳腺癌预测,并提高诊断的精确性。

四、实例展示

步骤一:数据准备与探索性分析

  • 1.数据集载入
# 导入所需的包
library(survival)
library(e1071)

# 加载"gbsg"数据集
head(gbsg)

结果展示:

# > head(gbsg)
  age meno size grade nodes pgr er hormon rfstime status
1  49    0   18     2     2   0  0      0    1838      0
2  55    1   20     3    16   0  0      0     403      1
3  56    1   40     3     3   0  0      0    1603      0
4  45    0   25     3     1   0  4      0     177      0
5  65    1   30     2     5   0 36      1    1855      0
6  48    0   52     2    11   0  0      0     842      1

  • 2.参数解释:
pid:患者ID
age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
  • 3.描述性统计:
summary(gbsg)

结果展示:

# > summary(gbsg)
      age             meno             size            grade           nodes            pgr               er              hormon          rfstime           status      
 Min.   :21.00   Min.   :0.0000   Min.   :  3.00   Min.   :1.000   Min.   : 1.00   Min.   :   0.0   Min.   :   0.00   Min.   :0.0000   Min.   :   8.0   Min.   :0.0000  
 1st Qu.:46.00   1st Qu.:0.0000   1st Qu.: 20.00   1st Qu.:2.000   1st Qu.: 1.00   1st Qu.:   7.0   1st Qu.:   8.00   1st Qu.:0.0000   1st Qu.: 567.8   1st Qu.:0.0000  
 Median :53.00   Median :1.0000   Median : 25.00   Median :2.000   Median : 3.00   Median :  32.5   Median :  36.00   Median :0.0000   Median :1084.0   Median :0.0000  
 Mean   :53.05   Mean   :0.5773   Mean   : 29.33   Mean   :2.117   Mean   : 5.01   Mean   : 110.0   Mean   :  96.25   Mean   :0.3586   Mean   :1124.5   Mean   :0.4359  
 3rd Qu.:61.00   3rd Qu.:1.0000   3rd Qu.: 35.00   3rd Qu.:2.000   3rd Qu.: 7.00   3rd Qu.: 131.8   3rd Qu.: 114.00   3rd Qu.:1.0000   3rd Qu.:1684.8   3rd Qu.:1.0000  
 Max.   :80.00   Max.   :1.0000   Max.   :120.00   Max.   :3.000   Max.   :51.00   Max.   :2380.0   Max.   :1144.00   Max.   :1.0000   Max.   :2659.0   Max.   :1.0000  
  • 4.绘制生存曲线:
library(ggplot2)
library(survminer)
# 绘制生存曲线
fit <- survfit(Surv(rfstime,status) ~ hormon,data = gbsg)
ggsurvplot(fit, data = gbsg,risk.table = TRUE,
  ggtheme = theme_bw(),
  xlab = "days",break.x.by=200,
  tables.y.text=FALSE,legend.title="",
  fontsize=5,break.y.by=0.2,
  font.x = 15,
  font.y = 15,
  font.tickslab = 15,
  font.legend = 15,
  ylab='Event-free survival probability',
  legend = c(0.90,0.85),pval.coord = c(5,0.25),pval.size=5,
  pval.family="Times New Roman",palette = c("red","green"))

步骤二:数据预处理

检查是否有空值:

colSums(is.na(gbsg))
set.seed(1234)
gbsg$status <- as.factor(gbsg$status)
# 拆分训练集和测试集
trainIndex <- sample(1:nrow(gbsg), 0.8 * nrow(gbsg))
train <- gbsg[trainIndex,]
test <- gbsg[-trainIndex,]

结果展示:

    age    meno    size   grade   nodes     pgr      er  hormon rfstime  status 
      0       0       0       0       0       0       0       0       0       0 

没有空值和缺失值,我们这里只是演示,就不做其它的处理

步骤三:构建支持向量机(SVM)模型

# 创建SVM模型
svm_model <- svm(status ~ ., data = train, kernel = "linear")
# 对测试数据进行分类预测
predictions <- predict(svm_model, newdata = test,type="prob")

# 评估模型性能
accuracy <- sum(predictions == test$status) / length(test$status)

# 计算ROC曲线的参数
roc_obj <- roc(test$status, as.numeric(as.character(predictions)))

plot(roc_obj, col = "blue", main = "ROC Curve", xlab = "False Positive Rate", ylab = "True Positive Rate", print.thres = TRUE, print.auc = TRUE, legacy.axes = TRUE)

准确率为0.797,有点低,有待提高。

五、结论

目前这个做的是分类诊断模型,对结果进行预测!如果想了解如何提高准确率?或者如何使用交叉验证的方式验证该模型?可以关注和私信我,我们一起讨论学习。

参考文献:

[1] World Health Organization. Breast Cancer. 2021.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库架构演变过程

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

ES系列--分析器

一、前言 ES进行文档分析就会涉及到分析器&#xff0c;无论是内置的分析器&#xff0c;还是自定义的分析器&#xff0c;都是由一个分词器&#xff08;tokenizers&#xff09; 、0或多个词项过滤器&#xff08;token filters&#xff09;、0或多个字符过滤器&#xff08;charact…

随机数检测(四)

随机数检测&#xff08;四&#xff09;- 累加和检测、近似熵检测、线性复杂度检测、Maurer通用统计检测、离散傅里叶检测 3.12 累加和检测方法3.13 近似熵检测方法3.14 线性复杂度检测3.15 Maurer通用统计检测3.16 离散傅里叶检测方法 如果商用密码产品认证中遇到问题&#xff…

Python应用实例(二)数据可视化(四)

数据可视化&#xff08;四&#xff09;下载数据 1.CSV文件格式1.1 分析CSV文件头‘1.2 打印文件头及其位置1.3 提取并读取数据1.4 绘制温度图表1.5 在图表中添加日期 从网上下载数据&#xff0c;并对其进行可视化。网上的数据多得令人难以置信&#xff0c;大多未经仔细检查。如…

智能车打开usb相机和激光雷达录制数据包的过程记录

首先&#xff0c;智能车的遥控器启动之后&#xff0c;要解除驻车挡位&#xff08;尾灯不亮红色才可以&#xff09;&#xff0c;然后右上角的那个拨杆是喇叭&#xff0c;对应的左上角的那个拨杆是控制挡位的&#xff0c;包括前进档&#xff0c;后退档。假如是前进&#xff0c;往…

【我们一起60天准备考研算法面试(大全)-第十五天 15/60】【摩尔投票法】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

CSAPP Lab入门探索

此为记录 虚拟机准备工作 下载VMware 直接在浏览器中搜索VMware Workstation即可 等待 安装就是直接下一步下一步即可&#xff0c;那个安装路径也改下&#xff0c;默认是装在系统盘中 许可证: 直接在百度中搜索VMware Workstation 17 Pro密钥大全即可 这里给出一个参考的&…

人体姿态估计动作识别调研报告

人体姿态估计&动作识别 视频演示 Refs: https://www.zhihu.com/zvideo/1227562268420235264 姿态估计与行为识别&#xff08;行为检测、行为分类&#xff09;的区别 Refs&#xff1a;姿态估计与行为识别&#xff08;行为检测、行为分类&#xff09;的区别 姿态估计 定…

两分钟倒计时 - 啊哈C语言 第4章第5节

题目要求&#xff1a; 尝试编写一个两分钟的倒计时&#xff0c;形如&#xff1a;2:00 1:59 1:58 … 1:00 0:59 0:58 … 0:02 0:01 0:00 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #include<windows.h> int main(){int a2,b0;while(a>0 &…

SpringMVC的XML配置解析-spring18

SpringMVC的有很多组件&#xff1a;&#xff08;这些我们都可以用配件进行配置&#xff09; 1、充沛器 2、映射器 3、视图解析器 默认情况下他们要使用哪个组件&#xff0c;我们可以挖一下&#xff1a; 第一个重叠器映射器 第二个 重叠器适配器 第三个 视图适配器 打开看…

Vue生命周期详解学习笔记

生命周期 生命周期又名生命周期回调函数&#xff0c;生命周期函数&#xff0c;生命周期钩子。生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数。生命周期函数的名字不可更改&#xff0c;但函数的具体内容是程序员根据需求编写的。生命周期中的this指向vm或组件实例对象…

【PHP面试题48】Redis的事务?事务都有哪些注意的地方?

文章目录 一、关于事务1.1 事务的概念和优势1.2 Redis事务的基本用法 二、Redis事务的注意事项2.1 使用WATCH监视关键变量2.2 避免长时间事务2.3 避免事务中的循环2.4 处理事务执行结果2.5 考虑使用管道2.6 使用合适的事务隔离级别2.7 考虑事务的并发性2.8 监控事务执行情况 总…

项目管理进度管理神器:有效方法分享

在项目管理中&#xff0c;进度管理是至关重要的环节&#xff0c;它可以帮助项目团队及时发现和解决问题&#xff0c;确保项目按计划顺利进行。一个有效的进度管理方案需要考虑多方面的因素&#xff0c;包括任务分解、时间控制、资源分配、风险管理等。 如何有效的管理项目进度&…

剑指 Offer 68 - II. 二叉树的最近公共祖先

题目介绍 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

FL Studio2023最新中文版混音编曲宿主软件及电脑配置要求

现在大部分音乐的制作过程都是在宿主软件中完成的&#xff0c;宿主软件又称数字音频工作站&#xff0c;简写为DAW软件。目前市面上有非常多的宿主软件供大家选择&#xff0c;例如Cubase、Logic Pro以及我一直使用的FL Studio。每款不同的宿主软件都有不同的优缺点&#xff0c;所…

MFC第十七天 CFont类与LOGFONT结构体、记事本文件打开和保存及是否保存的逻辑流程分析、PreTranslateMessage虚函数与快捷键

文章目录 CFont类与LOGFONT结构体CFontDialog字体信息结构体与HFONT句柄的关系 记事本文件拖入、打开和保存及是否保存的逻辑流程分析PreTranslateMessage虚函数与快捷键附录 CFont类与LOGFONT结构体 CFontDialog 构造函数介绍 public: //用于指定字体对话框的初始字体属性&…

C# Modbus通信从入门到精通(4)——Modbus RTU(0x02功能码)

1、02(0x02)读线圈输入 使用该功能码能从远程地址中读取1到2000个输入线圈的状态,每个线圈的状态只能是0或者1,读取的线圈数量由主站读取时指定。 2、发送报文格式 更详细的格式如下: 从站地址+功能码+起始地址高位+起始地址低位+线圈数量高位+线圈数量低位+CRC,一共8个…

Linux进程理解【程序地址空间】

Linux进程理解【程序地址空间】 文章目录 Linux进程理解【程序地址空间】1. 话题引入2. 进程地址空间2.1 虚拟地址2.2 写时拷贝 3. 知识扩展 我们先来看看C/C程序地址空间的分布图 如此多区域的划分是为了更好的使用和管理空间&#xff0c;但是真实的内存空间也是按照图上的地址…

nginx的下载与安装

https://nginx.org/en/download.html 下载地址&#xff08;我下载的是1.20.2&#xff09; 1、首先保证可以连接外网 2、将包拖入opt/nginx 3、安装gcc环境 &#xff08;如果出现问题可以参考https://www.cnblogs.com/lzxianren/p/4254059.html&#xff09; yum -y install gc…

你还在手动对比代码差异?这些高质量工具太香了

B站|公众号&#xff1a;啥都会一点的研究生 我发现相当一部分初学者&#xff08;甚至搬砖多年的老同志&#xff09;在对比文件差异的时候居然还是 观察法 文本内容少还凑活能用&#xff0c;成百上千行的时候把眼睛累坏了不说&#xff0c;关键还容易漏信息 接触的人与事多了会…