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

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

威斯康星州乳腺癌数据集是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. 谈谈对机器学习分类任务、模型评估与特征分析的收获与体会。
相关推荐
leisoo809726 分钟前
财报数据怎么排雷本地化Python构建财务异常预警系统
人工智能·python·算法
luj_17683 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
郝学胜-神的一滴3 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
爱编程的小新☆3 小时前
【LeetCode】从递归到 Flood Fill:5 道题吃透 DFS 的选择、回溯与标记
java·算法·leetcode·深度优先·回溯·flood fill
Water_Sunzhipeng3 小时前
2024牛客暑期多校训练营1
算法
hetao17338374 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
技术小黑4 小时前
RNN算法实战系列06 | LSTM 实现糖尿病探索与预测
rnn·算法·lstm
疯狂打码的少年4 小时前
【数据结构】二叉树的性质(五大性质+计算)
数据结构·笔记·算法
wabs6664 小时前
关于图论【A*算法 | 卡码网127.骑士的攻击的思考】
数据结构·算法·图论·卡码网·广搜的改进版
CIO_Alliance5 小时前
AI认知系列(3)| 数据、算法、算力、场景四要素协同
人工智能·算法·ipaas·系统集成·企业cio联盟·企业级ai化转型