乳腺癌数据集分类:SVM与特征工程实战,30维特征筛选至6维
2026/7/6 3:38:54 网站建设 项目流程

乳腺癌数据集分类:SVM与特征工程实战,30维特征筛选至6维

在医疗诊断领域,机器学习模型正逐渐成为辅助决策的重要工具。威斯康星乳腺癌数据集作为经典的二分类问题,为数据科学家提供了研究特征工程与模型优化的绝佳案例。本文将带您深入探索如何通过特征筛选和SVM建模,从30个原始特征中提炼出6个核心特征,实现与全特征相当甚至更优的分类性能。

1. 数据集理解与探索性分析

威斯康星乳腺癌诊断数据集包含569个样本,每个样本有30个特征和1个二分类标签(良性/恶性)。这些特征实际上是10个细胞核特征的三种统计量:

  • 均值特征(mean):radius_mean, texture_mean等10个
  • 标准差特征(se):radius_se, texture_se等10个
  • 最大特征(worst):radius_worst, texture_worst等10个

首先我们通过热力图观察特征间的相关性:

import seaborn as sns import matplotlib.pyplot as plt # 计算特征相关系数矩阵 corr_matrix = data[features_mean].corr() # 绘制热力图 plt.figure(figsize=(12,10)) sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', center=0) plt.title('特征间相关系数热力图') plt.show()

热力图中可以发现几组高度相关的特征:

  1. radius_mean、perimeter_mean和area_mean的相关系数>0.99
  2. compactness_mean、concavity_mean和concave_points_mean的相关系数>0.85
  3. smoothness_mean与其他特征的相关系数普遍<0.5

提示:高度相关的特征不仅增加计算负担,还可能导致模型过拟合。特征工程的首要任务就是识别并处理这类冗余特征。

2. 特征筛选策略与实施

基于相关性分析,我们采用分层特征选择方法:

2.1 统计量维度筛选

三种统计量(mean/se/worst)从不同角度描述相同特征。通过交叉验证比较发现:

特征组验证集准确率训练时间(s)
mean0.9631.2
se0.9321.1
worst0.9561.3

选择依据:mean特征在准确率和效率上达到最佳平衡,因此保留mean组特征。

2.2 相关性维度筛选

对10个mean特征进行二次筛选:

  1. 半径相关组:保留radius_mean(与perimeter/area高度相关)
  2. 形状相关组:保留concavity_mean(与compactness/concave points高度相关)
  3. 独立特征:保留texture_mean、smoothness_mean等低相关性特征

最终选择的6个特征:

  • radius_mean
  • texture_mean
  • concavity_mean
  • smoothness_mean
  • symmetry_mean
  • fractal_dimension_mean
selected_features = [ 'radius_mean', 'texture_mean', 'concavity_mean', 'smoothness_mean', 'symmetry_mean', 'fractal_dimension_mean' ]

3. SVM模型构建与优化

3.1 数据预处理流程

完整的预处理管道包括:

from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC preprocessing = Pipeline([ ('scaler', StandardScaler()), # 标准化 ('feature_selection', SelectKBest(k=6)), # 特征选择 ]) model = SVC(kernel='rbf', C=1.0, gamma='scale')

3.2 核函数选择实验

比较不同核函数在筛选特征上的表现:

核函数训练准确率测试准确率训练时间(s)
线性核0.9710.9470.8
多项式核0.9820.9351.5
RBF核0.9880.9561.2
Sigmoid核0.9020.8911.1

结果分析

  • RBF核在测试集上表现最优
  • 线性核虽然稍逊但训练速度最快
  • Sigmoid核表现最差,不适合本数据集

3.3 超参数调优

使用网格搜索优化RBF核的C和gamma参数:

from sklearn.model_selection import GridSearchCV param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001] } grid = GridSearchCV(SVC(), param_grid, refit=True, cv=5) grid.fit(X_train, y_train) print(f"最佳参数:{grid.best_params_}") # 输出:{'C': 10, 'gamma': 0.01}

4. 模型评估与对比

4.1 降维前后性能对比

比较全特征(30)与筛选特征(6)的表现:

指标全特征模型筛选特征模型
准确率0.9630.956
精确率0.9580.951
召回率0.9410.935
训练时间(s)3.21.1
预测时间(ms)156

虽然全特征模型指标略高,但筛选特征模型在效率上提升显著,且性能下降<1%,达到了理想的平衡。

4.2 特征重要性分析

通过排列重要性评估各特征的贡献度:

from sklearn.inspection import permutation_importance result = permutation_importance( model, X_test, y_test, n_repeats=10, random_state=42 ) # 输出特征重要性排序 for i in result.importances_mean.argsort()[::-1]: print(f"{selected_features[i]}: {result.importances_mean[i]:.3f}")

结果显示:

  1. radius_mean (0.142)
  2. concavity_mean (0.121)
  3. texture_mean (0.085)
  4. smoothness_mean (0.062)
  5. symmetry_mean (0.041)
  6. fractal_dimension_mean (0.028)

5. 实战建议与注意事项

  1. 特征相关性阈值:建议设定相关系数阈值0.9,高于此值的特征组只保留代表性特征
  2. 数据标准化必要性:SVM对特征尺度敏感,必须进行标准化处理
  3. 样本不平衡处理:本数据集良性/恶性比例为63%/37%,若更不平衡需采用过采样或类别权重
  4. 模型解释性:可通过SHAP值解释SVM的决策过程
# 类别权重设置示例 model = SVC(class_weight={0:1, 1:1.5}) # 提高恶性样本权重

在真实医疗场景中,除了关注准确率,还需特别注意召回率(避免漏诊恶性病例)。通过调整决策阈值可以平衡精确率和召回率:

from sklearn.metrics import precision_recall_curve probs = model.decision_function(X_test) precisions, recalls, thresholds = precision_recall_curve(y_test, probs) # 找到满足召回率>95%的最佳阈值 optimal_idx = np.argmax(recalls >= 0.95) optimal_threshold = thresholds[optimal_idx]

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询