模型与多模态实用指南2026年11月10日Flatkey Team

使用 Python 进行机器学习:第一个模型以及何时使用 GPU

基于 CPU 和 scikit-learn 的实用教程,涵盖误差评估,以及根据实际工作需求做出基础设施决策;入门无需 GPU。

使用 Python 进行机器学习:第一个模型以及何时使用 GPU

要开始使用 Python 进行机器学习,请选择一项小型任务,将数据划分为训练集和测试集,并将简单模型与基础基准进行比较。第一次练习无需租用 GPU。本指南将使用 CPU 构建一个完整的分类器,解读其错误,并确定何时需要调整基础设施。

目标是完成一个您能够复现和解释的实验。单独预测正确一次的价值,不如了解模型看过哪些数据、如何被评估以及在哪些地方会失败。

使用 Python 进行机器学习时首先应学习什么

一个监督学习项目包含输入(称为特征)和已知答案(称为目标)。在本文的示例中,特征是花朵的测量值,目标是物种。模型使用训练集学习一种关系,然后尝试对被留作测试的示例进行分类。

在选择库之前,请先写下您想回答的问题:

任务 响应类型 可行的第一个实验
对一条观测进行分类 一个类别 逻辑回归或决策树
估计一个数量 一个数值 线性回归和误差分析
查找无标签的组 聚类 一种聚类方法和对各组的检查
大规模处理图像或语言 更复杂的表示和预测 在定义评估方式后,使用合适的深度学习库

不要仅仅因为神经网络看起来更先进就选择它。如果简单的解决方案能在所需成本和期限内完成任务,它就是后续任何替代方案的重要基准。

准备隔离的环境

您需要安装与 scikit-learn 兼容的 Python,并且能够访问终端。请创建一个工作文件夹和虚拟环境,以避免与其他项目发生冲突:

python -m venv .venv

在 macOS 或 Linux 上,使用 source .venv/bin/activate 激活。在 Windows PowerShell 中,请根据本地终端策略使用 .venv\Scripts\Activate.ps1。然后安装该库并记录版本:

python -m pip install scikit-learn
python -m pip freeze > requirements.txt

如果您计算机上的可执行文件名是 python3,请使用它代替 python。依赖文件有助于重建环境;还应保存 Python 版本、代码和实验配置。

第一个完整模型:花卉分类

scikit-learn 的 Iris 数据集包含 150 条观测、四个数值特征和三个类别。它体量小,适合学习工作流程,但不能证明一个系统已准备好处理真实数据。

将以下代码保存为 exemplo_iris.py,然后运行 python exemplo_iris.py。它使用 120 条观测进行训练,30 条进行测试。分层划分会保持各类别的比例;固定随机种子使您能够复现相同的划分。

import platform
from time import perf_counter
import sklearn
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.20, random_state=42, stratify=y
)
models = {
    "baseline": DummyClassifier(strategy="most_frequent"),
    "logistica": make_pipeline(
        StandardScaler(), LogisticRegression(max_iter=1000)
    ),
}
for name, model in models.items():
    start = perf_counter()
    model.fit(X_train, y_train)
    train_seconds = perf_counter() - start
    pred = model.predict(X_test)
    print(name, "acuracia=", round(accuracy_score(y_test, pred), 3),
          "f1_macro=", round(f1_score(
              y_test, pred, average="macro", zero_division=0
          ), 3))
    print("matriz de confusao:", confusion_matrix(y_test, pred).tolist())
    print("tempo de treino (s):", round(train_seconds, 6))
print("Python:", platform.python_version(),
      "scikit-learn:", sklearn.__version__)

DummyClassifier 提供了一个不学习特征与类别之间关系的比较基准。使用此处的策略时,它会预测训练集中最常见的类别。如果更复杂的模型无法改进这样的基准,请先检查数据、目标和评估方式,再投入更多资源。有关策略,请参阅 DummyClassifier 文档。

逻辑回归通过一个 Pipeline 接收数据:先进行标准化,然后使用分类器。转换在训练集上拟合,并重新应用于测试集。这样可以避免使用本应保留用于评估的信息来计算尺度,这是一种常见的数据泄漏形式。scikit-learn 最佳实践文档解释了这一注意事项。

如何正确解读输出结果

在本示例的 CPU 运行中,使用 Python 3.14.4 和 scikit-learn 1.9.1,我们得到了以下结果。这些是该练习和该数据划分下的结果,并不代表对其他数据集的承诺。

模型 测试准确率 宏平均 F1
最常见类别基线 0,333 0,167
标准化 + 逻辑回归 0,933 0,933

第二个模型的矩阵为 [[10, 0, 0], [0, 9, 1], [0, 1, 9]]:测试集中的 30 朵花中,有两朵在最后两个类别之间被混淆。这比仅仅说模型的正确率约为 93% 更具信息量。

准确率表示评估数据集中预测正确的比例。宏平均 F1会计算每个类别的 F1,并取平均值,而不会给出现频率更高的类别更大的权重。混淆矩阵显示哪些类别被相互混淆。请结合这三种解读来理解模型行为,而不是只寻找最大的数字。

输出的时间仅是该次运行在您的计算机上的训练时间。对于如此小的数据集,它会随机器和测量噪声而变化。不要用这个数字来承诺云成本节省,或比较 CPU 和 GPU。

Iris 的结果也不应成为您产品准确率的预期。在自有数据上,分布、标签质量以及错误成本可能完全不同。一次罕见的失败可能比数十次容易的正确预测更重要。

在更换算法之前,请回答:

  1. 模型是否在完全相同的测试集上超过了基础基线?
  2. 哪一类集中了错误,这些错误对任务有什么影响?
  3. 输入中是否包含只有在预测之后才能获得的信息?
  4. 测试集是否代表新样本,还是包含与训练集重复或相关的观测值?
  5. 性能是否能在其他有效的数据划分中保持一致?

从练习到真实数据集

随机划分对 Iris 很方便。但如果您要预测未来事件、每个客户有多行数据,或遇到同一观测值的副本,它可能并不合适。在这些情况下,请根据模型的实际使用方式,考虑按时间或按组划分。参数 random_state 无法修正概念上错误的数据划分。train_test_split 参考文档描述了这种简单划分可用的控制选项。

保留验证集用于选择配置,并保持一个独立的最终测试集。如果您反复查看测试集来决定下一次调整,它就会开始影响您的选择。对于小型项目,一份实验电子表格已经很有帮助:

记录项 记录内容
数据 来源、日期、大小、列和排除规则
划分 按时间、按组或随机;适用时记录随机种子
模型 算法、参数和依赖项版本
评估 主要指标、各类别错误情况以及与基线的比较
运行 时间、内存、工件大小和实测成本
决策 有哪些改进,以及什么问题仍未解决

当您用自己的表格替换 Iris 时,请在训练前验证数据类型、缺失字段和类别。请将转换与模型放在一起,以便预测时使用相同的数据准备过程。即使代码仍能执行,单位发生变化的列也可能导致问题。

GPU 何时有帮助,以及何时没有帮助

本指南的示例在 CPU 上运行。向机器添加显卡并不会自动让所有 scikit-learn 代码使用它。该项目记录了对有限一组估计器和配置的 GPU 支持,包括通过特定输入和选项提供的支持。请确认所选算法的确切执行路径。

当存在兼容的实现,并且工作负载能够利用 GPU 时,GPU 值得进行实验,例如某些神经网络训练或批处理。即便如此,性能收益也需要抵消数据传输、环境准备和基础设施成本。

观察到的情况 建议的下一步操作
数据较少且在 CPU 上训练很快 优先关注数据质量和评估
读取或准备工作占用了大部分时间 测量存储、加载和转换环节
算法没有兼容 GPU 的执行路径 重新评估该库,或继续使用 CPU
兼容 GPU 的训练占据了周期的大部分时间 在候选配置上执行受控测试
模型较大或推理量较高 使用实际负载测量内存、延迟和并发能力

比较获得有用结果所需的总时间,而不只是单个操作的执行时间。应包括安装、传输、训练、验证、存储和空闲时间。每个周期更快的替代方案,如果需要更多尝试才能达到所需质量,反而可能更差。

当项目进入这一阶段时,Flatkey Cloud GPU 可用于评估租用 NVIDIA GPU 的选项。请确认目标负载所需的配置、区域、可用性和条件。准备好数据集规模、所用库、所需内存和测试目标;完成本教程并不需要租用 GPU。

在将模型投入使用之前

定义可接受的输入格式、无效字段的处理方式,以及发布后如何跟踪错误。将模型版本与数据准备过程一同保存。在考虑扩展规模之前,先在 notebook 之外使用具有代表性的数据测试一次预测。

如果下一步是在自有基础设施上部署语言模型,vLLM 部署指南讨论的是另一种类型的负载。不要将小型表格分类器与 LLM 的运行混为一谈:它们对内存、评估和服务器的要求不同。

常见问题

学习使用 Python 进行机器学习需要 GPU 吗?

不需要。所展示的示例可以在 CPU 上运行。只有在存在已测得的瓶颈,并且实现能够利用更大规模基础设施时,才选择它。

为什么要在使用更复杂的模型之前先使用基础基准?

它能展示通过简单规则可以获得什么结果。这样可以评估模型是否学到了有用的内容,以及额外的复杂性是否合理。

相同的随机种子能保证在任何环境中得到相同结果吗?

它会固定由该参数控制的随机选择。还应记录版本和环境;实现和执行方式的差异可能会影响结果。不要将一次划分的可重复性误认为是性能的通用保证。

Iris 之后的下一个项目是什么?

选择一项小型任务:使用你理解的数据、可验证的目标和成功标准。重复这一流程:基准、正确划分、模型、错误分析和测量。这个习惯是让你在不提前增加成本的情况下,逐步提升使用 Python 进行机器学习能力的基础。