- [机器学习评估方法及性能度量](#%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e8%af%84%e4%bc%b0%e6%96%b9%e6%b3%95%e5%8f%8a%e6%80%a7%e8%83%bd%e5%ba%a6%e9%87%8f)
- [1.方法](#1%e6%96%b9%e6%b3%95)
- [2.度量](#2%e5%ba%a6%e9%87%8f)
# 机器学习评估方法及性能度量
## 1.方法
已知数据集$D$有限, 需分出一部分用作训练, 剩下的一部分用作测试.
**按比例留出.** 训练集和测试集保持$D$中类别的比例. 以二分类任务为例, 常见做法是将大约$2/3$~$4/ 5$的样本用作训练, 剩余样本用于测试. 一般采用若干次随机划分, 重复进行实验评估后取平均值作为留出法的评估结果.
**交叉检验法.** 划分$D = D_1\cup \cdots \cup D_k$,$D_i\cap D_j \neq \varnothing(i\neq j)$, 每个子集仍尽可能保持类别比例.每次取一个子集用于测试, 作$k$次评估后取平均值. 特殊做法是"留一法", 即每次留一个元素用于测试.
**自助法.** 设$D$有$m$个样本, 从$D$中有放回地抽样$m$次得到有$m$个元素的$D'$, 则可用$D'$作训练集,$D\backslash D'$作为测试集. 自助法在数据集较小, 难以划分时很有用, 但其改变了数据集的原始分布, 会引入估计偏差. 因此, 当数据充足时, 留出法和交叉检验法更常用.
## 2.度量
对于分类任务, 最常用的两个度量是**错误率和精度**:
$$
\begin{aligned}
E(f; D) &= \frac1m \sum_{i = 1}^{m}\mathbb{I}(f(x_i = y_i))\\
acc(f; D) &= \frac1m \sum_{i = 1}^{m}\mathbb{I}(f(x_i) \neq y_i).
\end{aligned}
$$
对于二分类任务, 由于考察的角度不同, 有较多的度量方式.
**查准率和查全率.**
$$
P(recision) = \frac{TP}{TP + FP}\qquad R(ecall) = \frac{TP}{TP + FN}.
$$
其中$TP$为真正例数, $FP$为假正例数, $FN$为假反例数. 设原本数据中正例数为$OP$, 反例数为$ON$; 学习到的正例数为$LP$, 反例数为$LN$, 则
$$
\begin{aligned}
OP &= TP + FN\\
ON &= TN + FP\\
LP &= TP + FP\\
LN &= TN + FN
\end{aligned}
$$
可知查准率是所有学习到的正例中分类正确的比例; 查全率是原始数据正例被查对的比例.
二分类器(如逻辑回归)一般会事先设定一个阈值作为超参数(显式或隐式地), 学习后返回样本为正例的概率, 若其大于阈值, 则判定该样本为正例, 否则判定为反例. **阈值越高, 假正例越少, 查准率越高; 阈值越低, 假反例越少, 查全率越高**. 两者的矛盾在于此.
逻辑回归阈值设为$0.5$, 等价于判定满足$w^Tx+b\geq 0$的样本为正例, 改变其阈值相当于把回归得到的直线平行地移动, 等价于判定满足平移后$w^Tx+b'\geq 0$样本为正例.
通过选取不同的阈值, 则可根据相应的查准率(纵坐标)和查全率(横坐标)绘制出$P-R$曲线(形如1/4圆). 由上面的分析可知, 阈值是随横坐标减小设定的, 即横坐标为0时阈值最大, 横坐标为1时阈值最小. 观察曲线可比较两个分类器孰优孰劣:
1. 若 A 的曲线包住 B 的曲线, 则认为 A 优于 B;
2. 若 A 的平衡点(与$y = x$的交点)大于 B 的, 则认为 A 优于 B;
3. 比较$P$和$R$的调和平均$F_1$
$$
\frac{1}{F_1} = \frac12\left(\frac1P + \frac1R \right),
$$
或比较加权调和平均$F_{\beta}$
$$
\frac{1}{F_{\beta}} = \frac{1}{1 + \beta^2}\left(\frac1P + \frac{\beta^2}{R} \right),
$$
两者都是越大越优.
**ROC和AUC.**
真正例率和假正例率分别为:
$$
TPR = \frac{TP}{TP + FN}\qquad FPR = \frac{FP}{TN + FP}.
$$
真正例率是正例中被正确识别的比例(查全率), 假正例率是反例中被错误识别的比例. 随着阈值的增大, 真正例率先不变后变小, 假正例率先变小后不变. 和$P-R$曲线一样, 变化阈值, 以真正例率为纵坐标, 假正例率为横坐标, 可绘制出 ROC(Receiver Operating Characteristic) 曲线. 比较曲线下方面积(Area Under ROC Curve)
$$
AUC = \frac12 \sum_{i= 1}^{m-1}(x_{i+1} - x_i)(y_i + y_{i+1}),
$$
越大分类器越优.
**代价敏感错误率和代价曲线.**
设$cost_{01}$(正例识别成反例)和$cost_{10}$(反例识别成正例)为错误代价, 则代价敏感错误率为
$$
\begin{aligned}
E(f; D; cost) = &\frac1m\left(\sum_{x_i \in D^{+}} \mathbb{I}(f(x_i)\neq y_i)cost_{01}\right. \\
&\left. + \sum_{x_i\in D^{-}}\mathbb{I}(f(x_i)\neq y_i)cost_{10} \right).
\end{aligned}
$$
它的重要之处是意识到不同类别识别错误的代价不同, 好比预测地震, 若是把没地震预测成有地震, 大不了大家睡觉小心点, 但是如果把有地震预测成没地震, 那造成的风险就大了.
假设$p$是整个样本空间(不是训练集)正例的概率(即Drummond and Holt,2006文章中的p_deploy), 以正例代价概率
$$
P(+)cost = \frac{p\times cost_{01}}{p\times cost_{01} + (1-p)\times cost_{10}},
$$
为横坐标, 以归一化代价
$$
cost_{norm} = \frac{FNR\times p \times cost_{01} + FPR\times (1-p)\times cost_{10}}{p\times cost_{01} + (1-p)\times cost_{10}}.
$$
为纵坐标(其中$FNR = 1 - TPR$是假反例率), 形成代价曲线, 它更关心泛化能力, 因为它更关心总样本空间的分布.
**绘制方法**: 固定一个阈值, 就得到相应的$FPR$和$FNR$, 注意到$cost_{norm}$关于$P(+)cost$是线性的, 因此当前阈值下的代价曲线, 即是$(0, FPR)$和$(1, FNR)$连接成的直线. 最后取得到的所有直线段的下界即为最优的代价曲线. 取下界的意思是对每个$p$固定**最优阈值**, 使得真正的变化量只剩下正例概率$p$. 容易知道代价曲线下所围的面积是以正例代价概率为测度的期望总体代价.
从最朴素的想法来**理解代价曲线**:
1. 假设已知总样本空间有$m$个正例, 有$n$个反例. 固定一个分类阈值, 将得到相应的假正例率($FPR$)和假反例率($FNR$), 那么可以推测总样本空间的代价为:
$$
cost = FPR\cdot m\cdot cost_{01} + FNR\cdot n\cdot cost_{10}.
$$
2. 假设总样本空间数量为$1$, 正例数量为$p$, 则反例数量为$1-p$, 我们可以推测总样本空间的代价为:
$$
cost = FPR\cdot p\cdot cost_{01} + FNR\cdot (1-p)\cdot cost_{10}. \tag{*}
$$
若正例和反例全都预测错误, 即假正例率和假反例率都为$1$, 此时代价最大, 为
$$
cost_{max} = p\cdot cost_{01} + (1-p)\cdot cost_{10}.
$$
归一化代价即是$(*)$式除掉上式, 归一化后的代价为
$$
cost_{norm} = \frac{cost}{cost_{max}} = \frac{FNR\cdot p \cdot cost_{01} + FPR\cdot (1-p)\cdot cost_{10}}{p\cdot cost_{01} + (1-p)\cdot cost_{10}} \in [0, 1].
$$
如果不归一化, 我们以$p$或$p\cdot cost_{01}$为横坐标, 以$(*)$式为纵坐标, 按照前面的画法直接画出来的图和代价曲线是等价的, 但是此时需要知道误分类代价.
归一化后, 以$p$或正例代价概率为横坐标(即把上式中$FNR$的系数那一块作为自变量), **则画图的时候, 不必知道误分类代价**.
另外我们其实可以注意到, 上面第2点中的代价其实是在样本空间分布为$(p, 1-p)$下的一个期望, 改变$p$其实是在改变样本空间的分布. 因此代价曲线下面的面积从这个意义下讲是所有可能的数据分布的一个平均代价, 期望的期望, 平均的平均, 这是造成人们理解困难的根源.