当前位置: 首页 > news >正文

机器学习实战(12):项目实战—端到端的机器学习项目Kaggle糖尿病预测

《机器学习实战》专栏 第12集:项目实战——端到端的机器学习项目Kaggle糖尿病预测


本集为专栏最后一集,本专栏的特点是短平快,聚焦重点,不长篇大论纠缠于理论,而是在介绍基础理论框架基础上,快速切入实战项目和代码,所有代码都经过实践检验,是读者入门和熟悉上手的上佳知识材料

在本集中,我们将通过 Kaggle 平台的经典糖尿病预测(Pima Indians Diabetes Dataset)数据集,系统回顾完整的机器学习流程。本文将涵盖以下内容:

  1. 项目背景与目标
  2. 数据收集与加载
  3. 数据清洗与探索性数据分析 (EDA)
  4. 特征工程与数据预处理
  5. 模型选择与训练
  6. 模型评估与优化
  7. 模型部署与监控
  8. 总结与展望

本文将提供完整代码,并附有详细注释和图表,帮助你掌握从零开始构建一个端到端的机器学习项目的全过程。所有代码在基于python 3.9.5 版本上运行通过。


一、项目背景与目标

背景

糖尿病是一种常见的慢性疾病,早期预测可以帮助医生采取预防措施。Pima Indians Diabetes 数据集是一个经典案例,用于预测患者是否患有糖尿病。该数据集包含多个医学指标(如血糖水平、BMI 等)以及目标变量(是否患有糖尿病)。

目标

我们的目标是构建一个分类模型,根据患者的医学指标预测其是否患有糖尿病。具体任务包括:

  • 数据清洗与探索
  • 特征工程与模型训练
  • 模型评估与优化
  • 部署模型并监控性能

二、数据收集与加载

首先,我们需要从 Kaggle 下载数据集并加载到 Python 环境中。

import pandas as pd# 加载数据集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
column_names = ['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'
]
data = pd.read_csv(url, names=column_names)# 查看数据集前几行
print(data.head())

输出

   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \
0            6      148             72             35        0  33.6   
1            1       85             66             29        0  26.6   
2            8      183             64              0        0  23.3   
3            1       89             66             23       94  28.1   
4            0      137             40             35      168  43.1   DiabetesPedigreeFunction  Age  Outcome  
0                     0.627   50        1  
1                     0.351   31        0  
2                     0.672   32        1  
3                     0.167   21        0  
4                     2.288   33        1  
# 查看数据集的统计信息
print(data.describe())

输出

       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \
count   768.000000  768.000000     768.000000     768.000000  768.000000   
mean      3.845052  120.894531      69.105469      20.536458   79.799479   
std       3.369578   31.972618      19.355807      15.952218  115.244002   
min       0.000000    0.000000       0.000000       0.000000    0.000000   
25%       1.000000   99.000000      62.000000       0.000000    0.000000   
50%       3.000000  117.000000      72.000000      23.000000   30.500000   
75%       6.000000  140.250000      80.000000      32.000000  127.250000   
max      17.000000  199.000000     122.000000      99.000000  846.000000   BMI  DiabetesPedigreeFunction         Age     Outcome  
count  768.000000                768.000000  768.000000  768.000000  
mean    31.992578                  0.471876   33.240885    0.348958  
std      7.884160                  0.331329   11.760232    0.476951  
min      0.000000                  0.078000   21.000000    0.000000  
25%     27.300000                  0.243750   24.000000    0.000000  
50%     32.000000                  0.372500   29.000000    0.000000  
75%     36.600000                  0.626250   41.000000    1.000000  
max     67.100000                  2.420000   81.000000    1.000000  

三、数据清洗与探索性数据分析 (EDA)

数据清洗

检查数据集中是否存在缺失值或异常值。

# 检查缺失值
print(data.isnull().sum())

输出(该数据集比较完整,没有缺失值)

Pregnancies                 0
Glucose                     0
BloodPressure               0
SkinThickness               0
Insulin                     0
BMI                         0
DiabetesPedigreeFunction    0
Age                         0
Outcome                     0
dtype: int64
# 检查异常值(例如,Glucose、BMI 等不应为 0)
abnormal_columns = ['Glucose', 'BloodPressure', 'SkinThickness', 'Insulin', 'BMI']
for col in abnormal_columns:print(f"{col} 中的异常值数量: {len(data[data[col] == 0])}")

输出:

Glucose 中的异常值数量: 5
BloodPressure 中的异常值数量: 35
SkinThickness 中的异常值数量: 227
Insulin 中的异常值数量: 374
BMI 中的异常值数量: 11

数据分布可视化

使用 Matplotlib 和 Seaborn 可视化数据分布。

import matplotlib.pyplot as plt
import seaborn as sns# 目标变量分布
sns.countplot(x='Outcome', data=data)
plt.title("Outcome Distribution")
plt.show()

在这里插入图片描述

# 数值特征分布
data.hist(figsize=(12, 10))
plt.tight_layout()
plt.show()

在这里插入图片描述

图表说明

  • 上图,目标变量 Outcome 的分布显示正负样本比例不均衡。
  • 下图,各数值特征的分布呈现不同的偏态。

四、特征工程与数据预处理

处理异常值

用中位数填充异常值(如 GlucoseBMI 等为 0 的情况)。

for col in abnormal_columns:median_value = data[col].median()data[col] = data[col].replace(0, median_value)

标准化数值特征

对数值特征进行标准化处理。

from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
scaled_features = scaler.fit_transform(data.drop('Outcome', axis=1))
X = pd.DataFrame(scaled_features, columns=data.columns[:-1])
y = data['Outcome']

划分训练集与测试集

from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)

五、模型选择与训练

我们尝试多种分类算法,包括逻辑回归、随机森林和支持向量机。

from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report# 定义模型
models = {"Logistic Regression 逻辑回顾模型": LogisticRegression(),"Random Forest 随机森林模型": RandomForestClassifier(random_state=42),"Support Vector Machine 支持向量机模型": SVC(probability=True)
}# 训练与评估
for name, model in models.items():model.fit(X_train, y_train)y_pred = model.predict(X_test)print(f"Model: {name}")print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")print(classification_report(y_test, y_pred))

输出:

Model: Logistic Regression 逻辑回顾模型
Accuracy: 0.7078precision    recall  f1-score   support0       0.75      0.82      0.78       1001       0.60      0.50      0.55        54accuracy                           0.71       154macro avg       0.68      0.66      0.67       154
weighted avg       0.70      0.71      0.70       154Model: Random Forest  随机森林模型
Accuracy: 0.7597precision    recall  f1-score   support0       0.79      0.85      0.82       1001       0.68      0.59      0.63        54accuracy                           0.76       154macro avg       0.74      0.72      0.73       154
weighted avg       0.75      0.76      0.76       154Model: Support Vector Machine 支持向量机模型
Accuracy: 0.7273precision    recall  f1-score   support0       0.76      0.84      0.80       1001       0.64      0.52      0.57        54accuracy                           0.73       154macro avg       0.70      0.68      0.69       154
weighted avg       0.72      0.73      0.72       154

**可以发现三种模型的各项指标包括准确率差不多,随机森林模型稍微好一点点。


六、模型评估与优化

超参数调优

使用网格搜索优化随机森林模型。

from sklearn.model_selection import GridSearchCVparam_grid = {'n_estimators': [50, 100, 200],'max_depth': [None, 10, 20],'min_samples_split': [2, 5, 10]
}grid_search = GridSearchCV(RandomForestClassifier(random_state=42), param_grid, cv=5, scoring='accuracy')
grid_search.fit(X_train, y_train)print("Best Parameters:", grid_search.best_params_)
print("Best Accuracy:", grid_search.best_score_)

输出:

Best Parameters: {'max_depth': 10, 'min_samples_split': 2, 'n_estimators': 100}
Best Accuracy: 0.7752632280421164

七、模型部署与监控

保存模型

使用 joblib 保存训练好的模型。

import joblibbest_model = grid_search.best_estimator_
joblib.dump(best_model, "diabetes_model.pkl")

输出:

['diabetes_model.pkl']

加载模型并预测

loaded_model = joblib.load("diabetes_model.pkl")
new_data = [[6, 148, 72, 35, 0, 33.6, 0.627, 50]]  # 示例输入
prediction = loaded_model.predict(new_data)
print("Prediction:", prediction)

输出:

Prediction: [1]

可见模型非常准确的预测出了结果。

监控模型性能

定期重新训练模型,并使用 A/B 测试验证新模型的效果。


八、总结与展望

通过本项目,我们完成了一个端到端的机器学习流程,包括数据清洗、特征工程、模型训练与优化、部署与监控。以下是几点建议:

  1. 关注数据质量:数据清洗是成功的关键。
  2. 尝试多种模型:不要局限于单一算法。
  3. 持续监控模型:生产环境中模型性能可能随时间变化。

希望这篇文章对你有所帮助!如果你有任何问题或想法,欢迎在评论区留言讨论。


在这里插入图片描述


下个专栏预告 12集机器学习实战到此就结束了,下个专栏我们将聚焦于深度学习进阶,帮助读者从深度学习的基础知识逐步进阶到前沿技术,涵盖理论、实战和行业应用。每集聚焦一个核心知识点,并结合实际项目进行实践,确保内容既深入又实用。同时,我们将探讨与当下最流行的大模型(如 GPT、BERT、Diffusion Models 等)相关的技术和知识点。

《深度学习进阶》系列博文大纲


第1集:深度学习基础回顾与框架选择

  • 知识点
    • 深度学习的基本概念:神经网络、激活函数、损失函数、优化器。
    • 常见深度学习框架对比:TensorFlow vs PyTorch。
    • GPU 加速与分布式训练简介。
  • 实战项目
    • 使用 TensorFlow 和 PyTorch 构建简单的全连接神经网络,解决 MNIST 手写数字分类问题。
  • 图示
    • 神经网络结构图、MNIST 数据集样例。
  • 前沿关联
    • 引入大模型的背景:为什么需要更深、更复杂的网络?

第2集:卷积神经网络(CNN)与图像分类

  • 知识点
    • 卷积层、池化层、批归一化的作用与原理。
    • 经典 CNN 架构:LeNet、AlexNet、VGG、ResNet。
  • 实战项目
    • 使用 ResNet 实现 CIFAR-10 图像分类任务。
  • 图示
    • CNN 结构图、特征图可视化。
  • 前沿关联
    • 大模型中的视觉架构(如 Vision Transformer, ViT)。

第3集:循环神经网络(RNN)与序列建模

  • 知识点
    • RNN 的基本原理与局限性。
    • LSTM 和 GRU 的改进。
    • 序列建模的应用场景:语言建模、时间序列预测。
  • 实战项目
    • 使用 LSTM 预测股票价格趋势。
  • 图示
    • RNN 展开图、LSTM 单元结构。
  • 前沿关联
    • Transformer 在序列建模中的崛起。

第4集:Transformer 架构与自然语言处理(NLP)

  • 知识点
    • 自注意力机制(Self-Attention)与多头注意力。
    • Transformer 的编码器-解码器结构。
    • BERT、GPT 等预训练模型的原理与应用。
  • 实战项目
    • 使用 Hugging Face Transformers 库微调 BERT 模型,完成情感分析任务。
  • 图示
    • Transformer 架构图、注意力权重热力图。
  • 前沿关联
    • 探讨 GPT-4 和 PaLM 等超大规模语言模型的能力与挑战。

第5集:生成对抗网络(GAN)与图像生成

  • 知识点
    • GAN 的基本原理:生成器与判别器的对抗过程。
    • 改进版 GAN:DCGAN、CycleGAN、StyleGAN。
  • 实战项目
    • 使用 DCGAN 生成手写数字图像。
  • 图示
    • GAN 训练流程图、生成图像样本。
  • 前沿关联
    • Diffusion Models 的兴起及其在图像生成中的优势。

第6集:扩散模型(Diffusion Models)与高质量图像生成

  • 知识点
    • 扩散模型的核心思想:去噪过程与逆向生成。
    • DDPM(Denoising Diffusion Probabilistic Models)与改进版本。
  • 实战项目
    • 使用预训练的 Stable Diffusion 模型生成艺术图像。
  • 图示
    • 扩散模型的训练与推理流程图、生成结果对比。
  • 前沿关联
    • 探讨 MidJourney 和 DALL·E 的背后技术。

第7集:强化学习(RL)与决策系统

  • 知识点
    • 强化学习的基本概念:状态、动作、奖励。
    • Q-Learning 与深度 Q 网络(DQN)。
    • 近端策略优化(PPO)与 Actor-Critic 方法。
  • 实战项目
    • 使用 DQN 玩 Atari 游戏(如 Breakout)。
  • 图示
    • 强化学习框架图、游戏画面截图。
  • 前沿关联
    • AlphaGo 和 ChatGPT 中的强化学习应用。

第8集:多模态学习与跨领域融合

  • 知识点
    • 多模态数据的特点与挑战。
    • 跨模态模型:CLIP、DALL·E、Flamingo。
  • 实战项目
    • 使用 CLIP 模型实现文本到图像的检索。
  • 图示
    • 多模态模型架构图、检索结果展示。
  • 前沿关联
    • 探讨多模态大模型(如 GPT-4 Vision)的应用潜力。

第9集:自监督学习与无监督学习

  • 知识点
    • 自监督学习的核心思想:通过构造伪标签进行预训练。
    • SimCLR、BYOL、MAE 等代表性方法。
  • 实战项目
    • 使用 SimCLR 对 CIFAR-10 数据集进行无监督特征提取。
  • 图示
    • 自监督学习框架图、特征空间可视化。
  • 前沿关联
    • 自监督学习在大模型预训练中的广泛应用。

第10集:联邦学习与隐私保护

  • 知识点
    • 联邦学习的基本原理:分布式训练与隐私保护。
    • 差分隐私与同态加密。
  • 实战项目
    • 使用 TensorFlow Federated 实现简单的联邦学习实验。
  • 图示
    • 联邦学习架构图、训练过程示意图。
  • 前沿关联
    • 探讨大模型在隐私保护方面的挑战与解决方案。

第11集:模型压缩与加速

  • 知识点
    • 模型压缩技术:剪枝、量化、知识蒸馏。
    • TensorRT 和 ONNX 在模型部署中的应用。
  • 实战项目
    • 使用知识蒸馏将 BERT 模型压缩为 DistilBERT。
  • 图示
    • 模型压缩流程图、性能对比图表。
  • 前沿关联
    • 探讨大模型的高效推理技术(如稀疏化、动态计算)。

第12集:大模型的未来与行业应用

  • 知识点
    • 大模型的发展趋势:规模增长、多模态融合、通用人工智能(AGI)。
    • 大模型在医疗、金融、教育等领域的应用案例。
  • 实战项目
    • 使用开源大模型(如 LLaMA 或 Bloom)构建一个问答系统。
  • 图示
    • 大模型发展历程图、行业应用场景图。
  • 前沿关联
    • 探讨 AGI 的可能性与伦理挑战。


http://www.mrgr.cn/news/91861.html

相关文章:

  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • Helix——Figure 02发布通用人形机器人控制的VLA:一组神经网络权重下的快与慢双系统,让两个机器人协作干活
  • qt5实现表盘的旋转效果,通过提升QLabel类
  • go 并发 gorouting chan channel select Mutex sync.One
  • 【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)
  • DDD架构实战:用Java实现一个电商订单系统,快速掌握领域驱动设计
  • 一文详解U盘启动Legacy/UEFI方式以及GPT/MBR关系
  • 【工具篇】【深度解析 DeepAI 工具:开启 AI 应用新体验】
  • RNN中远距离时间步梯度消失问题及解决办法
  • Linux----线程
  • 《Keras 3 :使用 Vision Transformers 进行物体检测》:此文为AI自动翻译
  • 《Keras 3 : 使用迁移学习进行关键点检测》:此文为AI自动翻译
  • IO模型与NIO基础--NIO网络传输选择器--字符编码
  • 代码随想录算法训练营第四十五天| 动态规划08
  • JavaScript变量的作用域介绍
  • nodejs运行的坎坷之路
  • 《论系统需求分析方法》写作心得 - 系统分析师
  • 业务流程中的流程管理
  • STL —— 洛谷字符串(string库)入门题(蓝桥杯题目训练)(二)
  • 企业组网IP规划与先关协议分析