基于随机森林的乳腺癌肿瘤分类实验

一、威斯康星州乳腺癌数据集介绍

威斯康星州乳腺癌数据集是scikit-learn库中的一个常用内置数据集,主要用于分类任务。该数据集包含了从乳腺癌患者收集的肿瘤特征的测量值,以及相应的良性(benign)或恶性(malignant)标签。

数据集简介

  • 数据集名称: 威斯康星州乳腺癌数据集(Breast Cancer Wisconsin Dataset)
  • 数据集来源: 由威斯康星州医院的Dr. William H. Wolberg收集
  • 特征: 数据集包含30个数值型特征,这些特征描述了乳腺肿瘤的不同测量值,如肿瘤的半径、纹理、对称性等
  • 目标变量: 二分类,代表肿瘤的良性(benign)或恶性(malignant)状态
  • 样本数量: 569个样本,其中良性样本357个,恶性样本212个

加载数据集

在使用sklearn库时,可以通过调用datasets.load_breast_cancer()函数加载威斯康星州乳腺癌数据集。加载后的数据集包含两个主要部分:datatargetdata存储特征数据,target存储目标变量(标签)数据。

二、参考代码

安装sklearn

python 复制代码
pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir

需调参代码

python 复制代码
# ===================== 1. 导入需要的工具库 =====================
# 加载内置数据集
from sklearn.datasets import load_breast_cancer
# 用于划分训练集和测试集
from sklearn.model_selection import train_test_split
# 随机森林分类算法
from sklearn.ensemble import RandomForestClassifier
# 模型评估指标:准确率、分类报告
from sklearn.metrics import classification_report, accuracy_score
# 数值计算库
import numpy as np

# ===================== 2. 加载并处理数据集 =====================
# 加载 sklearn 内置的乳腺癌分类数据集
data = load_breast_cancer()

# 特征数据(模型输入:肿瘤的各项测量指标)
X = data.data
# 标签数据(模型输出:良性/恶性)
y = data.target
# 特征名称(方便查看每个特征的含义)
feature_names = data.feature_names
# 类别名称(恶性 malignant / 良性 benign)
target_names = data.target_names

# ===================== 3. 增加噪声 =====================
# 设置随机种子,保证噪声可复现
np.random.seed(42)
# 生成高斯噪声
noise = np.random.normal(0, 12, X.shape)
# 将噪声加入原始数据
X = X + noise

# ===================== 4. 划分训练集与测试集 =====================
# 80% 数据用于训练模型,20% 用于测试
# stratify=y 保证训练集和测试集类别比例一致
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# ===================== 5. 构建模型 =====================
rf = RandomForestClassifier(
    n_estimators=3,      # 决策树数量
    max_depth=1,         # 树深度
    random_state=42      # 固定随机种子,保证结果可复现
)

# ===================== 6. 训练模型 =====================
# 用训练集数据训练随机森林
rf.fit(X_train, y_train)

# ===================== 7. 模型预测 =====================
# 用训练好的模型对测试集进行预测
y_pred = rf.predict(X_test)

# ===================== 8. 模型评估 =====================
# 输出测试集分类准确率
print("测试集准确率: {:.2f}%".format(accuracy_score(y_test, y_pred) * 100))

# 输出详细分类报告(精确率、召回率、F1分数)
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=target_names))

# ===================== 9. 特征重要性排序 =====================
# 获取每个特征对分类结果的重要性分数
importances = rf.feature_importances_
# 按重要性从高到低排序
indices = np.argsort(importances)[::-1]

# 输出特征重要性排名
print("\n特征重要性排名:")
for i, index in enumerate(indices):
    print(f"{i + 1}. {feature_names[index]} ({importances[index]:.4f})")

三、实验结果与分析

  1. 实验结果展示

    • 准确记录并粘贴测试集准确率结果(保留两位小数);
    • 粘贴完整的分类报告(精确率、召回率、F1 分数、支持样本数);
    • 粘贴特征重要性排序结果。
  2. 结果分析

    • 模型性能分析:结合准确率、精确率、召回率等指标,评价模型在肿瘤良恶性分类任务中的效果;
    • 特征重要性分析:列出前 5 个最重要特征,分析其与肿瘤良恶性判断的关联性;
    • 异常/不足分析:若存在分类偏差、性能不足等问题,简要分析可能原因。
  3. 参数调优实验

    • 修改随机森林核心参数:n_estimators(50/200)、max_depth(3/10);
    • 记录不同参数组合下的模型准确率;
    • 对比分析参数变化对模型性能的影响,总结最优参数组合。

四、实验讨论

  1. 对比随机森林与单一决策树的优缺点,说明集成学习的优势;
  2. 说明如何判断模型是否过拟合/欠拟合,以及max_depth等参数的调优思路;
  3. 拓展思考:随机森林还可应用于哪些实际分类场景(如信用评估、疾病预测、文本分类等);
  4. 总结本次实验中数据分层采样(stratify=y)的作用与意义。

五、实验总结

  1. 说明本次实验是否完成预定目标,掌握了哪些核心技能;
  2. 梳理实现随机森林分类任务的完整流程(数据加载→划分→训练→评估→分析);
  3. 记录实验过程中遇到的问题(如代码报错、参数理解错误、结果异常等)及解决方法;
  4. 谈谈对机器学习分类任务、模型评估与特征分析的收获与体会。
相关推荐
爱刷碗的苏泓舒1 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
烬羽4 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米4 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠5 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA6 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel6 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客7 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨7 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
闪电悠米8 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
栋***t8 小时前
从“纸质试卷”到“AI智能组卷”,麦塔在线考试系统如何重构出题逻辑?
java·大数据·人工智能·算法·重构