机器学习之逻辑回归(三):基于逻辑回归的癌症预测案例——【癌症分类预测-良/恶性乳腺癌肿瘤预测】
逻辑回归需要掌握的知识点包括:知道其损失函数(对数损失)、优化方法(如梯度下降)、sigmoid函数的作用及其与逻辑回归的关系、应用场景(如分类问题)、以及如何通过LogisticRegression实现预测。此外还包括评估指标如精确率、召回率及AUC的意义,并能应用相关函数进行计算。
基于逻辑回归的癌症预测案例中:
数据来源:从UCI机器学习数据库下载乳腺癌肿瘤特征数据集
数据处理:替换缺失值并删除样本
特征工程:标准化特征值
模型构建与评估:使用LogisticRegression进行建模,并通过准确率等指标进行评估
该案例展示了如何利用逻辑回归模型对乳腺癌肿瘤类型进行分类预测,并强调了在分类场景中除了关注准确率外还需要考虑其他评估指标的重要性。
逻辑回归需要掌握的知识点

- 理解逻辑回归模型中的损失函数
- 掌握用于优化的逻辑回归方法
- 深悉sigmoid函数的作用
- 了解如何应用逻辑回归解决实际问题
- 运用LogisticRegression算法构建逻辑回归预测模型
- 明确区分精确率与召回率指标的概念
- 学习如何解决样本不平衡情况下的评估指标计算方法
- 了解ROC曲线的意义及其与AUC指标的关系
- 应用classification_report计算精确率与召回率指标
- 使用roc_auc_score评估分类模型性能
文章目录
分析部分
详细代码实现步骤
2.1 数据获取与在线下载
2.1.1 使用pandas库加载数据
2.1.2 观察数据集结构
2.1.3 修改列名以提高可读性
2.1.4 对列名进行详细说明
2.1.5 检查目标变量分布情况
* 2.2 数据基本处理 缺失值处理,划分数据集
* * 2.2.1 ?标志的缺失值
* 2.2.2 划分数据集
* 2.3 特征工程 标准化
* 2.4 逻辑回归机器学习建模
* * 2.4.1 建立模型
* 2.4.2 训练模型
* 2.5 模型评估
* * 2.5.1 计算准确率
* 2.5.2 其他的评估方法
* 3 代码
基于逻辑回归的癌症预测案例
癌症分类预测-良/恶性乳腺癌肿瘤预测
- 数据介绍

原始数据集的获取地址:https://archive.ics.uci.edu/ml/machine-learning-databases/(可以通过手动获取该数据集;也可以利用该URL直接访问)
数据资源及其 accompanying source codes的GitHub获取链接:https://github.com/w1449550206/Cancer-prediction-based-on-logistic-regression.git
(2)在数据集中共有16项记录存在缺失情况,并对这些缺失值进行了标记处理,在相关字段中将缺失值标记为‘?’以便后续分析时能够方便地识别出来。
1 分析
- 数据获取路径灵活多样 (可以通过手动下载或指定URL的方式进行)
- 进行基本的数据预处理工作
2.1 在缺失值处理阶段需重点关注
2.2 需明确界定特征变量与目标变量
2.3 完成数据集的划分工作 - 对特征进行标准化处理 ,以消除量纲差异对模型性能的影响
- 应用逻辑回归算法构建分类预测模型
- 采用多维度评估指标对模型效果进行量化分析 ,具体包括:
- 准确率(Accuracy)衡量预测结果与真实结果的一致性程度
- 精确率(Precision)反映正类被正确识别的比例
- 召回率(Recall)表示实际正类中被成功识别的比例
- F1分数(F1-Score)综合考量精确率与召回率的平衡
- AUC值(Area Under Curve)评估模型在区分正负样本方面的性能
2 详细写代码步骤
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
- 获取数据:通过在线平台获取数据
- 数据基本处理:对缺失值进行处理,并将数据划分为训练集和测试集
- 特征工程:在特征工程阶段进行数据标准化
- 机器学习:采用逻辑回归模型进行分类任务
- 模型评估:对模型性能进行全面评估:包括准确率、精确率、召回率、F1分数以及AUC指标。
2.1 获取数据 在线下载

2.1.1 pandas在线下载数据
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data')
2.1.2 查看数据
data.head()

2.1.3 修改列的名字
#给列名字
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin','Normal Nucleoli', 'Mitoses', 'Class']
#给data增加一个names参数
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names = names)
data.head()

2.1.4 列名解释
- Sample Code ID 样本编号
- 细胞团厚度 肿瘤特征1
- 细胞大小的一致性 肿瘤特征2
- 细胞形状的一致性 肿瘤特征3
- 边缘附着性 肿瘤特征4
- 单个上皮细胞大小 肿瘤特征5
- 空核数目 肿瘤特征6
- 平滑染色体形态 肿瘤特征7
- 正常核仁数目 肿瘤特征8
- 分裂次数 肿瘤特征9
- 类型 肿瘤的种类
在现代医疗实践中,深入理解这些肿瘤特征的意义何在对于准确识别异常值和填补缺失值至关重要
2.1.5 查看目标值
data.Class#说明:2表示良性,4表示恶性

2.2 数据基本处理 缺失值处理,划分数据集
2.2.1 ?标志的缺失值
#替换缺失值
data = data.replace(to_replace='?',value=np.nan)
## 删除缺失值的样本
data = data.dropna() #删除有np.nan的行
2.2.2 划分数据集
#特征值
x = data.iloc[:,1:10]
x.head()

#目标值
y = data['Class']
y.head()

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
2.3 特征工程 标准化
transform = StandardScaler()#实例化转换器
#标准化
x_train = transform.fit_transform(x_train)
x_test = transform.fit_transform(x_test)
2.4 逻辑回归机器学习建模
2.4.1 建立模型
estimate = LogisticRegression()#用默认的就行
2.4.2 训练模型
estimate.fit(x_train,y_train)#得到了模型

2.5 模型评估
2.5.1 计算准确率
estimate.score(x_train,y_train)

estimate.score(x_test,y_test)

2.5.2 其他的评估方法
这个下一篇会详细讲解,但是在github的仓库中您可以看到。
3 代码
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# 1.获取数据
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
'Normal Nucleoli', 'Mitoses', 'Class']
data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
names=names)
data.head()
# 2.基本数据处理
# 2.1 缺失值处理
data = data.replace(to_replace="?", value=np.NaN)
data = data.dropna()
# 2.2 确定特征值,目标值
x = data.iloc[:, 1:10]
x.head()
y = data["Class"]
y.head()
# 2.3 分割数据
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22)
# 3.特征工程(标准化)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4.机器学习(逻辑回归)
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
# 5.模型评估
y_predict = estimator.predict(x_test)
y_predict
estimator.score(x_test, y_test)
在很多分类场景当中我们不一定只关注预测的准确率!!!!!
例如以这个癌症为例!我们不重视预测的准确性(即准确性),而是关注于在所有样本中是否能够全面地进行预测(检测)。
