一、引言
在机器学习中,模型拟合是一个关键概念,它指的是使用数据来拟合出一个能够适应实际情况的数学模型。逻辑回归是一种常用的模型拟合方法,它可以用于处理分类问题,特别是二分类问题。逻辑回归利用了一个称为“逻辑函数”的模型来预测观测值的概率。
然而,在临床诊断领域中,准确预测疾病结果对于患者的治疗和生存至关重要。因此,使用逻辑回归进行临床诊断结果预测成为一种被广泛研究和应用的方法。
本文旨在介绍逻辑回归模型在临床诊断结果预测中的应用,并探讨相关需求和挑战。首先,将详细介绍逻辑回归模型的原理和特点,以及其在机器学习中的地位和应用范围。接着,将阐述临床诊断结果预测的重要性和现实需求,以及逻辑回归模型如何满足这些需求。
二、逻辑回归简介
2.1 逻辑回归原理
- 「基本假设」逻辑回归模型假设在给定输入特征的情况下,输出变量的概率服从二项分布。
- 「逻辑函数」
逻辑回归模型使用逻辑函数(Sigmoid函数)对线性组合进行变换(逻辑回归=线性回归+sigmoid函数。),将其映射到0到1之间的概率值。逻辑函数的数学表达式如下:
如上图:逻辑回归模型使用逻辑函数对线性组合进行变换,将输入特征与输出变量之间建立关系。当线性组合的值趋近于负无穷时,逻辑函数的值趋近于0;当线性组合的值趋近于正无穷时,逻辑函数的值趋近于1。通过将线性回归结果带入逻辑函数,我们可以将连续变量y转换为0-1区间内的概率值。
- 「决策边界」:在逻辑回归模型中,当概率值小于0.5时,我们将最终结果预测为0;当概率值大于0.5时,我们将最终结果预测为1。通过这个阈值,我们可以明确地进行分类预测。
- 「逻辑回归的算法步骤」
- 输入自变量特征
- 定义自变量的线性组合y(
y = β₀ + β₁x₁ + β₂x₂ + ... + βₚxₚ
),即针对自变量线性回归,其中,y表示线性组合,β₀表示模型的截距(常数项),β₁、β₂、...、βₚ表示各个输入特征的系数,x₁、x₂、...、xₚ表示对应的自变量特征。 - 将线性回归结果y映射到sigmoid函数,生成一个0-1范围取值的函数概率值
- 根据概率值,定义阈值(通常为0.5,即是决策边界),判定分类结果
2.2 逻辑回归适用场景和优势
- 「优势」:
- 简单而高效:逻辑回归是一种简单且易于实现的分类算法,计算速度快,适用于大规模数据集。
- 可解释性强:逻辑回归模型中的系数表示不同特征对结果的影响程度,可以提供变量的权重信息,便于解释模型。
- 适用于概率预测:逻辑回归通过sigmoid函数将线性组合映射到0-1的概率值,能够直接预测样本属于某一类别的概率。
- 可以处理离散特征和连续特征:逻辑回归可以同时适应处理离散特征和连续特征,不需要对特征进行过多的预处理。
- 「适用场景」:
- 二分类问题:逻辑回归主要用于解决二分类问题,即将样本分为两个互斥的类别。例如,预测股票市场中的涨跌、预测学生是否能被大学录取等。
- 概率预测:逻辑回归通过使用sigmoid函数将线性组合映射到0-1之间的概率值,可以得到样本属于某个类别的概率。因此,在需要进行概率预测的任务中,逻辑回归是一个有效的选择。例如,预测用户点击广告的概率,判断一封电子邮件是否为垃圾邮件等。
- 特征重要性分析:逻辑回归模型中的系数表示不同特征对结果的影响程度。根据系数的大小可以评估其在分类中的相对重要性。因此,逻辑回归可用于分析特征的重要性,帮助理解数据并进行特征选择。例如,通过逻辑回归模型确定影响房价的关键因素。
- 高维数据集:逻辑回归在高维数据集中表现良好,并且具有较低的计算复杂度。因此,当特征维度较高时,逻辑回归是一个可行的选择。例如,在文本分类中,逻辑回归可以用于将文本数据映射到不同的类别。
三、实例演示
3.1 数据集载入
library(survival) str(gbsg)
结果展示:
> str(gbsg) 'data.frame': 686 obs. of 10 variables: $ age : int 49 55 56 45 65 48 48 37 67 45 ... $ meno : int 0 1 1 0 1 0 0 0 1 0 ... $ size : int 18 20 40 25 30 52 21 20 20 30 ... $ grade : int 2 3 3 3 2 2 3 2 2 2 ... $ nodes : int 2 16 3 1 5 11 8 9 1 1 ... $ pgr : int 0 0 0 0 0 0 0 0 0 0 ... $ er : int 0 0 0 4 36 0 0 0 0 0 ... $ hormon : int 0 0 0 0 1 0 0 1 1 0 ... $ rfstime: int 1838 403 1603 177 1855 842 293 42 564 1093 ... $ status : Factor w/ 2 levels "0","1": 1 2 1 1 1 2 2 1 2 2 ... age:患者年龄 meno:更年期状态(0表示未更年期,1表示已更年期) size:肿瘤大小 grade:肿瘤分级 nodes:受累淋巴结数量 pgr:孕激素受体表达水平 er:雌激素受体表达水平 hormon:激素治疗(0表示否,1表示是) rfstime:复发或死亡时间(以天为单位) status:事件状态(0表示被截尾,1表示事件发生)
3.2 数据预处理
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,]
3.3 逻辑回归拟合
# 拟合逻辑回归模型 model <- glm(status ~ age + meno + size + grade + nodes + pgr + er + hormon, data = train, family = binomial) summary(model)
结果展示:
Call: glm(formula = status ~ age + meno + size + grade + nodes + pgr + er + hormon, family = binomial, data = train) Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -0.0355079 0.7759338 -0.046 0.96350 age -0.0246618 0.0146817 -1.680 0.09300 . meno 0.5901891 0.2941229 2.007 0.04479 * size 0.0127721 0.0069394 1.841 0.06569 . grade 0.1391511 0.1636063 0.851 0.39503 nodes 0.0925852 0.0215085 4.305 1.67e-05 *** pgr -0.0027016 0.0007524 -3.590 0.00033 *** er 0.0007713 0.0007929 0.973 0.33073 hormon -0.3859417 0.2039298 -1.893 0.05842 . --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for binomial family taken to be 1) Null deviance: 753.96 on 547 degrees of freedom Residual deviance: 686.34 on 539 degrees of freedom AIC: 704.34 Number of Fisher Scoring iterations: 4
3.4 模型评估
- 「混淆矩阵」
library(caret) # 使用逻辑回归模型进行预测 predictions <- predict(model, newdata = test, type = "response") # 将概率转换为类别(基于0.5的阈值) predicted_classes <- ifelse(predictions > 0.5, 1, 0) # 创建混淆矩阵 predicted_classes <- as.factor(predicted_classes) test$status <- as.factor(test$status) confusion_matrix <- confusionMatrix(predicted_classes, as.factor(test$status)) # 创建混淆矩阵 confusion_matrix <- confusionMatrix(predicted_classes, test$status) # 将表格对象转换为数据框 cm_data <- as.data.frame(cm_data) # 绘制混淆矩阵图 ggplot(data = cm_data, aes(x = Reference, y = Prediction, fill = Freq)) + geom_tile() + geom_text(aes(label = Freq), color = "black") + scale_fill_gradient(low = "white", high = "steelblue") + labs(x = "Actual", y = "Predicted", title = "Confusion Matrix")
从图中看出总共138例子,预测对的是93例子,错误的是45例。
- 「ROC曲线」
# 使用逻辑回归模型进行预测 predictions <- predict(model, newdata = test, type = "response") library(pROC) roc <- pROC::roc(test$status, predictions) # 绘制ROC曲线 plot(roc, main = "ROC Curve", print.auc = TRUE, auc.polygon = TRUE, grid = TRUE, legacy.axes = TRUE,col="blue")
- 「特征重要性图」
# 提取特征系数 coef_data <- data.frame(Feature = names(coef(model)), Coefficient = abs(coef(model))) # 按照系数绝对值降序排序 coef_data <- coef_data[order(coef_data$Coefficient, decreasing = TRUE), ] # 绘制特征重要性柱状图 ggplot(data = coef_data, aes(x = reorder(Feature, Coefficient), y = Coefficient)) + geom_bar(stat = "identity", fill = "steelblue") + xlab("Feature") + ylab("Coefficient (Absolute Value)") + ggtitle("Logistic Regression Feature Importance")
四、总结
这个结果肯定是不如人意的,如果想知道如何实现提高预测的准确率,以及模型调优的方法,欢迎关注和私信我,我们一起讨论学习。原创不易,如果觉得写的还行的话,请留下您的赞和再看,谢谢!
*「未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。」