欢迎光临散文网 会员登陆 & 注册

PCA结合SVM如何实现分类预测分析?看这篇就够了!

2023-07-08 19:00 作者:尔云间  | 我要投稿


       很多小伙伴最近都问小云,能不能推荐一下不同算法结合展开的分析?收到!今天小云就特地准备了一个PCA结合SVM的临床样本分类预测分析案例,通过这个案例分析希望可以让小伙伴们有所收获!

       在之前我们已经介绍过PCA算法和SVM算法的理论概念,那么在这里便不再一一介绍,整体分析的目的就是使用PCA对数据进行降维,然后利用降维后的数据来构建并训练SVM模型,最后使得模型具备预测临床分析结果的功能。

       首先我们介绍一下接下来的分析用到的数据集,我们用的是一种疾病患者的临床数据,共包含392个样本,先来看一下数据样例

这个数据每行对应一个样本,包含10个特征,最后一个特征group为目标特征,也就是样本的类别,包含control和case两种。

#收费区域

介绍完数据,开始期待的代码部分吧!

代码部分

#导入相关R包和数据

library(e1071)

library(“pROC”)

library(tidyverse)

library(ggplot2)

data<-read.csv("data.csv")

head(data)

#数据预处理

#由于部分特征为非数值数据,所以需要进行转换

data$sex[data$sex=="male"]<-1

data$sex[data$sex=="female"]<-0

data$dishistory[data$dishistory=="yes"]<-1

data$dishistory[data$dishistory=="no"]<-0

data$sex=as.numeric(data$sex)

data$dishistory=as.numeric(data$dishistory)

#数据标准化

data2=scale(data[,1:9])

#使用prcomp计算PCA

pca1<-prcomp(data2[,-ncol(data2)],center=TRUE,scale=TRUE)

#输出PCA结果

pca1$rotation

#查看PCA特征方差

summary(pca1)

pca2 <- predict(pca1)[,1:2] # 计算出PCA对应的值

pca2 <- data.frame(pca2) # 转化成data.frame

#添加种类特征

pca2$type=data$group

#PCA关键特征散点图

pca2%>%

ggplot(aes(x = PC1, y = PC2, color = type)) +

geom_point() +stat_ellipse()

由上图可以看出PCA降维结果较好,其中PCA1和PCA2轴可以较好的区分临床样本的两种种类。于是我们使用这两个新特征来训练SVM模型,进行进一步的分析。

#数据集划分

pca2$type<-factor(pca2$type)

sub<-sample(1:392,260)#260个样例作为训练集,其余作为测试集

train<-pca2[sub,]

test<-pca2[-sub,]

#构建SVM模型

svm_model = svm(type~.,data=train,knernel = "radial")

#查看模型信息

summary(svm_model)

#测试集分类预测

svm_pred=predict(svm_model,test,decision.values = TRUE)

test$svm_pred = svm_pred

head(test)

table(test$type,test$svm_pred,dnn=c("真实值","预测值"))

#绘制ROC曲线

ran_roc <- roc(test$type,as.numeric(svm_pred))

plot(ran_roc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),grid.col=c("green", "red"), max.auc.polygon=TRUE,auc.polygon.col="skyblue", print.thres=TRUE,main='SVM模型ROC曲线')

      我们把数据分成了case和control两组,其中包含34个case和98个control,SVM模型预测case分组有5个错误,预测control分组有1个错误,预测错误的样本非常少,这即说明利用PCA技术对数据进行降维后的特征可以很好地区分样本种类,同时说明降维后的数据来训练SVM模型具有很高的预测准确率。于此同时,为了更加直观展示其预测准确率,我们绘制了ROC曲线图,如上图所示,其显示最后利用SVM来预测样本分类准确率达到了92.1%!开放思维来想,这个方法能不能用来分析我们生信方向存在的一些多特征多分类问题呢?答案当然是可以的。怎么样,简单吧!纵观全文,整个分析思想非常直观,但细节仍然要注意哦!

      分析到这里就结束啦!小伙伴们是不是感觉眼前一亮?当时小云在完成分析后也是开心了很久,想着可以要是可以给小伙伴们带来启发那真是太好了!大家也不要偷懒哦!快去动手自己尝试一下!

(推荐一下小云新开发的零代码云生信分析工具平台包含超多零代码小工具,上传数据一键出图,感兴趣的小伙伴欢迎来参观哟,网址:http://www.biocloudservice.com/home.html)



PCA结合SVM如何实现分类预测分析?看这篇就够了!的评论 (共 条)

分享到微博请遵守国家法律