R语言使用survivalsvm包进行支持向量机生存分析

news2024/11/15 19:30:51

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知样本的良好泛化能力。

在这里插入图片描述
在既往文章《R语言手把手教你进行支持向量机分析》文章中,咱们已经介绍了e1071包进行支持向量机分析,今天咱们继续来介绍survivalsvm包进行支持向量机的生存分析,继续使用我们的乳腺癌数据(公众号回复:乳腺癌,可以获得数据)我们先导入数据和R包

library(survivalsvm)
library(survival)
library(foreign)
bc <- read.spss("E:/r/Breast cancer survival agec.sav",
                use.value.labels=F, to.data.frame=T)
bc <- na.omit(bc)

在这里插入图片描述
我们先来看看数据:
age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,后面的agec是我们自己设定的,不用管它。
先把分类变量转成因子

bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)
bc$histgrad<-as.factor(bc$histgrad)
bc$pathscat<-as.factor(bc$pathscat)

把数据分成建模集和验证集

set.seed(12345)
tr1<- sample(nrow(bc),0.7*nrow(bc))##随机无放抽取
bc_train <- bc[tr1,]#70%数据建模集
bc_test<- bc[-tr1,]#30%数验证据集

建立生存分析支持向量机的模型,和生存分析的有点类似

survsvm.pr1 <- survivalsvm(Surv(time, status) ~ age+pathsize+er+pr,data = bc_train,
                           type = "regression", gamma.mu = 0.25,
                           opt.meth = "quadprog", kernel = "add_kernel")

type表示需要那种向量模型,默认的是regression,指的是SVCR的回归方法,此外还有’vanbelle1’, ‘vanbelle2’ or ‘hybrid’. gamma.mu是个正则化参数。Kernel表示使用什么内核,这里使用加性内核

在这里插入图片描述
接下来生存预测值,并且把预测值提取出来

predsurvsvm<- predict(object = survsvm.pr1,newdata = bc_test)
predtest<-predsurvsvm[["predicted"]]

在这里插入图片描述
开始我看到结果有点懵,这是预测啥呀,这个不是预测概率,我看到有些文章把这个当作概率来跑,还画了roc和决策曲线什么的,肯定不对的。作者在R包内也表示,这是个预测的值,那就不是概率,主要看是什么的预测值。

在这里插入图片描述
捣鼓了一下发现竟然是预测生存时间,我把数据提出来

bc_test$predtest<-as.numeric(predtest)

在这里插入图片描述
这样一看有些好像预测得还不错。
为什么我能确定这个是预测生存时间,因为作者还写了个mlr3得学习器,我又试着跑了一遍,先把辅助包安装好,需要到github上下载

library("mlr3verse")
library("mlr3proba")
library("survival")
library(mlr3extralearners)
library(survivalsvm)

建立任务

task = as_task_surv(bc, 
                    time = "time",
                    event = "status", 
                    id = "bc")

进行数据划分,splits里面装着建模和验证集

splits = partition(task, ratio = 0.7)
splits

定义学习器(就是选哪个R包来分析),这里选"surv.svm"

learner_rpart = lrn("surv.svm",
                    type = "regression", 
                    gamma.mu = 1e-3)

学习器先训练一下(其实就是用R包生成模型)

learner_rpart$train(task, row_ids = splits$train)
learner_rpart

在这里插入图片描述
生存验证组验证值

predictions = learner_rpart$predict(task, row_ids = splits$test)

也可以用一个连续得写法,都是一样得就是稍微难理解一点

pred = lrn("surv.svm", 
           type = "regression", 
           gamma.mu = 1e-3)$train(task, splits[["train"]])$predict(task,splits[["test"]])

咱们看下前10行预测值和真实值得比较
在这里插入图片描述
再看下验证集数据

bc[splits[["test"]],]

在这里插入图片描述
因此预测得就是生存时间啦。

实际运用一下,假设有2个乳腺癌病人数据如下,请问他能活多久

在这里插入图片描述
假设这个数据为aa

predict(object = survsvm.pr1,newdata = aa)[["predicted"]]

在这里插入图片描述
这个包美中不足得是并没有提供交叉验证优化参数得函数,我试着调整了一下gamma.mu这个参数,对预测值影响还是很大得。

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

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

相关文章

LeetCode题练习与总结:二叉树中的最大路径和--124

一、题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 ro…

swift微调牧歌数据电商多模态大语言模型

大规模中文多模态评测基准MUGE_数据集-阿里云天池多模态理解和生成评估挑战榜(MUGE)是由阿里巴巴达摩院智能计算实验室发起,由阿里云天池平台承办,并由浙江大学、清华大学等单位共同协办。 Mhttps://tianchi.aliyun.com/dataset/107332微调的是牧歌数据集,结果都不好,记录…

C语言学习系列:笔记列表

1&#xff0c;精神建设&#xff1a;为什么要学C语言以及如何学习C语言 2&#xff0c;C语言学习系列&#xff1a;GCC编译器Windows版本MinGW-w64的安装教程 3&#xff0c;C语言学习系列&#xff1a;初识C语言 4&#xff0c;C语言入门学习系列&#xff1a;基本语法

工业和信息化部电子工业标准化研究院人工智能从业人员“计算机视觉设计开发工程师”专项培训(第四期)

注&#xff1a;若出现无法显示完全的情况&#xff0c;可搜索“人工智能技术与咨询”查看完整文章 声明: 公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨&#xff0c;并不意味着支持其观点或证实其内容的真实性。版权归原作者所有&#xff0c;如转载稿涉及…

面试-NLP八股文

机器学习 交叉熵损失&#xff1a; L − ( y l o g ( y ^ ) ( 1 − y ) l o g ( 1 − ( y ^ ) ) L-(ylog(\hat{y}) (1-y)log(1-(\hat{y})) L−(ylog(y^​)(1−y)log(1−(y^​))均方误差&#xff1a; L 1 n ∑ i 1 n ( y i − y ^ i ) 2 L \frac{1}{n}\sum\limits_{i1}^{n}…

软件3班20240612

加粗样式 maven 根据的使用案例 package com.yanyu;public class Demo02 {// 设置 一个 求 两个数 的 和 的 方法 sumpublic void sum(int num1, int mum2) {System.out.println("两个数 的 和 是 &#xff1a;" (num1 mum2));} }import com…

盲盒小程序推广与运营策略的挑战

随着盲盒经济的兴起&#xff0c;越来越多的商家开始关注并尝试开发盲盒小程序。然而&#xff0c;在推广和运营盲盒小程序的过程中&#xff0c;我们也不可避免地会遇到一些挑战。下面&#xff0c;我将就用户获取、留存以及活跃度提升等方面&#xff0c;探讨这些挑战及可能的应对…

常用环境部署(十四)——Docker部署MinIO

一、安装Docker及Docker-compose https://blog.csdn.net/wd520521/article/details/112609796 二、Docker-compose部署MinIO 1、在服务器创建/data/minio目录 mkdir -p /data/minio 2、 docker-compose.yml脚本创建 vim /data/minio/docker-compose.yml &#xff08;1&a…

使用易备数据备份软件,简单快速地备份 Oracle 数据库

易备数据备份软件能够以简单高效的方式&#xff0c;实现对 Oracle 数据库的保护。 易备数据备份软件数据库备份功能的关键特性 自动保护网站数据库及应用程序实时备份&#xff0c;不需要任何中断或数据库锁定基于日期和时间的备份任务计划可恢复到一个已存在的数据库或创建一…

【java计算机毕设】图书商城管理系统MySQL springboot vue html maven送文档

1项目功能介绍 【java计算机毕设】图书商城管理系统 Java Spring Boot vue HTML MySQL 赠送文档 PPT 2项目简介 系统功能&#xff1a; 图书商城管理系统包括管理员和用户两种角色。 管理员的功能包括在个人中心修改个人信息&#xff0c;以及在基础数据管理中管理会员等级类型和…

STM89C51开发学习1

环境安装&#xff1a; 使用Keil uVision4环境进行对51单片机的学习。 在进行使用之前先用keygen进行对软件的破解防止后续发生不必要的问题。 开发环境下载完毕后&#xff0c;检查电脑是否有串口驱动&#xff08;可以在网上下载&#xff09; CH340驱动。 安装stcai-…

小程序视图渲染数据和部分事件的绑定

今天依旧使用这个目录进行教学 数据的渲染 在 index.js的 page中定义一个data对象结构是这样的 Page({data:{name:张三} }) 在index.wxml 中 利用模板语法进行渲染 <view >{{name}}</view> 注意这个模板里边不能使用js的方法 要循环渲染数组&#xff0c;如 在…

目标检测中的anchor机制

目录 一、目标检测中的anchor机制 1.什么是anchor boxes&#xff1f; 二、什么是Anchor&#xff1f; ​编辑三、为什么需要anchor boxes&#xff1f; 四、anchor boxes是怎么生成的&#xff1f; 五、高宽比&#xff08;aspect ratio&#xff09;的确定 六、尺度(scale)的…

数字影像产业园:打造数字经济高地,赋能未来产业

成都国际数字影像产业园凭借其得天独厚的区位优势、完善的配套设施、先进的产业定位和便捷的交通条件&#xff0c;逐步成为成都市乃至全国数字影像、文创、媒体产业的重要聚集地。 成都国际数字影像产业园位于成都市金牛区的核心地带&#xff0c;其主导产业为数字影像、文创、媒…

LCD电子广告牌课程设计

概述 1.1课程设计简介 亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。传统的广告牌都是固定的汉字&#xff0c;并且时间长了会掉色&#xff0c;使汉字模糊难认&#xff0c;这就给我的生活带来很多的不便。尤其到了晚上传统广告牌就会失去其该有的作用。所以在…

四季变换,制氮机使用注意事项

随着四季的轮回变换&#xff0c;大自然展现着不同的风貌。对于制氮机而言&#xff0c;季节的变换同样会带来不同的使用挑战和注意事项。本文将为您揭示四季变换对制氮机使用的影响&#xff0c;帮助您更好地掌握制氮机的季节使用须知。 春季 温湿度变化&#xff1a;春季温湿度逐…

VitePress做一个自己的知识博客

创建项目 // 1.创建项目,直接在空项目下安装vitepress(npm/yarn等都可以,这个可以看官网,官网给了好几种安装方式) yarn add -D vitepress // 2.初始化配置项目(npm/官网也给了多种包管理工具的安装方式) yarn vitepress init // 初始化命令执行完会遇到以下几个问题 ┌ Welc…

C语言之数组

目录 一、数组的概念 二、一维数组的使用 数组的创建 数组的初始化 数组的使用 三、一维数组在内存中的存储 四、sizeof计算数组元素个数 五、二维数组的使用 数组的创建 数组的初始化 数组的使用 六、二维数组在内存中的存储 七、C99中的变长数组 八、总结 一、…

linux系统安装anaconda,并通过java程序调用python程序

虚拟环境准备 首先准备一块空的分区&#xff0c;安装anaconda至少要20g以上才能执行简单程序&#xff0c;这里准备20G的磁盘空间 创建分区,执行以下步骤&#xff0c;之后执行reboot重启 fdisk /dev/sda p n 回车 回车 w查看当前系统创建的分区&#xff0c;我这里是名为sda3的…

Docker:认识Docker Bridge网络

文章目录 为什么需要网络管理Docker网络架构简介CNMLibNetwork驱动Docker网络管理命令网络命令基本操作网络详解docker Bridge网络 容器之间的网络通信DNS解析 为什么需要网络管理 容器的网络默认会与宿主机器以及其他的容器相互隔离&#xff0c;但是还需要考虑到下面的这些问…