机器学习评估方法及性能度量

  • 机器学习评估方法及性能度量

    • 1.方法
    • 2.度量

机器学习评估方法及性能度量

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\)其实是在改变样本空间的分布. 因此代价曲线下面的面积从这个意义下讲是所有可能的数据分布的一个平均代价, 期望的期望, 平均的平均, 这是造成人们理解困难的根源.

原文地址:https://www.cnblogs.com/23oclock/p/12496951.html

时间: 2024-10-14 08:34:59

机器学习评估方法及性能度量的相关文章

机器学习:模型性能度量(performance measure)(待补充)

对学习器的泛化性能进行评估,不仅需要有效的实验估计方法,还需要有衡量模型泛化性能的评准指标,这就是性能度量.性能度量反应任务需求,对比不同模型能力时,使用不同性能度量能导致不同的评判结果.因此,模型的好坏是相对的,模型不仅取决于算法和数据,还绝对于任务需求. 1. 回归任务中常用的性能度量是"均方误差"(mean squared error) 2. 聚类任务中性能度量分为两类:一类是将聚类结果与某个"参考模型"(reference model)进行比较,成为&quo

机器学习之性能度量

性能度量是衡量模型泛化能力的评判标准,性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果,因此什么样的模型是好的,不仅取决于算法和数据,还取决于任务需求. 1.错误率和精度 其实说白了就是我们的损失函数所体现的指标,比如常见的在分类问题中分类错误类别所占的比例或者是回归问题中的均方误差等,分别如下面的公式所示 2.查准率.查全率与F1 查准率:查准率表示预测的正例中有多少是真正的正率(也就是你预测正例的准确性) 查全率:查全率表示真是的正例中有多少被准确的

吴裕雄 python 机器学习——模型选择回归问题性能度量

from sklearn.metrics import mean_absolute_error,mean_squared_error #模型选择回归问题性能度量mean_absolute_error模型 def test_mean_absolute_error(): y_true=[1,1,1,1,1,2,2,2,0,0] y_pred=[0,0,0,1,1,1,0,0,0,0] print("Mean Absolute Error:",mean_absolute_error(y_tr

吴裕雄 python 机器学习——模型选择分类问题性能度量

import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC from sklearn.datasets import load_iris from sklearn.preprocessing import label_binarize from sklearn.multiclass import OneVsRestClassifier from sklearn.model_selection imp

机器学习周志华——学习器性能度量

衡量模型泛化能力的评价标准,就是性能度量(performance measure). (1)错误率与精度 (2)查准率.查全率与F1 基于样例真实类别,可将学习器预测类别的组合划分为真正例(true positive).假正例(false positive).真反例(true negative).假反例(false negative),TP.FP.TN.FN分别表示其对应的样例数,则有TP+FP+TN+FN=样例总数. 查准率P与查全率R分别定义为: P= TP/(TP+FP)=>正例结果中真正

模型性能度量

对学习器的泛化性能的评估,不仅需要有效可行的试验评估方法,还需要有模型泛化能力的评价标准,这就是性能度量(performance measure),性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果,这意味着模型的"好坏"是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求. 在预测任务中,给定样例集D={(x1,y1),(x2,y2),......,(xm,ym)},其中yi是示例xi的真是标记,要评估学习器f的性能,就要把学习

任务、性能度量和经验

机器学习算法被认为是一种从数据中学习的算法.所谓"学习"有一个定义:''对于某类任务 T 和性能度量 P,一个计算机程序被认为可以从经验 E 中学习是指,通过经验 E 改进后,它在任务 T 上由性能度量 P 衡量的性能有所提升." 下面将对任务.性能度量和经验进行介绍. 1.任务E 从"任务"的相对定义来讲,学习过程不能算成任务,学习能获取一种能力,这种能力可以让我们完成任务.比如我们要让机器人行走,那么行走就是任务. 从机器学习的角度来讲,任务定义为机器

机器学习 | 机器学习评估方法

机器学习评估方法 留出法(hold out):数据集预留出一部分数据为测试集,将数据集 D 划分为训练集 S 和测试集 T.大概比例为测试集占全局数据量的(1/5~1/3) 留一法:留一法是留出法的特例,即每次测试集 T 只留一个数据,剩下的作为训练集 S K折交叉验证(k-fold cross validation):每次将数据划分 k 份,其中一份作为测试集 T,剩下的作为训练集 S:重复以上过程 k 次,特别地每次用作测试集 T 的都是各不相同的. 自助法(bootstrapping):每

性能度量RMSE

回归问题的典型性能度量是均方根误差(RMSE:Root Mean Square Error).如下公式. m为是你计算RMSE的数据集中instance的数量. x(i)是第i个实例的特征值向量 ,y(i)是其label(期望的模型输出).如下: X是包含了所有实例的特征值(不包含label)的矩阵.每行代表一个实例,并且每行等于x(i)向量的转置:(x(i))T . 下图矩阵中的第一行为2中向量的转置(列向量变为行向量). h是预测函数,当输入是某实例的特征向量x(i) ,应用函数之后,结果为