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

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

威斯康星州乳腺癌数据集是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 小时前
力扣Hot100(23)反转链表
算法·leetcode·链表
Yvonne爱编码1 小时前
机器学习---聚类四大算法完整实验教程(层次 / K-Means/GMM/ 谱聚类)
算法·机器学习·聚类
東隅已逝,桑榆非晚1 小时前
C语言内存函数
c语言·开发语言·笔记·算法
深蓝电商API1 小时前
爬虫代理IP智能调度:基于响应速度的实时评分算法
爬虫·算法
汉克老师1 小时前
GESP5级C++考试语法知识(十七、二分算法提高篇(一))
c++·算法·二分算法·gesp5级·gesp五级·二分算法易错点
灵智实验室1 小时前
PX4状态估计技术EKF2详解(五):EKF2 故障检测、重置与鲁棒性——从单实例到多实例仲裁
算法·无人机·px 4
programhelp_1 小时前
Roblox Coding OA 面经分享|题量不小,但整体更偏工程思维
人工智能·算法·面试
周末也要写八哥1 小时前
机器学习评价指标之平均概念
人工智能·算法·机器学习
运筹vivo@1 小时前
33. 搜索旋转排序数组(leetcode每日一题)
c++·算法