资讯动态

从医疗数据到AI模型:用Python+sklearn复现一个经典的乳腺癌预测项目(含完整代码)

发布时间:2026/9/30 5:56:28 来源:尧图企业网站定制
医疗数据科学实战用Python构建乳腺癌预测模型的完整指南在医疗健康领域数据科学正以前所未有的速度改变着疾病诊断和预测的方式。乳腺癌作为全球女性最常见的恶性肿瘤之一早期准确诊断对提高治愈率至关重要。本文将带您完成一个端到端的机器学习项目使用Python和scikit-learn库基于经典的威斯康星州乳腺癌数据集构建一个可靠的预测模型。1. 项目准备与环境搭建在开始之前我们需要确保开发环境配置正确。推荐使用Jupyter Notebook进行交互式开发它能完美支持数据探索和模型调试的迭代过程。基础环境要求Python 3.8Jupyter Notebookscikit-learn 1.0pandas 1.3matplotlib 3.5seaborn 0.11安装依赖的最简方式pip install jupyter scikit-learn pandas matplotlib seaborn numpy数据集加载是第一步scikit-learn内置了威斯康星州乳腺癌数据集我们可以直接调用from sklearn.datasets import load_breast_cancer # 加载数据集 cancer_data load_breast_cancer() X cancer_data.data # 特征矩阵 y cancer_data.target # 目标变量 feature_names cancer_data.feature_names target_names cancer_data.target_names print(f特征矩阵形状: {X.shape}) print(f目标变量分布:\n良性: {sum(y0)}, 恶性: {sum(y1)})2. 深入理解数据集与探索性分析威斯康星州乳腺癌数据集包含569个样本每个样本有30个特征这些特征是从乳腺肿块的数字化图像中计算得出的。目标变量是二分类的0表示良性1表示恶性。2.1 特征解析数据集中的30个特征实际上是10个核心特征的三种统计量均值、标准差和最差值半径radius纹理texture周长perimeter面积area平滑度smoothness紧密度compactness凹度concavity凹点concave points对称性symmetry分形维数fractal dimension特征相关性分析import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 创建DataFrame df pd.DataFrame(X, columnsfeature_names) df[diagnosis] y # 计算相关系数矩阵 corr_matrix df.corr() # 绘制热力图 plt.figure(figsize(12,10)) sns.heatmap(corr_matrix, annotFalse, cmapcoolwarm, vmin-1, vmax1, linewidths0.5) plt.title(特征相关性热力图) plt.show()2.2 数据可视化理解数据分布对后续建模至关重要。我们可以绘制关键特征的分布对比# 选择几个关键特征进行可视化 key_features [mean radius, mean texture, mean perimeter, mean area] plt.figure(figsize(12,8)) for i, feature in enumerate(key_features): plt.subplot(2,2,i1) sns.histplot(datadf, xfeature, huediagnosis, elementstep, statdensity, common_normFalse) plt.title(f{feature}分布) plt.tight_layout() plt.show()3. 数据预处理与特征工程原始数据很少能直接用于建模适当的预处理能显著提升模型性能。3.1 数据标准化由于各特征的量纲不同我们需要进行标准化处理from sklearn.preprocessing import StandardScaler scaler StandardScaler() X_scaled scaler.fit_transform(X) # 查看标准化后的统计量 print(标准化后特征均值:, X_scaled.mean(axis0).round(2)) print(标准化后特征标准差:, X_scaled.std(axis0).round(2))3.2 特征选择并非所有特征都同等重要我们可以使用统计检验方法选择最有预测力的特征from sklearn.feature_selection import SelectKBest, f_classif selector SelectKBest(score_funcf_classif, k10) X_selected selector.fit_transform(X_scaled, y) # 获取选中的特征 selected_features [feature_names[i] for i in selector.get_support(indicesTrue)] print(选中的关键特征:, selected_features)3.3 数据集划分为了客观评估模型性能我们需要将数据分为训练集和测试集from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split( X_selected, y, test_size0.2, random_state42, stratifyy) print(f训练集大小: {X_train.shape[0]}) print(f测试集大小: {X_test.shape[0]})4. 模型构建与评估我们将比较几种常见分类算法的性能并深入分析模型表现。4.1 逻辑回归模型逻辑回归是二分类问题的基准模型from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score lr LogisticRegression(max_iter1000, random_state42) lr.fit(X_train, y_train) # 预测与评估 y_pred lr.predict(X_test) y_proba lr.predict_proba(X_test)[:,1] print(分类报告:\n, classification_report(y_test, y_pred)) print(ROC AUC得分:, roc_auc_score(y_test, y_proba).round(3))4.2 决策树模型决策树能提供直观的特征重要性from sklearn.tree import DecisionTreeClassifier dt DecisionTreeClassifier(max_depth4, random_state42) dt.fit(X_train, y_train) # 特征重要性可视化 plt.figure(figsize(10,6)) sns.barplot(xdt.feature_importances_, yselected_features) plt.title(决策树特征重要性) plt.show()4.3 随机森林模型随机森林通常能提供更好的性能from sklearn.ensemble import RandomForestClassifier rf RandomForestClassifier(n_estimators100, random_state42) rf.fit(X_train, y_train) # 评估 y_pred_rf rf.predict(X_test) print(随机森林分类报告:\n, classification_report(y_test, y_pred_rf))4.4 模型比较与选择我们可以系统比较各模型的性能指标模型准确率精确率召回率F1分数ROC AUC逻辑回归0.9560.9520.9760.9640.991决策树0.9390.9300.9760.9520.961随机森林0.9650.9520.9880.9700.993从综合性能看随机森林表现最佳但逻辑回归也有相当竞争力且更易解释。5. 模型解释与部署建议构建高性能模型只是第一步理解模型决策过程同样重要。5.1 模型解释技术使用SHAP值解释随机森林的预测import shap # 创建解释器 explainer shap.TreeExplainer(rf) shap_values explainer.shap_values(X_test) # 可视化单个预测解释 shap.initjs() shap.force_plot(explainer.expected_value[1], shap_values[1][0,:], selected_features)5.2 部署注意事项在实际医疗应用中需要考虑模型校准确保预测概率反映真实可能性性能监控定期评估模型在生产环境的表现伦理考量避免算法偏见确保公平性from sklearn.calibration import calibration_curve # 绘制校准曲线 prob_true, prob_pred calibration_curve(y_test, y_proba, n_bins10) plt.figure(figsize(8,6)) plt.plot(prob_pred, prob_true, markero, label逻辑回归) plt.plot([0,1], [0,1], linestyle--, label理想情况) plt.xlabel(预测概率) plt.ylabel(实际概率) plt.legend() plt.title(模型校准曲线) plt.show()5.3 构建端到端预测流程将整个流程封装为可复用的管道from sklearn.pipeline import Pipeline from sklearn.compose import ColumnTransformer # 定义预处理和建模流程 preprocessor ColumnTransformer( transformers[ (scaler, StandardScaler(), list(range(X.shape[1]))) ]) pipeline Pipeline([ (preprocessor, preprocessor), (selector, SelectKBest(f_classif, k10)), (classifier, RandomForestClassifier(random_state42)) ]) # 训练完整流程 pipeline.fit(X, y) # 保存模型 import joblib joblib.dump(pipeline, breast_cancer_pipeline.pkl)

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑