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

乳腺癌数据集分类:SVM与特征工程实战,30维特征筛选至6维 乳腺癌数据集分类SVM与特征工程实战30维特征筛选至6维在医疗诊断领域机器学习模型正逐渐成为辅助决策的重要工具。威斯康星乳腺癌数据集作为经典的二分类问题为数据科学家提供了研究特征工程与模型优化的绝佳案例。本文将带您深入探索如何通过特征筛选和SVM建模从30个原始特征中提炼出6个核心特征实现与全特征相当甚至更优的分类性能。1. 数据集理解与探索性分析威斯康星乳腺癌诊断数据集包含569个样本每个样本有30个特征和1个二分类标签良性/恶性。这些特征实际上是10个细胞核特征的三种统计量均值特征meanradius_mean, texture_mean等10个标准差特征seradius_se, texture_se等10个最大特征worstradius_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, annotTrue, cmapcoolwarm, center0) plt.title(特征间相关系数热力图) plt.show()热力图中可以发现几组高度相关的特征radius_mean、perimeter_mean和area_mean的相关系数0.99compactness_mean、concavity_mean和concave_points_mean的相关系数0.85smoothness_mean与其他特征的相关系数普遍0.5提示高度相关的特征不仅增加计算负担还可能导致模型过拟合。特征工程的首要任务就是识别并处理这类冗余特征。2. 特征筛选策略与实施基于相关性分析我们采用分层特征选择方法2.1 统计量维度筛选三种统计量mean/se/worst从不同角度描述相同特征。通过交叉验证比较发现特征组验证集准确率训练时间(s)mean0.9631.2se0.9321.1worst0.9561.3选择依据mean特征在准确率和效率上达到最佳平衡因此保留mean组特征。2.2 相关性维度筛选对10个mean特征进行二次筛选半径相关组保留radius_mean与perimeter/area高度相关形状相关组保留concavity_mean与compactness/concave points高度相关独立特征保留texture_mean、smoothness_mean等低相关性特征最终选择的6个特征radius_meantexture_meanconcavity_meansmoothness_meansymmetry_meanfractal_dimension_meanselected_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(k6)), # 特征选择 ]) model SVC(kernelrbf, C1.0, gammascale)3.2 核函数选择实验比较不同核函数在筛选特征上的表现核函数训练准确率测试准确率训练时间(s)线性核0.9710.9470.8多项式核0.9820.9351.5RBF核0.9880.9561.2Sigmoid核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, refitTrue, cv5) 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_repeats10, random_state42 ) # 输出特征重要性排序 for i in result.importances_mean.argsort()[::-1]: print(f{selected_features[i]}: {result.importances_mean[i]:.3f})结果显示radius_mean (0.142)concavity_mean (0.121)texture_mean (0.085)smoothness_mean (0.062)symmetry_mean (0.041)fractal_dimension_mean (0.028)5. 实战建议与注意事项特征相关性阈值建议设定相关系数阈值0.9高于此值的特征组只保留代表性特征数据标准化必要性SVM对特征尺度敏感必须进行标准化处理样本不平衡处理本数据集良性/恶性比例为63%/37%若更不平衡需采用过采样或类别权重模型解释性可通过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]