从零开始监督学习2

从零开始监督学习2
flowwalker传统监督学习之逻辑回归
语法进阶
1. scikit-learn 分类任务专属语法框架
(1)分类任务专用内置数据集模块
通用导入格式:from sklearn.datasets import 数据集函数名
| 数据集类型 | 函数名 | 数据集说明 | 核心用途 |
|---|---|---|---|
| 二分类数据集 | load_breast_cancer() | 威斯康星乳腺癌数据集,569个样本,30个特征,标签为良性/恶性肿瘤,无缺失值,官方标准分类基准数据集 | 逻辑回归题目指定使用数据集 |
| 多分类数据集 | load_iris() | 鸢尾花三分类数据集,150个样本,4个特征,3种鸢尾花类别 | 示例代码使用数据集 |
| 多分类数据集 | load_wine() | 葡萄酒三分类数据集,178个样本,13个特征,3种葡萄酒类别 | 拓展练习 |
| 分类数据集通用属性 | 说明 |
|---|---|
数据集.data | 特征数据(二维数组,每行1个样本,每列1个特征) |
数据集.target | 标签数据(一维数组,分类任务中为0/1/2…的类别编码) |
数据集.feature_names | 特征名称列表 |
数据集.target_names | 类别名称列表(如['良性','恶性']) |
(2)数据集划分新增核心参数:stratify
已包含在train_test_split语法中,为分类任务专属参数
| 参数名 | 语法格式 | 作用说明 | 使用要求 |
|---|---|---|---|
| stratify | train_test_split(..., stratify=标签数据) | 按标签数据的类别分布进行分层抽样,保证训练集和测试集中,各类别的样本占比和原数据集完全一致,避免样本分布不均导致模型效果偏差 | 分类任务推荐必用,保证类别分布均衡 |
(3)LogisticRegression 逻辑回归分类模型
通用导入格式:from sklearn.linear_model import LogisticRegression
通用创建格式:model = LogisticRegression(参数1=值1, 参数2=值2, random_state=42)
| 核心参数名 | 默认值 | 详细作用说明 | 本次任务使用要求 |
|---|---|---|---|
penalty | 'l2' | 正则化类型,可选'l1'/'l2'/'elasticnet'/'none',用于控制模型复杂度,防止过拟合 | 保持默认'l2'即可 |
C | 1.0 | 正则化强度的倒数,C越小,正则化惩罚越强,模型越简单;C越大,惩罚越弱,越接近无正则化的逻辑回归 | 无特殊要求时保持默认1.0 |
random_state | None | 固定随机种子,保证模型训练结果可复现 | 必须设置为42 |
max_iter | 100 | 模型求解的最大迭代次数,若数据未标准化,容易出现“未收敛”报错 | 必须设置为1000,保证模型收敛 |
fit_intercept | True | 是否计算模型偏置项(截距项) | 保持默认True即可 |
solver | 'lbfgs' | 模型求解算法,小数据集默认'lbfgs'即可,适配二分类/多分类任务 | 保持默认即可 |
| 模型专属方法 | 作用说明 |
|---|---|
model.predict_proba(X) | 预测样本属于每个类别的概率,返回二维数组,每行对应1个样本,每列对应1个类别的概率;二分类任务中第二列即为正类的预测概率,用于绘制ROC曲线 |
(4)分类任务专用评估指标模块
通用导入格式:from sklearn.metrics import 指标函数名
| 指标函数名 | 语法格式 | 详细作用说明 | 使用场景 |
|---|---|---|---|
accuracy_score | accuracy_score(y_true, y_pred) | 分类准确率,正确预测的样本数占总样本数的比例,取值0-1,越接近1模型效果越好 | 输出模型核心准确率指标 |
classification_report | classification_report(y_true, y_pred, target_names=类别名称列表) | 生成完整分类报告,输出每个类别的精确率(Precision)、召回率(Recall)、F1分数、支持样本数,全面评估分类效果 | 输出模型详细分类性能报告 |
confusion_matrix | confusion_matrix(y_true, y_pred) | 生成混淆矩阵,二维数组,行代表真实类别,列代表预测类别,直观展示模型的分类正确/错误情况 | 生成混淆矩阵,用于后续热力图可视化 |
roc_curve | fpr, tpr, thresholds = roc_curve(y_true, y_score) | 计算ROC曲线的坐标值,y_true为真实标签,y_score为正类的预测概率;返回fpr(假阳性率,x轴)、tpr(真阳性率,y轴)、阈值 | 计算ROC曲线坐标,用于绘制ROC曲线 |
roc_auc_score | roc_auc_score(y_true, y_score) | 计算ROC曲线下的面积AUC值,取值0-1,越接近1模型的分类区分能力越强,0.5为随机猜测水平 | 输出模型AUC指标,评估模型泛化能力 |
2. Matplotlib 新增绘图语法
| 语法格式 | 详细作用说明 | 使用场景 |
|---|---|---|
plt.fill_between(x, y1, y2, alpha=透明度, color=颜色, label=标签) | 填充两条曲线之间的区域 | 填充ROC曲线与随机猜测线(y=x)之间的区域,美化ROC曲线 |
plt.text(x, y, 文本内容, fontsize=字体大小) | 在图表指定坐标位置添加文本标注 | 在ROC曲线中添加AUC数值的文本标注,直观展示指标 |
3. Seaborn 新增核心语法(混淆矩阵可视化专用)
通用导入格式:import seaborn as sns
| 语法格式 | 详细参数说明 | 作用说明 | 使用场景 |
|---|---|---|---|
sns.heatmap(数据矩阵, annot=True, fmt="d", cmap=颜色映射, xticklabels=类别名, yticklabels=类别名, cbar=True) | - annot=True:在热力图格子中显示数值- fmt="d":数值格式为整数(混淆矩阵为整数)- cmap:颜色映射方案,如"Blues"、"OrRd"- xticklabels/yticklabels:坐标轴的类别名称- cbar:是否显示右侧颜色条 | 绘制热力图,将混淆矩阵可视化 | 混淆矩阵的可视化,替代纯数字的混淆矩阵,更清晰直观 |
逻辑回归问题详细题目
背景说明
本次任务使用 scikit-learn官方内置的威斯康星乳腺癌数据集(Breast Cancer Wisconsin Dataset),该数据集源自真实临床肿瘤研究,是全球机器学习领域用于二分类建模的标准基准数据集,在所有合规Python环境中加载的数据完全一致(特征数量、样本数量、数值分布均固定),可100%复现实验结果,适用于入门级逻辑回归分类模型的上机实践与验证。
本数据集的核心建模场景为 “基于患者乳腺肿瘤的影像学特征,预测肿瘤是良性还是恶性”,模拟临床场景中“通过肿瘤的量化特征,辅助医生完成癌症早期筛查与诊断”的实际需求——临床医生可通过这类模型,结合肿瘤的影像学特征快速判断良恶性风险,减少漏诊、误诊,为后续诊疗方案制定提供数据支撑,这也是本次逻辑回归建模任务的核心目的。
数据集详细说明(明确变量、数据含义,清晰指导建模)
- 样本与数据规模:数据集共包含569名患者的乳腺肿瘤样本,每个样本对应1个标签(肿瘤良恶性)和30个特征(肿瘤影像学量化特征),无缺失值、无异常值,无需额外数据清洗,可直接用于建模。
- 特征变量(输入变量,共30个,均为连续型数值,对应肿瘤的核心影像学特征):
所有特征均为肿瘤细胞核的量化指标,包括半径、纹理、周长、面积、光滑度、紧凑度、凹度、对称性、分形维数等核心特征,每个特征均包含均值、标准差、最大值3个维度,最终组成30个特征变量,全面反映肿瘤的形态学特征。 - 标签变量(输出变量,二分类离散值):
标签值为0/1二分类编码:0代表良性肿瘤,1代表恶性肿瘤;建模核心是通过上述30个肿瘤影像学特征,精准判断肿瘤的良恶性,完成二分类预测任务。
必须完成的操作要求
- 从scikit-learn库中加载上述指定的官方威斯康星乳腺癌数据集
- 将数据集拆分为训练集与测试集,要求测试集占总数据的30%,固定随机种子为42,必须使用分层抽样方式保证类别分布一致
- 对训练集与测试集的特征数据完成标准化处理
- 调用scikit-learn库中的LogisticRegression模型,在训练集上完成模型训练,要求固定随机种子为42,最大迭代次数max_iter设置为1000
- 使用训练好的模型,对测试集完成类别预测与正类概率预测
- 输出测试集预测结果对应的准确率、完整分类报告、混淆矩阵
- 绘制测试集预测结果对应的ROC曲线,同时输出对应的AUC数值
- 绘制混淆矩阵对应的热力图,标注类别名称与数值
- 输出训练完成后模型的特征权重数值与偏置项数值
##上机操作流程指南
前置准备
- 打开Mac自带的「终端」App
- 激活之前创建的专属实验环境:
conda activate ml_lab(环境已包含所有所需依赖库,无需重新安装) - 打开VS Code(或其他你习惯的代码编辑器),新建一个名为
logistic_regression_lab.py的文件
实验操作步骤(按顺序执行)
- 在
logistic_regression_lab.py文件中,按顺序编写代码,先导入本次实验需要用到的所有工具库 - 加载任务指定的官方威斯康星乳腺癌数据集
- 按要求完成训练集与测试集的拆分,严格遵循分层抽样要求
- 完成训练集与测试集的特征数据标准化处理
- 定义任务指定的LogisticRegression模型,设置要求的所有参数
- 在训练集上完成模型训练
- 对测试集完成类别预测与正类概率预测
- 计算并输出要求的所有分类评估指标
- 绘制要求的ROC曲线与混淆矩阵热力图
- 输出训练完成后模型的特征权重数值与偏置项数值
- 保存文件,在终端中执行
python logistic_regression_lab.py运行代码
逻辑回归问题学习辅助材料
(一)实验流程图
1 | flowchart TD |
(二)逻辑回归通用实验伪代码
1 | # 伪代码仅说明逻辑,不能直接运行 |
示例代码
(本代码基于鸢尾花二分类数据集,与本次题目要求的乳腺癌数据集完全不同,仅框架与操作流程完全一致,可用于参考学习,无法直接用于本次题目)
1 | # 1. 基础配置:屏蔽警告、Mac中文适配、导入所有工具库 |








