查看原文
其他

听起来很霸气用起来并不难的支持向量机

豆豆花花 生信星球 2022-06-06

 今天是生信星球陪你的第532天


   大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

   就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

   这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!


花花花写于2020-02-07 闭门不出的第n天,我们将原定于下周一的学习小组提前到今天开始了,我也收到公司通知,我们可能五一之前都没办法出去做线下培训,要转型线上培训了,如果不是这场灾难,此刻我应该是在广州的酒店,准备明天的课程了。

1.准备输入数据

输入数据是TCGA的表达矩阵expr、临床信息meta和group_list。保存为forest.Rdata了,在生信星球公众号后台聊天窗口回复“森林”即可获得。

1load("forest.Rdata")
2exprSet = expr[,group_list=="tumor"]
3
4## 必须保证生存资料和表达矩阵,两者一致
5all(substring(colnames(exprSet),1,12)==meta$ID)
6#> [1] TRUE
1library(ROCR)
2library(genefilter)
3library(Hmisc)
4library(e1071)

2.构建支持向量机模型

2.1.切割数据

用R包caret切割数据,生成的结果是一组代表列数的数字,用这些数字来给表达矩阵和meta取子集即可。

1#library(caret)
2#set.seed(12345679)
3#sam<- createDataPartition(meta$event, p = .5,list = FALSE)
4load("sam.Rdata")
5
6train <- exprSet[,sam]
7test <- exprSet[,-sam]
8train_meta <- meta[sam,]
9test_meta <- meta[-sam,]

2.2 train数据集建模

1x=t(log2(train+1))
2y=as.factor(train_meta$event)
3model = svm(x,y,kernel = "linear")
4summary(model) 
5#> 
6#> Call:
7#> svm.default(x = x, y = y, kernel = "linear")
8#> 
9#> 
10#> Parameters:
11#>    SVM-Type:  C-classification 
12#>  SVM-Kernel:  linear 
13#>        cost:  1 
14#> 
15#> Number of Support Vectors:  179
16#> 
17#>  ( 108 71 )
18#> 
19#> 
20#> Number of Classes:  2 
21#> 
22#> Levels: 
23#>  0 1

2.3.模型预测

用训练集构建模型,预测测试集的生死。不同于其他模型,这个预测结果是分类变量,直接预测生死(0,1),而不是prob(百分数)。

1x=t(log2(test+1))
2y=as.factor(test_meta$event)
3pred = predict(model, x)
4table(pred,y)
5#>     y
6#> pred   0   1
7#>    0 151  42
8#>    1  36  32

目前留有一个疑问,端详了一下模型内部结构,还不知道如何找到构建模型用到的基因。由于公众号文章一经发出无法修改,此问题后期如有解决办法,我将在简书(原文链接跳转)更新。

插个小广告!

生信零基础入门学习小组长期报名中

GEO数据挖掘广州专场课程

再给生信技能树打个call!

一起来学单细胞

全球公益巡讲招学徒

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存