机器学习项目的完整流程:从原始数据到模型预测

一个机器学习项目不是从训练模型开始,而是从定义问题、整理数据、训练评估到上线预测的一整条链路。

学习路线:传统机器学习基础(21~34) · 第 21 课
第 21 课机器学习项目流程图,从原始数据、清洗、特征、训练、评估一路连接到预测结果。
Learning Path

传统机器学习基础(21~34)

补齐文本分类项目背后的数据处理、算法、评估和模型选择知识。

学完本阶段你能做到:拿到一份结构化表格数据,独立完成清洗、特征工程、建模、评估、模型选择和保存,并用规范流程比较多个算法。

推荐读法:建议系统读。做项目时遇到数据和模型选择问题,也可以按需回查。

查看完整阶段 · 14 篇
Lesson Guide

这一课怎么学

先看目标,再带着问题读正文。读完后用练习确认自己真的理解了。

本节你会学到

  • 说清楚「机器学习项目的完整流程:从原始数据到模型预测」解决的核心问题
  • 知道它在「传统机器学习基础(21~34)」中的位置
  • 把 机器学习、分类与回归、监督学习 这些关键词联系起来

前置知识

  • 不需要编程基础,先有基本的问题意识即可。
  • 知道 AI 不是单一工具,而是一组方法和应用。

概念回顾

  • 【机器学习】机器学习的重点不是手写所有规则,而是准备数据、定义目标,让模型自己找到可复用的模式。 前面或后面会反复用到它。
  • 【分类与回归】判断邮件是不是垃圾邮件是分类,预测房价是多少是回归。 前面或后面会反复用到它。
  • 【监督学习】如果训练数据里有“题目”和“答案”,模型学会以后再给它新题目,它就尝试给出答案。 前面或后面会反复用到它。
  • 【人工智能】先把 AI 理解成一类能力:机器不是只照规则执行,而是能从数据、规则或反馈中完成更复杂的判断。 前面或后面会反复用到它。

核心概念

常见误区

  • 不要只记定义,要追问它解决了什么问题。
  • 不要只看模型分数,要把数据、特征、接口和复盘一起看。

课后练习

  • 用 3 句话向一个零基础朋友解释「机器学习项目的完整流程:从原始数据到模型预测」。
  • 打开概念库里的「机器学习」,补一遍它和本文的关系。
  • 读下一课「数据清洗第一课:缺失值、重复值和异常值怎么处理」前,先写下你认为它会解决的问题。

自检练习与参考答案

1. 这个环节的输入和输出分别是什么?

项目文要先说清数据流。输入通常是原始数据或上一步结果,输出必须能被下一步稳定复用。

2. 如果训练和预测效果对不上,优先排查哪件事?

优先排查预处理是否一致,例如分词、TF-IDF 词表、标签映射、标准化器是否沿用训练阶段的同一套对象。

3. 为什么项目文章不能只看最终分数?

因为真实项目还要看数据质量、错误样本、部署入口、复用方式和失败边界。

下一步建议读「数据清洗第一课:缺失值、重复值和异常值怎么处理」。

学完 AI、机器学习、训练集、指标和过拟合之后,下一步要把这些概念放进一个完整项目里。

很多初学者一上来就问:模型用什么?参数怎么调?准确率为什么不高?

但真正做机器学习项目时,模型只是中间的一环。一个项目能不能跑通,往往取决于你有没有把问题、数据、特征、评估和预测流程连起来。

第 21 课视频 · 机器学习项目完整流程(约 1 分 40 秒)

先用一句话理解完整流程

机器学习项目的核心流程是:

定义问题 -> 收集数据 -> 清洗数据 -> 构造特征 -> 训练模型 -> 评估模型 -> 保存模型 -> 预测新样本

如果只看训练模型,就像只看做饭时“开火”的那一步。

开火当然重要,但食材有没有洗干净、调料有没有准备好、火候怎么判断、最后怎么装盘,这些都会影响结果。

第一步:定义问题

项目开始前,先要把问题说清楚。

比如:

  • 我要预测房价,这是回归任务;
  • 我要判断短信是不是垃圾短信,这是分类任务;
  • 我要把用户分成几类,这是聚类任务;
  • 我要找出异常交易,这是异常检测任务。

问题类型决定后面的很多选择:标签怎么准备、模型怎么选、指标怎么看、结果怎么解释。

如果任务定义不清楚,后面代码写得再顺,也可能是在解决一个错误的问题。

第二步:收集和理解数据

拿到数据以后,不要急着训练。

先看几个基本问题:

  • 每一行代表什么?
  • 每一列是什么含义?
  • 标签列在哪里?
  • 有没有缺失值?
  • 有没有重复样本?
  • 类别比例是否严重不均衡?
  • 数值范围是否差异很大?

一个最基础的检查可以这样写:

import pandas as pd

df = pd.read_csv("data.csv")

print(df.head())
print(df.shape)
print(df.info())
print(df.describe())
print(df.isna().sum())

这些代码不是形式主义。它们是在帮你确认:数据是不是你以为的那个样子。

第三步:清洗数据

真实数据通常不会很干净。

常见问题包括:

  • 缺失值;
  • 重复记录;
  • 异常值;
  • 错误格式;
  • 文本里混着空格、符号和乱码;
  • 标签写法不统一。

清洗数据的目标不是把数据变得“好看”,而是让它能稳定地进入模型。

例如缺失值可以删除,也可以填充;重复样本可以去掉;异常值要结合业务判断,不能一看到离群点就机械删除。

第四步:构造特征

模型不能直接理解业务语言,它只能处理数字特征。

所以我们要把原始数据变成模型能学习的形式。

表格数据里,可能需要:

  • 把类别特征编码成数字;
  • 对数值特征做标准化或归一化;
  • 从日期里提取月份、星期、小时;
  • 删除明显无用或泄漏答案的列。

文本分类里,可能需要:

  • 清洗文本;
  • 中文分词;
  • 去停用词;
  • 用词袋或 TF-IDF 转成向量。

这一步叫特征工程。

很多传统机器学习项目的效果差距,不在模型,而在特征。

第五步:划分数据集

训练前要把数据拆成训练集、验证集和测试集。

常见方式:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X,
    y,
    test_size=0.2,
    random_state=42,
    stratify=y,
)

训练集用来让模型学习,测试集用来最后评估。

如果是分类任务,stratify=y 可以尽量保持训练集和测试集的类别比例一致。

这能减少一个常见问题:训练集里某类很多,测试集里某类很少,最后评估结果不稳定。

第六步:训练模型

当数据准备好以后,训练模型反而会变得很清楚。

以随机森林为例:

from sklearn.ensemble import RandomForestClassifier

model = RandomForestClassifier(
    n_estimators=100,
    random_state=42,
)

model.fit(X_train, y_train)

这里 fit 的意思就是:让模型从训练数据里学习规律。

不同模型的内部原理不同,但从项目流程看,大多数模型都遵循类似接口:

fit:学习
predict:预测
score / metrics:评估

第七步:评估模型

模型训练完,不代表项目完成。

我们要回答:模型到底好不好?

分类任务常看:

  • Accuracy;
  • Precision;
  • Recall;
  • F1;
  • 混淆矩阵。

回归任务常看:

  • MAE;
  • MSE;
  • RMSE;
  • R²。

分类评估示例:

from sklearn.metrics import classification_report

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

不要只看准确率。

如果垃圾短信只占 5%,模型把所有短信都预测成“正常”,准确率也能有 95%,但这个模型没有真正解决问题。

第八步:保存模型并预测新样本

项目最后要能复用。

如果每次预测都重新训练一次模型,流程就不完整。

常见做法是把模型和必要的预处理工具一起保存:

import joblib

joblib.dump(model, "model.pkl")

loaded_model = joblib.load("model.pkl")
result = loaded_model.predict(new_X)

如果用了 TF-IDF、标准化器、编码器,也要一起保存。

否则上线预测时,新数据的处理方式和训练时不一致,结果会非常不可靠。

小结

机器学习项目不是一句 model.fit()

它是一条完整链路:

问题 -> 数据 -> 清洗 -> 特征 -> 训练 -> 评估 -> 保存 -> 预测

这条主线建立起来以后,后面学习数据清洗、特征工程、线性回归、逻辑回归、KNN、决策树和随机森林,都会更有位置感。

下一课,我们先进入最容易被低估的一步:数据清洗

Discussion

留言讨论