机器学习知识框架:从数据处理到模型部署

引言

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

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


机器学习工程步骤

#mermaid-svg-SVNfyNmhbLaAJ3sl{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SVNfyNmhbLaAJ3sl .error-icon{fill:#552222;}#mermaid-svg-SVNfyNmhbLaAJ3sl .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SVNfyNmhbLaAJ3sl .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .marker.cross{stroke:#333333;}#mermaid-svg-SVNfyNmhbLaAJ3sl svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SVNfyNmhbLaAJ3sl p{margin:0;}#mermaid-svg-SVNfyNmhbLaAJ3sl .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .cluster-label text{fill:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .cluster-label span{color:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .cluster-label span p{background-color:transparent;}#mermaid-svg-SVNfyNmhbLaAJ3sl .label text,#mermaid-svg-SVNfyNmhbLaAJ3sl span{fill:#333;color:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .node rect,#mermaid-svg-SVNfyNmhbLaAJ3sl .node circle,#mermaid-svg-SVNfyNmhbLaAJ3sl .node ellipse,#mermaid-svg-SVNfyNmhbLaAJ3sl .node polygon,#mermaid-svg-SVNfyNmhbLaAJ3sl .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .rough-node .label text,#mermaid-svg-SVNfyNmhbLaAJ3sl .node .label text,#mermaid-svg-SVNfyNmhbLaAJ3sl .image-shape .label,#mermaid-svg-SVNfyNmhbLaAJ3sl .icon-shape .label{text-anchor:middle;}#mermaid-svg-SVNfyNmhbLaAJ3sl .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .rough-node .label,#mermaid-svg-SVNfyNmhbLaAJ3sl .node .label,#mermaid-svg-SVNfyNmhbLaAJ3sl .image-shape .label,#mermaid-svg-SVNfyNmhbLaAJ3sl .icon-shape .label{text-align:center;}#mermaid-svg-SVNfyNmhbLaAJ3sl .node.clickable{cursor:pointer;}#mermaid-svg-SVNfyNmhbLaAJ3sl .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .arrowheadPath{fill:#333333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SVNfyNmhbLaAJ3sl .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SVNfyNmhbLaAJ3sl .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SVNfyNmhbLaAJ3sl .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SVNfyNmhbLaAJ3sl .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .cluster text{fill:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl .cluster span{color:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SVNfyNmhbLaAJ3sl .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SVNfyNmhbLaAJ3sl rect.text{fill:none;stroke-width:0;}#mermaid-svg-SVNfyNmhbLaAJ3sl .icon-shape,#mermaid-svg-SVNfyNmhbLaAJ3sl .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SVNfyNmhbLaAJ3sl .icon-shape p,#mermaid-svg-SVNfyNmhbLaAJ3sl .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SVNfyNmhbLaAJ3sl .icon-shape .label rect,#mermaid-svg-SVNfyNmhbLaAJ3sl .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SVNfyNmhbLaAJ3sl .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SVNfyNmhbLaAJ3sl .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SVNfyNmhbLaAJ3sl :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据处理
模型选择
训练模型
模型预测
模型评估
保存模型

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


一、数据处理

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

数据类型

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

数据来源

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

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


二、模型选择

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

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


三、训练模型

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


四、模型评估

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

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

4.1 偏差与方差

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

#mermaid-svg-3vyDfHY8XjIuxKQe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-3vyDfHY8XjIuxKQe .error-icon{fill:#552222;}#mermaid-svg-3vyDfHY8XjIuxKQe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-3vyDfHY8XjIuxKQe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-3vyDfHY8XjIuxKQe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-3vyDfHY8XjIuxKQe .marker.cross{stroke:#333333;}#mermaid-svg-3vyDfHY8XjIuxKQe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-3vyDfHY8XjIuxKQe p{margin:0;}#mermaid-svg-3vyDfHY8XjIuxKQe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe .cluster-label text{fill:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe .cluster-label span{color:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe .cluster-label span p{background-color:transparent;}#mermaid-svg-3vyDfHY8XjIuxKQe .label text,#mermaid-svg-3vyDfHY8XjIuxKQe span{fill:#333;color:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe .node rect,#mermaid-svg-3vyDfHY8XjIuxKQe .node circle,#mermaid-svg-3vyDfHY8XjIuxKQe .node ellipse,#mermaid-svg-3vyDfHY8XjIuxKQe .node polygon,#mermaid-svg-3vyDfHY8XjIuxKQe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-3vyDfHY8XjIuxKQe .rough-node .label text,#mermaid-svg-3vyDfHY8XjIuxKQe .node .label text,#mermaid-svg-3vyDfHY8XjIuxKQe .image-shape .label,#mermaid-svg-3vyDfHY8XjIuxKQe .icon-shape .label{text-anchor:middle;}#mermaid-svg-3vyDfHY8XjIuxKQe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-3vyDfHY8XjIuxKQe .rough-node .label,#mermaid-svg-3vyDfHY8XjIuxKQe .node .label,#mermaid-svg-3vyDfHY8XjIuxKQe .image-shape .label,#mermaid-svg-3vyDfHY8XjIuxKQe .icon-shape .label{text-align:center;}#mermaid-svg-3vyDfHY8XjIuxKQe .node.clickable{cursor:pointer;}#mermaid-svg-3vyDfHY8XjIuxKQe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-3vyDfHY8XjIuxKQe .arrowheadPath{fill:#333333;}#mermaid-svg-3vyDfHY8XjIuxKQe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-3vyDfHY8XjIuxKQe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-3vyDfHY8XjIuxKQe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3vyDfHY8XjIuxKQe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-3vyDfHY8XjIuxKQe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3vyDfHY8XjIuxKQe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-3vyDfHY8XjIuxKQe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-3vyDfHY8XjIuxKQe .cluster text{fill:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe .cluster span{color:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-3vyDfHY8XjIuxKQe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-3vyDfHY8XjIuxKQe rect.text{fill:none;stroke-width:0;}#mermaid-svg-3vyDfHY8XjIuxKQe .icon-shape,#mermaid-svg-3vyDfHY8XjIuxKQe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-3vyDfHY8XjIuxKQe .icon-shape p,#mermaid-svg-3vyDfHY8XjIuxKQe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-3vyDfHY8XjIuxKQe .icon-shape .label rect,#mermaid-svg-3vyDfHY8XjIuxKQe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-3vyDfHY8XjIuxKQe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-3vyDfHY8XjIuxKQe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-3vyDfHY8XjIuxKQe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 高偏差
欠拟合
高方差
过拟合

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=1m∑i=1m∣yi−y^i∣ \text{MAE} = \frac{1}{m} \sum_{i=1}^{m} |y_i - \hat{y}_i| MAE=m1i=1∑m∣yi−y^i∣

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

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


MSE(均方误差)

MSE=1m∑i=1m(yi−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

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

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


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

MAPE=1n∑i=1n∣yi−y^iyi∣×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%

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


R2R^2R2(决定系数)

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

R2=1−SSESST R^2 = 1 - \frac{SSE}{SST} R2=1−SSTSSE

其中:

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

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


4.6 分类评估指标详解

二分类混淆矩阵

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

记忆口诀

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

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


核心指标

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

Recall=TPTP+FN \text{Recall} = \frac{TP}{TP + FN} Recall=TP+FNTP

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

Precision=TPTP+FP \text{Precision} = \frac{TP}{TP + FP} Precision=TP+FPTP

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

F1=2⋅Precision⋅RecallPrecision+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=FPTN+FP \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=1k∑i=1kmax⁡j≠i(Si+SjMij) \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)

  • SiS_iSi:簇 iii 内样本到聚类中心的平均距离
  • MijM_{ij}Mij:簇 iii 与簇 jjj 中心之间的距离

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

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

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


五、保存模型

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

常用方案:joblib

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

python 复制代码
import joblib

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

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

其他备选方案

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

总结

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

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

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

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

相关推荐
Anastasiozzzz1 小时前
Agent 生产落地的“硬约束”:深度解码 Harness Engineering 六层架构与闭环自愈设计
人工智能·架构
小饕1 小时前
RAG 进阶|响应生成(Generation)4 大痛点深度剖析:从问题定位到工程解法
人工智能·rag
得物技术1 小时前
得物推荐系统诊断 Agent:从 “调接口” 到 “会思考”|AICon 演讲整理
人工智能·算法·架构
hay_lee1 小时前
Agent 时代的“TCP/IP“:多智能体协议如何重塑企业 AI 基础设施
人工智能
feelmylife591 小时前
企业级 LLM Mass Gateway — 多租户高并发网关,真正难点是 streaming 下的配额计数
人工智能·后端
太子釢2 小时前
从零搭建一个最小的 Agent Loop
人工智能
Black蜡笔小新2 小时前
企业AI算力工作站/AI大模型训练工作站DLTM企业私有化AI视觉中台建设方案设计
人工智能
花生智源2 小时前
Java实现Prompt工程的技巧——从模板到工程化,告别字符串拼接
java·人工智能
墨虹雨茶2 小时前
Loop Engineering 正在重新定义"程序员"这个职业
人工智能