机器学习知识框架:从数据处理到模型部署
引言
机器学习的知识体系可以用一个"艹"型结构来概括:横线代表机器学习工程步骤,两条竖线分别对应数据处理和模型选择两大核心模块。
本文将围绕工程步骤展开,梳理从原始数据到最终模型落地的完整流程,并对模型评估中的关键指标进行详解。
机器学习工程步骤
注:模型预测环节内容相对独立,主要是决定是否输出预测方差,本文暂不展开。
一、数据处理
数据是机器学习的基石,其质量直接决定模型的上限。
数据类型
- 业务数据:公司内部系统产生的结构化数据(如交易记录、用户信息)
- 日志数据:系统运行、用户行为等半结构化/非结构化日志
- 第三方数据:外部采购或合作获取的补充数据
数据来源
| 来源方式 | 说明 |
|---|---|
| 成品数据集 | 已标注好的公开数据集(如UCI、Kaggle) |
| 半成品/未标注数据 | 需要人工或自动标注的原始数据 |
| 协调获取 | 跨部门、跨组织协调共享的数据 |
| 第三方开源 | 开源社区提供的数据资源 |
| 爬虫 | 从网页抓取的公开数据 |
| 数据市场 | 商业化数据交易平台 |
| 大模型生成(蒸馏) | 利用大模型生成标注数据,即"蒸馏"技术 |
📌 关于数据处理的详细方法(清洗、特征工程、数据增强等),内容较为庞杂,将在下一篇博客《数据处理》中专门展开。
二、模型选择
模型选择是机器学习中的核心决策环节,需要根据任务类型(分类、回归、聚类)、数据规模、可解释性要求等因素综合考量。
📌 各类模型的原理、适用场景及选型策略,因内容较多,将在后续专题文章中详细讲解。
三、训练模型
训练阶段是将选定的模型在准备好的数据上进行学习的过程,涉及损失函数优化、参数更新等核心机制。此环节高度依赖具体的模型和框架实现,本文不展开讨论。
四、模型评估
模型评估是验证模型效果的关键步骤。评估体系围绕三个核心主题展开:
- 偏差与方差
- 欠拟合与过拟合
- 学习曲线与验证曲线
4.1 偏差与方差
- 偏差(Bias):模型预测值的期望与真实标签之间的差距。高偏差 → 欠拟合。
- 方差(Variance):模型在不同训练集上预测结果的波动程度。高方差 → 过拟合。
4.2 欠拟合与过拟合
| 现象 | 训练集表现 | 验证集表现 | 说明 |
|---|---|---|---|
| 欠拟合 | ❌ 差 | ❌ 差 | 模型未能捕捉数据规律 |
| 过拟合 | ✅ 好 | ❌ 差 | 模型过度记忆训练数据,泛化能力弱 |
过拟合的常见处理策略
- 早停(Early Stopping):验证集Loss不再下降时提前终止训练
- Dropout(神经网络专用):随机丢弃部分神经元,防止协同适应
- Walk-Forward交叉验证:时间序列场景下的时序交叉验证
- 减少模型复杂度:降低层数、神经元数或特征维度
- 数据增强:扩充训练样本的多样性
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=1∑m∣yi−y^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=1∑m(yi−y^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=1∑n yiyi−y^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=1−SSTSSE
其中:
- 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=1∑n(yi−y^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=1∑n(yi−yˉ)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=2⋅Precision+RecallPrecision⋅Recall
多分类评估
📌 多分类场景下的宏平均(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=1∑kj=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=(k−1)⋅SSE(n−k)⋅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) |
总结
本文梳理了机器学习项目的完整工程流程,并重点聚焦于模型评估环节的核心概念与指标公式。理解和掌握这些指标,能够帮助我们更科学地判断模型优劣,定位问题所在,从而做出针对性的优化。
更多内容敬请期待后续文章:
- 📝 数据处理详解(清洗、特征工程、数据增强)
- 📝 模型选择策略与选型指南
- 📝 多分类与多标签评估深入剖析
如果觉得本文对你有帮助,欢迎点赞、收藏、评论交流!
更多推荐



所有评论(0)