其他
听起来很霸气用起来并不难的支持向量机
大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~
就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~
这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!
花花花写于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
目前留有一个疑问,端详了一下模型内部结构,还不知道如何找到构建模型用到的基因。由于公众号文章一经发出无法修改,此问题后期如有解决办法,我将在简书(原文链接跳转)更新。
插个小广告!
再给生信技能树打个call!