「付费」【代码分享-20】更适合临床分析的机器学习算法-KNN算法和stepCox!小果手把手教你学会!






「付费」【代码分享-20】更适合临床分析的机器学习算法-KNN算法和stepCox!小果手把手教你学会!

小果  生信果  2024-04-29 19:01:09

小伙伴最近学习了不少生信分析,有的小伙伴有许多的困惑,小伙伴通常做完筛选基因后,发现基因有点多,而继续往后做却由于太多基因无从下手,一般的我们会在挑选对阈值进行缩小,或者在筛选一轮,小果这里有个好办法使用stepCOX,一种机器学习的方法,不过需要样本的临床的信息,不过这种方法更适合筛选完基因将要做预后分析的,这次小果带给小伙伴的方法可以有效的解决多个基因后续的分析,但是也适合与,面临预后分析适合,多余一些变量的筛选,比如不同分期情况下的基因变量如何,还以一种就是KNN算法,小果觉得这种算法适合于多个基因用于不同分型的变量情况下,来看看如何学习的吧!

我们从第一种方法开始,KNN算法,先简单了解一下这种算法

其实KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。

这种KNN算法通过测量不同特征值之间的距离来进行分类。

简单来说KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。

所以说这种算法适合于临床分析,因为有的数据会有临床分型的情况

看不懂的小伙伴也没关系,小果带你用代码实例去学习,这样更容易理解!

我们先载入两个包

library(mlr)library(tidyverse)

然后载入这个数据集,这里使用小果平时做过的实例,小伙伴可以按照数据形式自行去设置

a<-read.csv("a.csv",row.names = 1)

这个就需要小伙伴拥有数据样本的分组情况

a2<-read.csv("a2.csv",row.names = 1)

data<-read.csv("k.csv",row.names = 1)

查看下运行的结果

kFoldCV$aggr

kFoldCV$measures.test

calculateConfusionMatrix(kFoldCV$pred, relative = TRUE)

我们仍需要调整一下K值

# K的超参数调整----knnParamSpace <- makeParamSet(makeDiscreteParam("k", values = 1:10))

gridSearch <- makeTuneControlGrid()cvForTuning <- makeResampleDesc("RepCV", folds = 10, reps = 20)tunedK <- tuneParams("classif.knn", task = diabetesTask,resampling = cvForTuning,par.set = knnParamSpace,control = gridSearch)

tunedK

tunedK$x

最优 的K值为3

knnTuningData <- generateHyperParsEffectData(tunedK)

plotHyperParsEffect(knnTuningData, x = "k", y = "mmce.test.mean",plot.type = "line") +theme_bw()

查看一下结果图,在K=3的适合最均衡,

然后使用试验去验证模型

# 用TUNED K训练最终模型----tunedKnn <- setHyperPars(makeLearner("classif.knn"), par.vals = tunedK$x)

tunedKnnModel <- train(tunedKnn, diabetesTask)

继续调整参数

# 包括嵌套交叉验证中的超参数调整----

inner <- makeResampleDesc("CV")

outer <- makeResampleDesc("RepCV", folds = 10, reps = 5)

knnWrapper <- makeTuneWrapper("classif.knn", resampling = inner,par.set = knnParamSpace,control = gridSearch)

cvWithTuning <- resample(knnWrapper, diabetesTask, resampling = outer)

这里小伙伴多等待一下

接下来

# 使用模型进行预测----

newDiabetesPatients <- a

newDiabetesPatients<-newDiabetesPatients[,-1]

newPatientsPred <- predict(tunedKnnModel, newdata = newDiabetesPatients)

library(caret)pred<-getPredictionResponse(newPatientsPred)confusionMatrix(table(pred,a$fen))

不同的模型去预测临床的信息

这样一来通过不同的临床分型,构建的模型就计算完成了,

下面我们学习一下setpcox计算

这一步骤其实就是 两个函数的连用,分别是step函数以及cox函数,简单理解就是通过step函数基于AIC选择一个cox模型,而这个cox模型需要满足AIC最小,那么自然在构建不同的cox模型的时候会选择不同的变量进而获得不同的AIC,所以就获得了变量筛选的能力,那么下面我们来看一下其代码是如何实现的

这里小果用实例数据集去分析,小伙伴可以更具数据集,自行去设置

a<-read.csv("data.csv",row.names = 1)

yu<-read.csv("预后信息.csv",row.names = 1)

这里还是需要样本的临床信息的

其实这个方法计算很简单,只需要几步,

这些结果是很多的,小伙伴可以自行去保存,而且一些基因的预后风险值也计算出来,

好了这次的学习就结束了,小伙伴要亲手去试验哦,才能理解每一步的含义!

往期推荐

1.搭建生信分析流水线,如工厂一样24小时运转Snakemake——进阶命令
2.比blast还优秀的序列比对工具?HMMER来了
3.对单细胞分析毫无头绪?让popsicleR领你入门
4.小果带你绘制ROC曲线评估生存预测能力
5.软件包安装、打怪快又好,1024G存储的生信服务器;还有比这更省钱的嘛!!!

如果需要完整的代码可以点击付费获取哦!今天小果的分享就到这里,如果小伙伴有其他数据分析需求,可以尝试本公司新开发的生信分析小工具云平台,季代码完成分析,非常方便奥!

(扫码领取正好的输入文件,代码文件及示例结果)