2. 乳腺癌检测

任务说明

本案例使用威斯康星乳腺癌数据集(569个样本,30个特征),完成支持向量机(SVM)的分类调参任务。目标是通过网格搜索确定RBF核SVM的最优超参数(C和gamma),并评估调参后模型在测试集上的分类性能。核心指标为准确率、精确率、召回率与F1分数。

实现方案

代码分为四个步骤:加载并划分数据(70%训练/30%测试,分层抽样保证类别平衡);使用StandardScaler对特征标准化;通过GridSearchCV在训练集上执行5折交叉验证,搜索C ∈ {0.1, 1, 10, 100}与gamma ∈ {0.001, 0.01, 0.1, 1}共16组超参数组合;用最优参数重新训练SVM并在测试集上评估。代码直接输出最优参数与各项分类指标,不依赖任何未展示的前置代码。

代码实现

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

# 1. 加载数据
data = load_breast_cancer()
X, y = data.data, data.target

# 2. 划分训练集与测试集(分层抽样)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# 3. 特征标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 4. 网格搜索最优超参数(5折交叉验证)
param_grid = {
    'C': [0.1, 1, 10, 100],
    'gamma': [0.001, 0.01, 0.1, 1]
}
svm = SVC(kernel='rbf', random_state=42)
grid_search = GridSearchCV(
    svm, param_grid, cv=5, scoring='accuracy', n_jobs=-1
)
grid_search.fit(X_train_scaled, y_train)

# 5. 输出最优参数
best_params = grid_search.best_params_
print(f"最优参数: C={best_params['C']}, gamma={best_params['gamma']}")

# 6. 用最优参数重新训练并评估
best_svm = SVC(kernel='rbf', C=best_params['C'], gamma=best_params['gamma'], random_state=42)
best_svm.fit(X_train_scaled, y_train)
y_pred = best_svm.predict(X_test_scaled)

# 7. 计算分类指标
acc = accuracy_score(y_test, y_pred)
prec = precision_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print(f"测试集准确率: {acc:.4f}")
print(f"精确率: {prec:.4f}")
print(f"召回率: {rec:.4f}")
print(f"F1分数: {f1:.4f}")

落地与验证

运行方式:在安装有numpy、scikit-learn的Python环境中直接执行上述脚本。数据集由load_breast_cancer自动从scikit-learn内置数据源加载,无需额外下载。

验证方法:观察控制台输出。若程序正常结束并打印出最优参数与四个指标值,说明调参流程执行成功。判定标准:最优参数应落在搜索网格内(C为0.1/1/10/100之一,gamma为0.001/0.01/0.1/1之一);测试集准确率应高于0.95(该数据集上RBF-SVM经标准化与调参后通常能达到此水平,但具体数值取决于交叉验证结果,以实际输出为准)。

预期输出示例(实际值可能因随机种子与交叉验证划分略有不同):

最优参数: C=10, gamma=0.01
测试集准确率: 0.9825
精确率: 0.9904
召回率: 0.9810
F1分数: 0.9857
SVM调参流程与数据流 加载数据集 569样本 × 30特征 训练/测试划分 70%训练 / 30%测试 分层抽样保持类别比例 StandardScaler 均值0,方差1 GridSearchCV C: 0.1~100 gamma: 0.001~1 5折交叉验证 交叉验证循环 最优参数 C* 与 gamma* 用最优参数重新训练SVM RBF核,C=C*, gamma=gamma* 测试集评估 准确率 / 精确率 召回率 / F1分数 数据维度说明 • 特征:30个细胞核数值特征 • 标签:恶性(1) / 良性(0) • 训练集:398个样本 • 测试集:171个样本 • 类别分布:212恶性 / 357良性 验证观测点 ① 最优参数是否在搜索网格内 ② 测试集准确率是否 > 0.95