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