一、引言
乳腺癌被认为是全球范围内最常见的癌症之一,对女性健康造成了重大威胁[1]。根据世界卫生组织的统计数据,乳腺癌是女性恶性肿瘤中的主要类型,并且是导致女性死亡的第二大原因[2]。这个事实凸显了乳腺癌在全球范围内的流行程度以及对公共卫生的重要性。因此,早期检测和准确预测乳腺癌是至关重要的。
本文旨在探讨乳腺癌预测的重要性和挑战。首先,我们描述了乳腺癌作为全球常见癌症的背景和重要性。随后,我们引入了乳腺癌预测的重要性,并强调了早期检测和准确预测对于提高患者生存率的重要性。然而,乳腺癌预测面临着多方面的挑战,包括乳腺癌复杂的发病机制、数据获取和处理的困难,以及模型选择和解释的问题。为了克服这些挑战,我们需要深入研究乳腺癌预测领域,并不断改进和优化预测方法和技术。通过准确的乳腺癌预测,我们可以提供更有效的医疗护理,为患者提供更好的预防和治疗策略。
二、乳腺癌预测技术概述
传统的乳腺癌预测方法在应对乳腺癌的复杂性和高维数据方面存在一些局限性,需要进一步改进。传统方法如逻辑回归和决策树等可以捕捉特征与乳腺癌之间的线性关系,但对于非线性关系的建模能力较弱。此外,这些方法依赖于人工选择的特征,可能忽略了潜在的重要特征。
支持向量机(SVM)是一种强大的机器学习方法,已经在乳腺癌预测中取得了显著的成果。SVM通过将样本映射到高维特征空间,并构建一个能够最大化分类间隔的超平面来实现分类任务。它通过引入核函数来处理非线性关系,从而捕捉到更复杂的数据模式。SVM还具有良好的泛化能力和鲁棒性,可以处理小样本和高维数据,对异常值和噪声有较好的容忍性。
三、支持向量机(SVM)简介
-
「VM的原理和背景」
「支持向量机(Support Vector Machine,SVM)」 是一种常用的机器学习方法,最早由Vapnik等人于1995年提出。SVM的主要目标是找到一个超平面,将不同类别的实例样本在特征空间中分开。其核心思想是找到能够最大化两类样本之间的间隔的超平面。
SVM的训练过程可以归结为一个凸优化问题,其中目标是最小化模型参数的误差,并使得约束条件满足。通过引入拉格朗日乘子法和核函数,SVM能够处理非线性分割问题,并在高维特征空间中进行计算,从而更好地处理复杂数据。
-
「线性分类和非线性分类的 SVM 模型」
对于线性可分的问题,SVM使用线性分类器来构建一个超平面,将不同类别的样本分开。这个超平面可以表示为w·x + b = 0,其中w是法向量,b是偏置项。SVM的目标是最大化两个平行超平面之间的间隔,使得样本点与超平面间的距离最大化。这些样本点被称为支持向量。
对于非线性可分的问题,SVM采用核函数的方式将数据映射到高维特征空间中。通过使用核函数,SVM可以将非线性问题转化为线性问题来解决,从而得到非线性分类模型。常用的核函数有线性核函数、多项式核函数和高斯径向基函数(RBF)核函数等。
-
「SVM在乳腺癌预测中的优势和适用性」
SVM在乳腺癌预测中具有许多优势和适用性。首先,SVM可以处理高维特征空间中的数据,并且对于小样本集合也表现良好。其次,SVM能够处理非线性关系,通过使用核函数引入非线性特征映射,能够更好地捕捉数据中的复杂模式。此外,SVM的泛化能力较强,在面对新样本时具有较好的预测能力。
在乳腺癌预测中,SVM可以利用临床和影像数据进行特征提取和模式识别,以辅助诊断。例如,SVM可以利用乳腺X光、超声和核磁共振等影像数据,结合相关临床特征,进行乳腺肿瘤的分类和预测。相比传统的统计方法,SVM能够更准确地进行乳腺癌预测,并提高诊断的精确性。
四、实例展示
步骤一:数据准备与探索性分析
-
1.数据集载入
# 导入所需的包
library(survival)
library(e1071)
# 加载"gbsg"数据集
head(gbsg)
结果展示:
# > head(gbsg)
age meno size grade nodes pgr er hormon rfstime status
1 49 0 18 2 2 0 0 0 1838 0
2 55 1 20 3 16 0 0 0 403 1
3 56 1 40 3 3 0 0 0 1603 0
4 45 0 25 3 1 0 4 0 177 0
5 65 1 30 2 5 0 36 1 1855 0
6 48 0 52 2 11 0 0 0 842 1
-
2.参数解释:
pid:患者ID
age:患者年龄
meno:更年期状态(0表示未更年期,1表示已更年期)
size:肿瘤大小
grade:肿瘤分级
nodes:受累淋巴结数量
pgr:孕激素受体表达水平
er:雌激素受体表达水平
hormon:激素治疗(0表示否,1表示是)
rfstime:复发或死亡时间(以天为单位)
status:事件状态(0表示被截尾,1表示事件发生)
-
3.描述性统计:
summary(gbsg)
结果展示:
# > summary(gbsg)
age meno size grade nodes pgr er hormon rfstime status
Min. :21.00 Min. :0.0000 Min. : 3.00 Min. :1.000 Min. : 1.00 Min. : 0.0 Min. : 0.00 Min. :0.0000 Min. : 8.0 Min. :0.0000
1st Qu.:46.00 1st Qu.:0.0000 1st Qu.: 20.00 1st Qu.:2.000 1st Qu.: 1.00 1st Qu.: 7.0 1st Qu.: 8.00 1st Qu.:0.0000 1st Qu.: 567.8 1st Qu.:0.0000
Median :53.00 Median :1.0000 Median : 25.00 Median :2.000 Median : 3.00 Median : 32.5 Median : 36.00 Median :0.0000 Median :1084.0 Median :0.0000
Mean :53.05 Mean :0.5773 Mean : 29.33 Mean :2.117 Mean : 5.01 Mean : 110.0 Mean : 96.25 Mean :0.3586 Mean :1124.5 Mean :0.4359
3rd Qu.:61.00 3rd Qu.:1.0000 3rd Qu.: 35.00 3rd Qu.:2.000 3rd Qu.: 7.00 3rd Qu.: 131.8 3rd Qu.: 114.00 3rd Qu.:1.0000 3rd Qu.:1684.8 3rd Qu.:1.0000
Max. :80.00 Max. :1.0000 Max. :120.00 Max. :3.000 Max. :51.00 Max. :2380.0 Max. :1144.00 Max. :1.0000 Max. :2659.0 Max. :1.0000
-
4.绘制生存曲线:
library(ggplot2)
library(survminer)
# 绘制生存曲线
fit <- survfit(Surv(rfstime,status) ~ hormon,data = gbsg)
ggsurvplot(fit, data = gbsg,risk.table = TRUE,
ggtheme = theme_bw(),
xlab = "days",break.x.by=200,
tables.y.text=FALSE,legend.title="",
fontsize=5,break.y.by=0.2,
font.x = 15,
font.y = 15,
font.tickslab = 15,
font.legend = 15,
ylab='Event-free survival probability',
legend = c(0.90,0.85),pval.coord = c(5,0.25),pval.size=5,
pval.family="Times New Roman",palette = c("red","green"))
步骤二:数据预处理
检查是否有空值:
colSums(is.na(gbsg))
set.seed(1234)
gbsg$status <- as.factor(gbsg$status)
# 拆分训练集和测试集
trainIndex <- sample(1:nrow(gbsg), 0.8 * nrow(gbsg))
train <- gbsg[trainIndex,]
test <- gbsg[-trainIndex,]
结果展示:
age meno size grade nodes pgr er hormon rfstime status
0 0 0 0 0 0 0 0 0 0
没有空值和缺失值,我们这里只是演示,就不做其它的处理
步骤三:构建支持向量机(SVM)模型
# 创建SVM模型
svm_model <- svm(status ~ ., data = train, kernel = "linear")
# 对测试数据进行分类预测
predictions <- predict(svm_model, newdata = test,type="prob")
# 评估模型性能
accuracy <- sum(predictions == test$status) / length(test$status)
# 计算ROC曲线的参数
roc_obj <- roc(test$status, as.numeric(as.character(predictions)))
plot(roc_obj, col = "blue", main = "ROC Curve", xlab = "False Positive Rate", ylab = "True Positive Rate", print.thres = TRUE, print.auc = TRUE, legacy.axes = TRUE)
准确率为0.797,有点低,有待提高。
五、结论
目前这个做的是分类诊断模型,对结果进行预测!如果想了解如何提高准确率?或者如何使用交叉验证的方式验证该模型?可以关注和私信我,我们一起讨论学习。
参考文献:
[1] World Health Organization. Breast Cancer. 2021.