利用机器学习预测乳腺癌

2022-10-25 19:53:16 浏览数 (1)

一、案例介绍

这是一个典型的利用当前流行的机器学习算法来进行生物数据挖掘的案例,非常具有代表性。

同样的算法可以应用在其他不同肿瘤研究中。这是一份来自威斯康星州采集的乳腺癌数据集。这个数据集中包含699个细针抽吸活检的样本单元,其中458个(65.5%)为良性样本单元,241个(34.5%)为恶性样本单元。

[数据链接] (http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/)

数据集包含11个变量指标,也就是数据集有11列,分别是:

✓ ID

✓ 肿块厚度

✓ 细胞大小的均匀性

✓ 细胞性状的均匀性

✓ 边际附着力

✓ 单个上皮细胞大小

✓ 裸核

✓ 乏味染色体

✓ 正常核

✓ 有丝分裂

✓ 类别

利用read.csv()函数读入数据,这里面第一列编号并不需要,利用附索引[-1]去掉,这样所有数据存储在x变量中了

代码语言:javascript复制
rm(list=ls())
x <- read.csv("breast.csv", row.names=1)  
head(x)
x <- x[-1]
class(x$class)
x$class <- as.factor(x$class)
levels(x$class)
levels(x$class) <- c('benign', 'nalignant')
head(x)
pheatmap(x[-10],cluster_rows = F,cluster_cols = F)


nrow(x)
#进行抽样,df分成df.train与dr.validate  
set.seed(1234)  
train <- sample(nrow(x), 0.7*nrow(x))  
x.train <- x[train,]  
x.validate <- x[-train,]  
table(x.train$class)  
table(x.validate$class)  


# 逻辑回归- Logistic regression with glm()  
fit <- glm(class~., data=x.train, family=binomial())  
summary(fit)  
prob <- predict(fit, x.validate, type="response")  
result <- factor(prob > .5, levels=c(FALSE, TRUE), labels=c("benign", "malignant"))  
logit.perf <- table(x.validate$class, result,dnn=c("Actual", "Predicted"))  
logit.perf

Predicted

Actual benign malignant

benign 129 6

nalignant 1 69

我们得到这样一个混淆矩阵,就可以去算真阳性,真阴性,假阳性,假阴性,灵敏度,特异度了。可以放去下面的网址一步计算。

代码语言:javascript复制
http://vassarstats.net/clin1.html

结果截图

二、预测新数据

代码语言:javascript复制
library(dplyr)
newdata <- dplyr::sample_n(x,5)
newdata <- newdata[-10]
prob <-predict(fit,newdata = newdata,type = 'response')
result <- factor(prob > .5, levels=c(FALSE, TRUE), labels=c("benign", "malignant"))  
result

写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。原地址暂未启用(bioinfoer.com)。

代码语言:javascript复制
sx.voiceclouds.cn

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

0 人点赞