本文档涵盖了用于评估机器学习模型的**方法和指标**,以及在训练过程中使用的各种**损失函数**。它解释了如何衡量模型性能,为不同任务选择合适的评估指标,并理解常用损失函数的数学基础。有关使用这些损失函数进行优化的技术,请参阅 训练方法与优化。
模型评估是评估机器学习模型在给定数据上表现如何的过程。不同的指标服务于不同的目的,并适用于不同的任务。
混淆矩阵是评估分类模型性能的基本工具,尤其对于二分类问题。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md140-147
基于混淆矩阵,可以推导出多种评估指标
| 指标 | 公式 | 描述 |
|---|---|---|
| 准确率 | (TP+TN)/(P+N) | 正确分类样本的比例 |
| 错误率 | (FP+FN)/(P+N) | 错误分类样本的比例 |
| 灵敏度(召回率) | TP/P | 实际为正例中,被正确预测为正例的比例。 |
| 特异性 | TN/N | 实际为负例且被正确识别的比例 |
| 精确率 | TP/(TP+FP) | 实际为正例且被预测为正例的比例 |
| F1 分数 | 2×(精确率×召回率)/(精确率+召回率) | 精确率和召回率的调和平均值。 |
对于多类别分类问题,常使用宏平均 F1 和微平均 F1
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md151-179
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md183-192
准确率指标本身通常是不够的,尤其是在处理不平衡数据集时。考虑地震预测的例子,其中绝大多数样本都是负例(无地震)。
例如,在地震预测中,未能检测到实际发生的地震(假阴性)的代价远高于误报(假正例)。在这种情况下,召回率比准确率更关键。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md193-202
损失函数是在模型训练过程中量化预测值与实际值之间差异的数学函数。它们提供了一种通过最小化误差来优化模型参数的方法。
损失函数作为目标函数,学习算法在训练过程中试图最小化它。它将每个训练样本的误差转换为一个标量值,表示模型的性能有多好。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md376-378 English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md71-72
最简单的损失函数,对于错误预测,损失值为 1;对于正确预测,损失值为 0。
L(Y, f(x)) = {
1, if Y ≠ f(x)
0, if Y = f(x)
}
一个松弛版本允许设置一个容忍阈值
L(Y, f(x)) = {
1, if |Y - f(x)| ≥ T
0, if |Y - f(x)| < T
}
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md385-404
衡量预测值与实际值之间的绝对差值
L(Y, f(x)) = |Y - f(x)|
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md406-411
衡量预测值与实际值之间的平方差
L(Y, f(x)) = (Y - f(x))²
此损失函数常用于回归问题,是最小二乘法等方法的基础。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md413-419
用于二分类
L(Y, P(Y|X)) = -log(P(Y|X))
其中 P(Y|X) 是给定输入 X 的正确类别 Y 的预测概率。
二分类交叉熵损失
L(y, p) = -[y·log(p) + (1-y)·log(1-p)]
其中 y 是实际值(0 或 1),p 是预测概率。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md421-428 English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md329-340
用于 AdaBoost 等算法
L(Y, f(x)) = exp(-Y·f(x))
其中 Y 为 -1 或 1,f(x) 为预测值。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md430-436
用于支持向量机
L(Y) = max(0, 1-T·y)
其中 y 是 -1 到 1 范围内的预测值,T 是目标值(-1 或 1)。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md438-458
在机器学习术语中,“损失函数”和“成本函数”经常互换使用,但它们可能存在细微的差别。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md270-302
损失函数的选择取决于问题的性质、数据的分布以及应用的具体要求。
分类问题:
回归问题:
特殊注意事项:
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md356-354
大多数深度学习框架都提供了常见损失函数的内置实现。
TensorFlow:
tf.nn.sigmoid_cross_entropy_with_logits()tf.nn.softmax_cross_entropy_with_logits()PyTorch:
torch.nn.BCEWithLogitsLoss()torch.nn.CrossEntropyLoss()来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md348-354
神经网络训练中一个常见的问题是,为什么在分类问题上,交叉熵损失比二次成本(MSE)更受青睐。关键的洞察来自于对梯度公式的分析。
二次成本函数梯度:
∂J/∂w = (a-y)σ'(z)x
∂J/∂b = (a-y)σ'(z)
交叉熵成本函数梯度:
∂J/∂w = (σ(z)-y)x
∂J/∂b = (σ(z)-y)
二次成本的梯度包含 σ'(z),即 Sigmoid 函数的导数。当 Sigmoid 输出接近 0 或 1 时,该导数变得非常小,导致“梯度消失问题”,减缓学习速度。交叉熵消除了这个项,使得在误差较大时学习速度更快。
这使得交叉熵对于输出层带有 Sigmoid 或 Softmax 激活函数的分类任务特别有效。
来源: English version/ch02_MachineLearningFoundation/Chapter 2_TheBasisOfMachineLearning.md357-370