9.4 机器学习与人工智能


9.4 机器学习与人工智能

本节摘要:机器学习分两条工作流——经典机器学习(表格数据、scikit-learn 生态)与深度学习(神经网络、PyTorch 生态)。本节跑通一个最小但流程完整的经典 ML 闭环,讲清"数据泄漏"这类关键工程坑,再概览深度学习与当前大模型应用的形态,给出一条务实的进阶路径。

两条工作流,先分清

机器学习的工具选择取决于数据形态:

  • 经典机器学习:表格数据(行是样本、列是特征),模型是决策树、线性模型、集成方法。scikit-learn 一统天下,CPU 就够, preprocessing 与评估 API 高度统一;
  • 深度学习:图像、文本、语音等非结构化数据,模型是多层神经网络。PyTorch(研究与新项目主流)或 TensorFlow(工业存量),需要 GPU 与大量数据。

分界的经验法则:几万行、几十列的业务数据(流失预测、信用评分、销量预估),先上经典模型——便宜、快、可解释;深度学习是给图像文本和大模型的,不是给一切问题的"高级默认"。

最小完整闭环:scikit-learn 五步

以鸢尾花分类为骨架,走完"分数据 → 训练 → 评估 → 检查 → 使用":

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report X, y = load_iris(return_X_y=True) X_tr, X_te, y_tr, y_te = train_test_split( X, y, test_size=0.3, random_state=42, stratify=y) # 1. 分层切分 clf = Pipeline([ # 2. 管道:预处理+模型打包 ("scale", StandardScaler()), ("model", LogisticRegression(max_iter=200)), ]) clf.fit(X_tr, y_tr) # 3. 训练 y_pred = clf.predict(X_te) # 4. 评估 print(classification_report(y_te, y_pred)) # precision recall f1-score support # setosa 1.00 1.00 1.00 15 # versicolor 0.94 1.00 0.97 15 # virginica 1.00 0.93 0.97 15 # accuracy 0.98 45 clf.predict([[5.1, 3.5, 1.4, 0.2]]) # 5. 使用:array(['setorna'...])

三个工程要点藏在样板里。Pipeline 把预处理与模型焊成一个对象:评估时对新数据整体 apply,杜绝"用测试集的统计量做归一化"这类数据泄漏——这是初学者最贵的一类错误,测试信息渗进训练过程,线下分数虚高、上线翻车。stratify 分层切分保证各类别比例在训练/测试集一致。classification_report 给出每类的精确率/召回率而不只看总正确率——类别不平衡时总正确率是最大的谎言(99% 样本为负类时,全猜"负"就有 99% 正确率)。

模型保存走序列化:joblib.dump(clf, "model.joblib") 把整个管道存盘,服务端加载即用(9.2 节的 FastAPI 端点里 clf.predict 一次调用就是一个 AI 接口——两条工作流在部署层会师)。

深度学习一瞥:范式转换在哪

深度学习的代码形态换了范式,但骨架仍可类比:

import torch, torch.nn as nn model = nn.Sequential( nn.Linear(4, 16), nn.ReLU(), nn.Linear(16, 3), # 输出三类得分 ) loss_fn = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(), lr=1e-3) for epoch in range(200): y_logit = model(torch.tensor(X_tr, dtype=torch.float32)) loss = loss_fn(y_logit, torch.tensor(y_tr)) optimizer.zero_grad() # 清梯度 loss.backward() # 反向传播:自动求导算出每个参数的梯度 optimizer.step() # 沿梯度更新参数

backward 一行是深度学习的引擎:自动微分把"损失对每个参数的梯度"整张算出来,而张量运算在 GPU 上大规模并行——机制上与 9.1 节"整段交给底层引擎"的向量化一脉相承,只是引擎从 C 循环换成了 CUDA。文本与图像的现代路线是预训练模型微调:用 Hugging Face 生态下载别人在海量数据上训好的模型,用自己的小数据微调最后几层——从零训练大模型是工业巨头的活,应用工程师的杠杆在"站在预训练模型上"。

当前应用形态与大模型

当下"学 Python + AI"最现实的落点不是训模型,而是调用与编排大模型 API:用 requests 或官方 SDK 发起对话请求、管理上下文与提示词、把模型输出接入业务流程(分类、抽取、生成、客服)。这条路线的技能栈恰好是本书前九章的组合——HTTP 客户端(9.3)、API 设计(9.2)、数据清洗(9.1)、异步并发(8.2,批量调用限速)、类型校验(7.3,结构化输出)。所谓 AI 应用工程师,本质是"把模型当一种 IO 特别慢、输出不完全可控的外部服务来编程"——并发、重试、校验这些基本功一个不少。

进阶路径建议务实排序:先把手头业务数据用 scikit-learn 跑通完整闭环(含评估与泄漏检查),这是判断力地基;再学一个深度框架做一次微调实战(分类或文本任务);最后按工作需要切入大模型应用编排。跳过第一步直接玩大模型,容易长成"只会调 API 不知所以然"——恰好是本书开篇要帮你避免的状态。

⚠️ 常见坑:数据泄漏(见 Pipeline 段);只看 accuracy 不看分类别指标;random_state 不固定导致实验不可复现;拿训练集分数当成绩炫耀;在业务表格数据上硬套深度学习,钱和数据都烧了效果还不如梯度提升树。

💡 关键直觉:机器学习工程的纪律全在"诚实评估"四个字——测试数据必须是模型从未见过、连预处理统计量都没碰过的数据。

本节要点回顾

  • 两条工作流:表格数据走经典 ML(scikit-learn),非结构化数据走深度学习(PyTorch);业务数据优先经典模型。
  • 五步闭环:分层切分 → Pipeline 打包 → 训练 → 分类别评估 → 序列化部署。
  • 数据泄漏:测试信息渗入训练是最贵的错误,Pipeline 是制度性防御。
  • 深度学习骨架:模型-损失-优化器-循环;backward 自动微分是引擎,向量化思想一脉相承。
  • 现代路线:预训练模型微调是工程师的杠杆;从零训大模型不是应用层的活。
  • 大模型应用:把模型当慢 IO 的外部服务编程——并发、重试、校验全是前九章基本功。

全书到此收束:从一行 x = 100 背后的名字绑定,到万级并发的 asyncio 与大模型编排——解释器视角的价值,就是让每个层的"魔法"都能拆回你早已理解的那几块基石。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U