一、威斯康星州乳腺癌数据集介绍
威斯康星州乳腺癌数据集是scikit-learn库中的一个常用内置数据集,主要用于分类任务。该数据集包含了从乳腺癌患者收集的肿瘤特征的测量值,以及相应的良性(benign)或恶性(malignant)标签。
数据集简介
- 数据集名称: 威斯康星州乳腺癌数据集(Breast Cancer Wisconsin Dataset)
- 数据集来源: 由威斯康星州医院的Dr. William H. Wolberg收集
- 特征: 数据集包含30个数值型特征,这些特征描述了乳腺肿瘤的不同测量值,如肿瘤的半径、纹理、对称性等
- 目标变量: 二分类,代表肿瘤的良性(benign)或恶性(malignant)状态
- 样本数量: 569个样本,其中良性样本357个,恶性样本212个
加载数据集
在使用sklearn库时,可以通过调用datasets.load_breast_cancer()函数加载威斯康星州乳腺癌数据集。加载后的数据集包含两个主要部分:data和target。data存储特征数据,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})")
三、实验结果与分析
-
实验结果展示
- 准确记录并粘贴测试集准确率结果(保留两位小数);
- 粘贴完整的分类报告(精确率、召回率、F1 分数、支持样本数);
- 粘贴特征重要性排序结果。
-
结果分析
- 模型性能分析:结合准确率、精确率、召回率等指标,评价模型在肿瘤良恶性分类任务中的效果;
- 特征重要性分析:列出前 5 个最重要特征,分析其与肿瘤良恶性判断的关联性;
- 异常/不足分析:若存在分类偏差、性能不足等问题,简要分析可能原因。
-
参数调优实验
- 修改随机森林核心参数:
n_estimators(50/200)、max_depth(3/10); - 记录不同参数组合下的模型准确率;
- 对比分析参数变化对模型性能的影响,总结最优参数组合。
- 修改随机森林核心参数:
四、实验讨论
- 对比随机森林与单一决策树的优缺点,说明集成学习的优势;
- 说明如何判断模型是否过拟合/欠拟合,以及
max_depth等参数的调优思路; - 拓展思考:随机森林还可应用于哪些实际分类场景(如信用评估、疾病预测、文本分类等);
- 总结本次实验中数据分层采样(stratify=y)的作用与意义。
五、实验总结
- 说明本次实验是否完成预定目标,掌握了哪些核心技能;
- 梳理实现随机森林分类任务的完整流程(数据加载→划分→训练→评估→分析);
- 记录实验过程中遇到的问题(如代码报错、参数理解错误、结果异常等)及解决方法;
- 谈谈对机器学习分类任务、模型评估与特征分析的收获与体会。