引言

机器学习的知识体系可以用一个""型结构来概括:横线代表机器学习工程步骤,两条竖线分别对应数据处理模型选择两大核心模块。

本文将围绕工程步骤展开,梳理从原始数据到最终模型落地的完整流程,并对模型评估中的关键指标进行详解。


机器学习工程步骤

数据处理

模型选择

训练模型

模型预测

模型评估

保存模型

:模型预测环节内容相对独立,主要是决定是否输出预测方差,本文暂不展开。


一、数据处理

数据是机器学习的基石,其质量直接决定模型的上限。

数据类型

  • 业务数据:公司内部系统产生的结构化数据(如交易记录、用户信息)
  • 日志数据:系统运行、用户行为等半结构化/非结构化日志
  • 第三方数据:外部采购或合作获取的补充数据

数据来源

来源方式 说明
成品数据集 已标注好的公开数据集(如UCI、Kaggle)
半成品/未标注数据 需要人工或自动标注的原始数据
协调获取 跨部门、跨组织协调共享的数据
第三方开源 开源社区提供的数据资源
爬虫 从网页抓取的公开数据
数据市场 商业化数据交易平台
大模型生成(蒸馏) 利用大模型生成标注数据,即"蒸馏"技术

📌 关于数据处理的详细方法(清洗、特征工程、数据增强等),内容较为庞杂,将在下一篇博客《数据处理》中专门展开。


二、模型选择

模型选择是机器学习中的核心决策环节,需要根据任务类型(分类、回归、聚类)、数据规模、可解释性要求等因素综合考量。

📌 各类模型的原理、适用场景及选型策略,因内容较多,将在后续专题文章中详细讲解。


三、训练模型

训练阶段是将选定的模型在准备好的数据上进行学习的过程,涉及损失函数优化、参数更新等核心机制。此环节高度依赖具体的模型和框架实现,本文不展开讨论。


四、模型评估

模型评估是验证模型效果的关键步骤。评估体系围绕三个核心主题展开:

  1. 偏差与方差
  2. 欠拟合与过拟合
  3. 学习曲线与验证曲线

4.1 偏差与方差

  • 偏差(Bias):模型预测值的期望与真实标签之间的差距。高偏差 → 欠拟合
  • 方差(Variance):模型在不同训练集上预测结果的波动程度。高方差 → 过拟合

高偏差

欠拟合

高方差

过拟合

4.2 欠拟合与过拟合

现象 训练集表现 验证集表现 说明
欠拟合 ❌ 差 ❌ 差 模型未能捕捉数据规律
过拟合 ✅ 好 ❌ 差 模型过度记忆训练数据,泛化能力弱

过拟合的常见处理策略

  1. 早停(Early Stopping):验证集Loss不再下降时提前终止训练
  2. Dropout(神经网络专用):随机丢弃部分神经元,防止协同适应
  3. Walk-Forward交叉验证:时间序列场景下的时序交叉验证
  4. 减少模型复杂度:降低层数、神经元数或特征维度
  5. 数据增强:扩充训练样本的多样性

4.3 学习曲线与验证曲线

学习曲线

  • 横轴:训练样本数量
  • 纵轴:模型误差或得分
  • 包含两条曲线:训练集得分 + 验证集得分
  • 用途:判断模型是欠拟合还是过拟合,辅助决策是否需要增加数据

验证曲线

  • 横轴:某个超参数的取值
  • 纵轴:模型误差或得分
  • 包含两条曲线:训练集得分 + 验证集得分
  • 用途:寻找最佳超参数值,平衡偏差与方差

4.4 常见评估指标速览

以下为机器学习中常用的评估指标清单,按任务类型分类:

回归类:r2, explained_variance, neg_mean_absolute_error, 
        neg_mean_squared_error, neg_root_mean_squared_error,
        neg_mean_absolute_percentage_error, neg_median_absolute_error,
        neg_mean_poisson_deviance, neg_mean_gamma_deviance,
        neg_mean_squared_log_error, neg_root_mean_squared_log_error,
        d2_absolute_error_score, d2_brier_score, d2_log_loss_score

分类/二分类类:accuracy, precision, recall, f1, f1_micro, f1_macro, f1_weighted,
               precision_micro, precision_macro, precision_weighted,
               recall_micro, recall_macro, recall_weighted,
               roc_auc, roc_auc_ovr, roc_auc_ovo,
               roc_auc_ovr_weighted, roc_auc_ovo_weighted,
               average_precision, matthews_corrcoef,
               balanced_accuracy, top_k_accuracy,
               positive_likelihood_ratio, negative_likelihood_ratio,
               neg_brier_score, neg_log_loss

聚类/非监督类:adjusted_rand_score, adjusted_mutual_info_score,
               normalized_mutual_info_score, mutual_info_score,
               rand_score, completeness_score, homogeneity_score,
               v_measure_score, fowlkes_mallows_score

多标签类:jaccard, jaccard_micro, jaccard_macro, jaccard_weighted, jaccard_samples,
          precision_samples, recall_samples, f1_samples

4.5 回归评估指标详解

MAE(平均绝对误差)

MAE = 1 m ∑ i = 1 m ∣ y i − y ^ i ∣ \text{MAE} = \frac{1}{m} \sum_{i=1}^{m} |y_i - \hat{y}_i| MAE=m1i=1myiy^i

💡 去掉系数 1 m \frac{1}{m} m1 即为 L1 范数

特点:对异常值不敏感,反映预测值与真实值的平均绝对偏差。


MSE(均方误差)

MSE = 1 m ∑ i = 1 m ( y i − y ^ i ) 2 \text{MSE} = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2 MSE=m1i=1m(yiy^i)2

💡 去掉系数 1 m \frac{1}{m} m1 后开根号即为 L2 范数(即 RMSE)。

特点:对异常值敏感(误差被平方放大),常用于优化目标函数。


MAPE(平均绝对百分比误差)

MAPE = 1 n ∑ i = 1 n ∣ y i − y ^ i y i ∣ × 100 % \text{MAPE} = \frac{1}{n} \sum_{i=1}^{n} \left| \frac{y_i - \hat{y}_i}{y_i} \right| \times 100\% MAPE=n1i=1n yiyiy^i ×100%

特点:以百分比形式反映误差,直观易懂。但分母 y i y_i yi 接近 0 时会不稳定。


R 2 R^2 R2(决定系数)

衡量模型能够解释真实数据中多大比例的波动。

R 2 = 1 − S S E S S T R^2 = 1 - \frac{SSE}{SST} R2=1SSTSSE

其中:

  • S S E = ∑ i = 1 n ( y i − y ^ i ) 2 \displaystyle SSE = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 SSE=i=1n(yiy^i)2:残差平方和
  • S S T = ∑ i = 1 n ( y i − y ˉ ) 2 \displaystyle SST = \sum_{i=1}^{n} (y_i - \bar{y})^2 SST=i=1n(yiyˉ)2:总平方和(Total Sum of Squares)
  • y ˉ \bar{y} yˉ 为真实标签的均值

R 2 R^2 R2 取值范围为 ( − ∞ , 1 ] (-\infty, 1] (,1],越接近 1 表示模型拟合效果越好。


4.6 分类评估指标详解

二分类混淆矩阵

真实\预测 预测为正(Positive) 预测为负(Negative)
真实为正 TP(真阳)✅ FN(假阴)❌
真实为负 FP(假阳)❌ TN(真阴)✅

记忆口诀

  • 真/假 = 预测是否正确(True/False)
  • 阳/阴 = 预测的类别(Positive/Negative)

真阳(TP)和真阴(TN)是预测正确的两种情况。


核心指标

召回率(Recall)— 真实为正的样本中被正确识别的比例:

Recall = T P T P + F N \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP

精确率(Precision)— 预测为正的样本中实际为正的比例:

Precision = T P T P + F P \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP

F1 值 — 精确率与召回率的调和平均数,综合衡量模型性能:

F 1 = 2 ⋅ Precision ⋅ Recall Precision + Recall F1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} F1=2Precision+RecallPrecisionRecall


多分类评估

📌 多分类场景下的宏平均(macro)、微平均(micro)、加权平均(weighted)等策略,将在后续专门文章中详解。


ROC 与 AUC

ROC 曲线(Receiver Operating Characteristic):

  • X 轴:FPR(假正率),值越小越好
  • Y 轴:TPR(真正率),值越大越好

FPR = F P T N + F P \text{FPR} = \frac{FP}{TN + FP} FPR=TN+FPFP

💡 TPR(真正率)与召回率(Recall)在数值上是等价的,两者定义一致。

曲线越靠近左上角,模型性能越好

AUC(Area Under the Curve)为 ROC 曲线下方的面积:

  • AUC = 0.5:模型相当于随机猜测
  • AUC 越接近 1:模型区分正负类的能力越强

4.7 聚类评估指标详解

轮廓指数(Silhouette Coefficient)

单个样本的轮廓值:

s ( i ) = b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } s(i) = \frac{b(i) - a(i)}{\max\{a(i), b(i)\}} s(i)=max{a(i),b(i)}b(i)a(i)

  • a ( i ) a(i) a(i):样本到同簇其他样本的平均距离(簇内紧凑度)
  • b ( i ) b(i) b(i):样本到最近其他簇的平均距离(簇间分离度)

取值范围 [ − 1 , 1 ] [-1, 1] [1,1],值越大表示聚类效果越好。

⚠️ 缺点:计算量大,需遍历每个样本计算距离。


DB 指数(Davies-Bouldin Index)

DB = 1 k ∑ i = 1 k max ⁡ j ≠ i ( S i + S j M i j ) \text{DB} = \frac{1}{k} \sum_{i=1}^{k} \max_{j \neq i} \left( \frac{S_i + S_j}{M_{ij}} \right) DB=k1i=1kj=imax(MijSi+Sj)

  • S i S_i Si:簇 i i i 内样本到聚类中心的平均距离
  • M i j M_{ij} Mij:簇 i i i 与簇 j j j 中心之间的距离

DB 指数越小,聚类效果越好(簇内紧密、簇间分离)。


CH 指数(Calinski-Harabasz Index)

CH = ( n − k ) ⋅ SST ( k − 1 ) ⋅ SSE \text{CH} = \frac{(n - k) \cdot \text{SST}}{(k - 1) \cdot \text{SSE}} CH=(k1)SSE(nk)SST

  • n n n:样本总数
  • k k k:簇个数
  • SST \text{SST} SST:总平方和(簇间离散度)
  • SSE \text{SSE} SSE:簇内残差平方和

CH 指数越大,聚类效果越好


五、保存模型

训练完成后的模型需要持久化保存,以便后续部署和推理。

常用方案:joblib

joblib 是 Python 生态中保存 scikit-learn 模型最常用的工具,对大数组/numpy 对象有优化:

import joblib

# 保存模型
joblib.dump(model, 'model.pkl')

# 加载模型
model = joblib.load('model.pkl')

其他备选方案

方案 适用场景
pickle Python 通用序列化,兼容性好
onnx 跨框架/跨平台部署
mlflow 实验跟踪 + 模型版本管理
tensorflow/keras 深度学习模型原生保存格式(.h5/.keras)

总结

本文梳理了机器学习项目的完整工程流程,并重点聚焦于模型评估环节的核心概念与指标公式。理解和掌握这些指标,能够帮助我们更科学地判断模型优劣,定位问题所在,从而做出针对性的优化。

更多内容敬请期待后续文章:

  • 📝 数据处理详解(清洗、特征工程、数据增强)
  • 📝 模型选择策略与选型指南
  • 📝 多分类与多标签评估深入剖析

如果觉得本文对你有帮助,欢迎点赞、收藏、评论交流!

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐