生信喵 发表于 2022-9-7 19:30:52

利用机器学习预测乳腺癌

一、案例介绍
       这是一个典型的利用当前流行的机器学习算法来进行生物数据挖掘的案例,非常具有代表性。
       同样的算法可以应用在其他不同肿瘤研究中。这是一份来自威斯康星州采集的乳腺癌数据集。这个数据集中包含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]去掉,这样所有数据存储在df变量中了

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
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

       我们得到这样一个混淆矩阵,就可以去算真阳性,真阴性,假阳性,假阴性,灵敏度,特异度了。可以放去下面的网址一步计算。
http://vassarstats.net/clin1.html      
       结果截图

二、预测新数据
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

页: [1]
查看完整版本: 利用机器学习预测乳腺癌