医学数据:我写好这个模型的代码,主任当场给我敬酒!

文摘   2025-01-06 09:01   荷兰  

前言

逻辑回归是一种常用的分类算法,尤其在医学数据分析中常用于预测二分类的结果(如疾病的有无)。它通过估计因变量(通常是二进制变量)与自变量之间的关系来建模。不管你是什么专业,什么科室,大量的数据都可以使用逻辑回归来分析。熟练的掌握逻辑回归的分析代码,可以极大地提高科研的效率,年底的论文任务不也就更好完成了吗?

相比简单线性回归,逻辑回归的优势在于其专为分类任务设计,能处理二分类问题且输出概率值,从而更适合预测分类问题中目标变量的分布。简单线性回归则倾向于在分类问题中生成不合理的预测值(如概率大于1或小于0),逻辑回归通过sigmoid函数有效避免了这一点。本文的更新将演示逻辑回归的完整套路,特别是对医学数据进行建模、分析、和可视化。

1. 数据准备

我们将使用一个模拟的数据集,其中包括患者的年龄、性别、血压、胆固醇水平等变量,以及他们是否患有某种疾病的二分类结果。

# 导入必要的库
import pandas as pd
import numpy as np

# 生成模拟数据
np.random.seed(42)
data = pd.DataFrame({
'Age': np.random.randint(20, 80, 100),
'Sex': np.random.choice(['Male', 'Female'], 100),
'BloodPressure': np.random.randint(80, 180, 100),
'Cholesterol': np.random.randint(150, 300, 100),
'Disease': np.random.choice([0, 1], 100)
})

# 数据预览
print(data.head())

## Age Sex BloodPressure Cholesterol Disease
## 0 58 Female 94 296 0
## 1 71 Male 122 297 1
## 2 48 Female 108 245 0
## 3 34 Male 115 201 1
## 4 62 Female 92 277 0

2. 数据预处理

在开始建模之前,需要对数据进行处理,包括:编码分类变量、标准化数值变量。

from sklearn.preprocessing import StandardScaler, LabelEncoder

# 对分类变量进行编码
data['Sex'] = LabelEncoder().fit_transform(data['Sex'])

# 标准化数值变量
scaler = StandardScaler()
data[['Age', 'BloodPressure', 'Cholesterol']] = scaler.fit_transform(data[['Age', 'BloodPressure', 'Cholesterol']])

# 数据预览
print(data.head())

## Age Sex BloodPressure Cholesterol Disease
## 0 0.469313 0 -1.237971 1.502561 0
## 1 1.193906 1 -0.274034 1.524831 1
## 2 -0.088066 0 -0.756003 0.366788 0
## 3 -0.868396 1 -0.515018 -0.613095 1
## 4 0.692265 0 -1.306824 1.079430 0

3. 逻辑回归建模

我们将分割数据集为训练集和测试集,并使用逻辑回归进行建模。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# 分割数据集
X = data[['Age', 'Sex', 'BloodPressure', 'Cholesterol']]
y = data['Disease']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 逻辑回归建模
model = LogisticRegression()
model.fit(X_train, y_train)

# 模型预测
y_pred = model.predict(X_test)

# 评估模型
print("Accuracy:", accuracy_score(y_test, y_pred))

## Accuracy: 0.6
print(classification_report(y_test, y_pred))
## precision recall f1-score support
##
## 0 0.50 0.38 0.43 8
## 1 0.64 0.75 0.69 12
##
## accuracy 0.60 20
## macro avg 0.57 0.56 0.56 20
## weighted avg 0.59 0.60 0.59 20

4. 可视化

可视化是理解模型的重要部分。我们可以绘制ROC曲线来评估模型的分类性能。
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt

# 计算ROC曲线和AUC
y_pred_prob = model.predict_proba(X_test)[:, 1]
fpr, tpr, _ = roc_curve(y_test, y_pred_prob)
roc_auc = auc(fpr, tpr)

# 绘制ROC曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label=f'ROC Curve (AUC = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], 'r--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

总结

年底了,每个人要完成的考核任务都有很多,相信通过上述步骤,你可以初步掌握从数据预处理、逻辑回归建模到模型评估与可视化的全过程。如果您有更复杂的数据分析需求,例如多分类问题或时间序列数据,还可以探索其他模型如决策树、随机森林或神经网络。

感谢关注,你的支持是我不懈的动力!

科研代码
专注R和Python的数据分析。
 最新文章