人可以从原有的经验对现有的事物做出判断,也就是利用经验对新情况做出有效的决策。机器学习是通过模仿人的方式,通过计算的手段,利用经验来改善系统自身的性能。在计算机中,“经验” 通常以 “数据” 的形式存在,因此,机器学习所研究的 主要内容,是能够在计算机上从数据中产生 “模型” 的 算法,也就是学习算法。即机器学习研究的是算法。
有了学习算法,我们把经验数据提供给它,它就能基于这些数据产生模型,在面对新的情况时,模型会给我们提供相应的判断。
数据集
数据记录的集合,其中每个记录是关于一个对象的描述,称为一个 “示例” (或 “样本”) 。
属性
反映事件或对象在某方面的表现或性质的事项。某个对象在属性上的取值称为 属性值。属性张成的空间称为 “属性空间”,每个对象都可以根据自己的属性值在这个空间中找到自己的坐标位置,空间中的每个点对应于一个坐标向量,所以我们也把一个示例称为一个 “特征向量”。
我们可以用 D = { x 1 , x 2 , ⋯ , x m } D=\{\pmb{x}_1,\pmb{x}_2,\cdots,\pmb{x}_m\} D={ xxx1,xxx2,⋯,xxxm} 表示包含 m m m 个示例的数据集,每个示例由 d d d 个属性描述,则每个示例表示为 x i = ( x i 1 , x i 2 , ⋯ , x i d ) \pmb{x}_i=(x_{i1},x_{i2},\cdots,x_{id}) xxxi=(xi1,xi2,⋯,xid),它是 d d d 维样本空间 X \mathcal{X} X 中的一个向量, x i ∈ X \pmb{x}_i \in \mathcal{X} xxxi∈X , d d d 称为样本 x i \pmb{x}_i xxxi 的维数。
学习
从数据中学的模型的过程称为 “学习” 或 “训练” ,这个过程通过执行某个学习算法来完成。
训练样本、训练集
训练过程中使用的数据称为 “训练数据”,其中的每个样本称为一个 “训练样本”,训练样本组成的集合称为 “训练集” 。
假设、真相
学得的模型对应了关于数据的某种潜在的规律,所以也称为 “假设”;这种潜在的规律自身,称为 “真相” 或 “真实”,学习过程就是为了找出或逼近真相。
样例
有时我们为了学习一个模型,仅有示例数据是不够的,可能还需要训练样本的 “结果” 信息,关于示例结果的信息称为 “标记”,有了标记信息的示例称为 “样例”。一般地,用 ( x i , y i ) (\pmb{x}_i,y_i) (xxxi,yi) 表示第 i i i 个样例,其中 y i ∈ Y y_i \in \mathcal{Y} yi∈Y 是示例 x i \pmb{x}_i xxxi 的标记, Y \mathcal{Y} Y 是所有标记的集合,也称为 “标记空间” 或 “输出空间”。
分类、回归、聚类
如果我们预测的结果是离散值,例如预测结果为 “好” 或 “坏”,就将该任务称为 分类。对于只涉及两个类别的 “二分类” 任务,称这两个类别分别为 “正类” 和 “反类” ,对于涉及多个类别时,称为 “多分类” 任务。
如果预测的结果是连续值,例如预测结果是西瓜的成熟度 0.95、0.98,称为 回归 。
一般地,预测任务是希望通过对训练集 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } \{(\pmb{x}_1,y_1),(\pmb{x}_2,y_2), \cdots ,(\pmb{x}_m,y_m)\} { (xxx1,y1),(xxx2,y2),⋯,(xxxm,ym)} 进行学习,建立一个从输入空间到 X \mathcal{X} X 到输出空间 Y \mathcal{Y} Y 的映射 f : X ↦ Y f:\mathcal{X} \mapsto \mathcal{Y} f:X↦Y 。
如果是将训练集中的对象分成若干组,每组称为一个 “簇” ,这种任务称为 “聚类” 。这些自动形成的簇可能对应一些潜在的概念划分。在聚类学习中,示例的标记结果信息通常是不包含在训练集中的。
监督学习和无监督学习
根据训练数据是否拥有标记信息,还可以将学习任务分为两大类:“监督学习” 和 “无监督学习” ,分类和回归是监督学习的代表,聚类是无监督学习的代表。
泛化能力
机器学习的目的是使学得的模型很好地适用于 “新样本” ,而不仅仅是在训练样本上工作得很好,学得的模型适用于新样本得能力,称为 “泛化” 能力。具有强泛化能力的模型能很好地使用于整个样本空间。通常假设样本空间中全体样本服从一个未知 “分布” D \mathcal{D} D ,我们获得的每个样本都是独立地从这个分布上采样获得的,即 “独立同分布” 。一般来说,训练样本越多,我们得到的关于 D \mathcal{D} D 的信息越多,这样就越有可能通过学习获得具有强泛化能力的模型。
归纳与演绎是科学推理的两大基本手段。
归纳 是 从特殊到一般 的 “泛化” 过程,即从具体的事实归结出一一般性规律。
演绎 是 从一般到特殊 的 “特化” 过程,即从基础原理推演出具体的情况。
从样例中学习显然是一个归纳的过程,因此也称为 归纳学习 。归纳学习有狭义与广义之分,广义的归纳学习相当于从样例中学习,而狭义的归纳学习则要求 从训练数据中学得概念 ,因此也称为 “概念学习” 。因为学得泛化性能好且语义明确的概念太过困难,因此概念学习的研究和应用都比较少,概念学习中最基本的是布尔概念学习,也就是对 “是” 或者 “不是” 这样的可表示为 0/1 布尔值的目标概念的学习。
我们可以把学习的过程看作一个在所有假设组成的空间中进行搜索的过程,搜索目标是找到与训练集 “匹配” 的假设。假设的表示一旦确定,假设空间及其规模大小就确定了。可以有许多策略对这个假设空间进行搜索,如自顶向下、从一般到特殊、自底向上、从特殊到一般等,搜索过程中可以不断删除与正例不一致的假设、和与反例一致的假设,最终将会获得与训练集一致的假设,这就是学习的结果。
因为学习过程是基于有限样本训练集进行的,所以可能有多个假设与训练集一致,也就是存在着一个与训练集一致的 “假设集合” ,我们称为 “版本空间”(version space) 。
通过学习得到的模型对应了假设空间中的一个假设,但是可能会得到多个与训练集一致的假设,他们对应的模型在面临新样本时却会产生不同的输出,这时,我们应该采用哪一个模型(或假设)?
对于一个具体的学习算法而言,它必须要产生一个模型,这时,学习算法本身的 “偏好” 就会起到关键作用。我们可以通过选择偏向某种类型的假设作为我们的模型,机器学习算法在学习过程中对某种类型假设的偏好,称为 “归纳偏好” (inductive bias),或简称为 “偏好”。
任何一个有效的机器学习算法必有其归纳偏好,否则它将被假设空间中看似在训练集上 “等效” 的假设所迷惑,而无法产生正确的学习结果。
下图展示了归纳学习的作用,图中每个点是一个训练样本,要学得一个与训练集一致的模型,相当于找到一条穿过所有训练样本点的曲线。显然,对有限个样本点组成的训练集,存在着很多条曲线与其一致,所以算法必须有某种偏好,才能产生出它认为 “正确” 的模型。
归纳偏好可以看作学习算法自身在一个可能很庞大的假设空间中对假设进行选择的启发式。一种简单的原则是 “奥卡姆剃刀”,即 “若有多个假设与观察一致,则选择最简单的那个” 。如果选择这个原则,那么下图的平滑意味着更简单,我们就会选择平滑的曲线 A 作为最后的结果。但是在很多情况下,我们并不能直接判断某个假设更简单,所以我们还需要其他的机制来解决归纳问题。
我们选择了一个学习算法后,希望的是该算法会比其他的算法表现得更好,在一般情况下,确实可能如此,但是也会存在在某种情况下其他的算法表现更好,也就是对于一个学习算法 A ,若它在某些问题上比学习算法 B 好,则必然存在另一些问题,在那里 B 比 A 好。这个结论对于任何算法均成立,这就是 “没有免费得午餐” 定理(No Free Lunch Theorem, NFL)。
但是,NFL 定理有一个重要的前提:所有 “问题” 出现的机会相同、或所有问题同等重要。但在实际中并不是这样,很多时候,我们只关注自己正在试图解决的问题,为这个问题找到一个解决方案,至于这个解决方案在别的问题、或相似的问题上是否为好方案,我们并不关心。NFL 定理最重要的是让我们意识到,要谈论算法的相对优劣,必须要阵对具体的学习问题,学习算法的好坏往往取决于自身的归纳偏好与问题是否相匹配。
我们把学习器(模型)的实际预测输出与样本的真实输出之间的差异称为 “误差”(erroe),学习器在训练集上的误差称为 “训练误差”(training errror)或 “经验误差”(empirical error),在新样本上的误差称为 “泛化误差”(generalization error)。
显然,我们希望得到一个经验误差小的学习器,在很多情况下,我们可以学得一个经验误差很小、在训练集上表现很好的学习器,但是这样的学习器在多数情况下都不好。我们实际希望的是在新样本上能表现得很好的学习器,为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本得 “普遍规律”,这样才能在遇到新样本时做出正确得判别。但是当学习器把训练样本学得太好时,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有得一般性质,这样会导致泛化性下降,这种现象在机器学习中称为 “过拟合”(overfiting)。与过拟合相对应的是 “欠拟合”(underfitting),这是指对训练样本的一般性质尚未学好。
有多种因素可能导致过拟合,最常见的情况是学习能力过于强大,以至于把所有训练样本所包含的不太一般的特性都学到了。过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些阵对过拟合的措施,然和过拟合是无法彻底避免的,我们所能做的只是 “缓解” 。
在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,机器学习中对不同学习算法的选择和选择哪种参数配置的问题称为 “模型选择” (model selection)问题。理想的方法是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。但是我们不能直接获得泛化误差,训练误差由于过拟合现象的存在而不适合作为标准,那么我们如何进行模型评估于选择呢?
通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需要使用一个 “测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的 “测试误差”(testing error)作为泛化误差的近似。但是测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集种出现、围在训练过程中使用过。
对于只包含 m m m 个样例的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } D=\{(\pmb{x}_1,y_1),(\pmb{x}_2,y_2), \cdots ,(\pmb{x}_m,y_m)\} D={ (xxx1,y1),(xxx2,y2),⋯,(xxxm,ym)},既要训练,又要测试,我们应该怎么进行划分,从中产生训练集 S S S 和测试集 T T T ? 下面介绍几种划分方法。
留出法
“留出法”(hold-out)直接将数据集 D D D 划分为两个互斥的集合,其中一个集合作为训练集 S S S ,另一个作为测试集 T T T,在 S S S 上训练出模型后,用 T T T 来评估其测试误差,作为对泛化误差的估计。
需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。例如在分类任务中,至少要保持样本的类别比例相似。
训练集和测试集的比例也会对最终的模型造成影响,若训练集 S S S 包含大多数样本,则训练出的模型可能更接近于用 D D D 训练出的模型,但是由于 T T T 较小,评估结果可能不够稳定准确;若令测试集多包含一些样本,则训练集 S S S 与 D D D 差别更大了,被评估的模型与用 D D D 训练出的模型相比可能有较大的差别,从而降低了评估结果的保真性(fidelity)。这个问题没有完美的解决方法,常见的做法是将大约 2 3 ∼ 4 5 \frac{2}{3} \sim \frac{4}{5} 32∼54 的样本进行训练,剩余的样本用于测试。
交叉验证法
“交叉验证法”(cross validation)先将数据集 D D D 划分为 k k k 个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ ⋯ ∪ D k , D i ∩ D j = ∅ ( i ≠ j ) D=D_1 \cup D_2 \cup \cdots \cup D_k,D_i \cap D_j = \varnothing (i \neq j) D=D1∪D2∪⋯∪Dk,Di∩Dj=∅(i=j)。每个子集 D i D_i Di 都尽可能保持数据分布的一致性,即从 D D D 中通过分层采样得到。然后,每次用 k − 1 k-1 k−1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可以获得 k k k 组训练/测试集,从而可以进行 k k k 次训练和测试,最终返回的是这 k k k 个测试结果的均值。
交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k 的取值,为了强调这一点,通常称交叉验证法为 “ k k k 折交叉验证”(k-fold cross validation)。 k k k 常用的取值是 10,此时称为 10 折交叉验证,其他常用的 k k k 值称有 5、20 等。下面展示了 10 折交叉验证的示意图:
将数据集 D D D 划分为 k k k 个子集同样存在多种划分方式,为减小因划分样本不同而引入的差别,通常要随机使用不同的划分重复 p p p 次,最终的评估结果是这 p p p 次 k k k 折交叉验证结果的均值。
如果数据集 D D D 中包含 m m m 个样本,若令 k = m k=m k=m ,则得到了交叉验证法的一个特例:留一法(Leave-One-Out,LOO)。显然,留一法不受随机样本划分方式的影响,因为 m m m 个样本只有唯一的方式划分为 m m m 个子集。在这种情况下,实际评估的模型与期望评估的 D D D 训练出的模型很相似,所以其评估结果往往被认为是比较准确的。然而在样本数过多时,该方法的开销会特别大。同时,“没有免费的定理” (NFL)定理对于实验评估方法同样适用。
自助法
我们期望评估的是用整个数据集 D D D 训练出的模型,但是在留出法和交叉验证法中,总会保留一部分样本用于测试,所以其训练集总会比 D D D 小,这必然会引入一些估计误差。味蕾减少训练样本规模不同造成的影响,我们提出 “自助法”(bootstrapping)。
自助法直接以自助采样法(bootstrap sampling)为基础。给定包含 m m m 个样本的数据集 D D D ,我们对它进行采样产生数据集 D ′ D' D′:每次随机从 D D D 中挑选一个样本,将其拷贝放入 D ′ D' D′ ,然后将该样本放回。重复这个过程 m m m 次后,可以得到包含 m m m 个样本的数据集 D ′ D' D′ ,这就是自助采样的结果。我们用 D ′ D' D′ 作为训练集, D − D ′ D-D' D−D′ 用做测试集。
从上门的采样过程我们可以知道, D D D 中有一部分样本会在 D ’ D’ D’ 中多次出现,而有一部分不会出现。样本在 m m m 次采样中始终不被采到的概率为 ( 1 − 1 m ) m (1-\frac{1}{m})^m (1−m1)m ,取极限可以得到
lim m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{m\rightarrow \infty}(1-\frac{1}{m})^m=\frac{1}{e}\approx 0.368 m→∞lim(1−m1)m=e1≈0.368
也就是通过自助采样, D D D 中约有 36.8% 的样本未出现在 D ′ D' D′ 中,这样实际评估的模型与期望评估的模型都使用 m m m 个训练样本,而我们仍有数据总量约为 1 3 \frac{1}{3} 31 的、没有在训练集中出现的样本用于测试。这样的测试结果也称为 “包外估计”(out-of-bag estimate)。
自助法在数据集较小、难以有效划分训练/测试集时很有用,自助法也可以从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。但是自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。所以在初始数据量足够时,前面两种方法更常用。
调参与最终模型
大多数学习算法都有些参数需要设定,参数配置不同,学得模型的性能回有显著差别。所以在进行模型评估与选择时,除了要对学习算法选择,还要对参数进行设定,这个过程称为 “参数调节” 或 “调参” (parameter tuning)。
机器学习中常涉及两类参数:
一般情况下,调参和算法的选择没有本质区别:对每种参数配置都训练出模型,然后把对应最好的模型的参数作为结果。但是要注意的是,学习算法的很多参数是在实数范围内取值,因此对每种参数配置都训练出来模型是不可能的,通常的做法是对每个参数选定一个范围和变化步长,例如在 [ 0 , 0.2 ] [0,0.2] [0,0.2] 范围内以 0.05 为步长,则实际要评估的候选参数值只有五个,最终的值是从这五个取值中产生的。可能该参数值不是最佳的,但却是在计算开销和性能之间折中的结果。事实上,即便是进行了这种折中,还是会产生很多个模型需要考察。
在模型评估与选择过程中,我们只是选择了一部分数据训练模型,在模型选择完成后,学习算法和参数配置都已选定,此时应该使用数据集 D D D 重新训练模型,这个模型才是最终要提交给用户的模型。
通常我们称在模型实际使用中的数据称为测试数据,为了加以区分,在模型评估与选择中用于测试的数据集常称为 “验证集”(validation set)。
对学习器的泛化性能进行评估,不仅需要实验估计方法,还需要由衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。对模型好坏的衡量不仅仅取决于算法和数据,还决定于任务的需求,我们使用性能度量来反应任务的需求。
在预测任务中,给定样例集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } D=\{(\pmb{x}_1,y_1),(\pmb{x}_2,y_2), \cdots ,(\pmb{x}_m,y_m)\} D={ (xxx1,y1),(xxx2,y2),⋯,(xxxm,ym)},其中 y i y_i yi 是示例 x i \pmb{x}_i xxxi 的真实标记。要评估学习器 f f f 的性能,就要把学习器预测的结果 f ( x ) f(\pmb{x}) f(xxx) 与真实标记 y y y 进行比较。
回归任务最常用的性能度量是 “均方误差”(mean squared error)
E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f ; D)=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(\boldsymbol{x}_{i}\right)-y_{i}\right)^{2} E(f;D)=m1i=1∑m(f(xi)−yi)2
下面主要介绍 分类 任务中常用的性能度量。
错误率与精度
错误率和精度是分类任务中最常用的两种性能度量,这两种方式即适用与二分类,也适用于多分类。错误率 是分类错误的样本数占样本总数的比例,精度 是分类正确的样本数占样本总数的比例。对样例集 D D D ,分类错误率定义为
E ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) ≠ y i ) E(f ; D)=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right) E(f;D)=m1i=1∑mI(f(xi)=yi)
精度则定义为
acc ( f ; D ) = 1 m ∑ i = 1 m I ( f ( x i ) = y i ) = 1 − E ( f ; D ) \begin{aligned} \operatorname{acc}(f ; D) &=\frac{1}{m} \sum_{i=1}^{m} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right)=y_{i}\right) \\ &=1-E(f ; D) \end{aligned} acc(f;D)=m1i=1∑mI(f(xi)=yi)=1−E(f;D)
查准率、查全率与 F1
有时我们需要知道我们选出的数据有多少是正确的,以及所有数据中有多少正确的数据被检索出来了。这时我们需要使用其他的性能度量。
以信息检索为例,检索出的信息中有多少比例是用户感兴趣的,该值称为 查准率 (precision),用户感兴趣的内容有多少被检测出来了,该值称为 查全率(recall)。
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为 真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情况,令 TP、FP、TN、FN 分别表示其对应的样例数,我们可以定义分类结果的 “混淆矩阵” 如下:
通过上表的表示,我们可以将查准率 P 与查全率 R 分别定义为:
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
查准率与查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为 “最可能” 是正例的样本,排在后面的是学习器认为 “最不可能” 是正例的样本。我们按该顺序依次把每个样本作为正例和反例的分界点,可以计算出每次的查全率、查准率。然后以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称 “P-R 曲线” ,显示该曲线的图称为 “P-R 图” 。下面给出了一个示意图。
P-R 图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的 P-R 曲线被另一个学习器的曲线完全 “包住” ,则可以断言后者的性能优于前者,上图中的学习器 A 的性能大于学习器 C ;如果两个学习器的 P-R 曲线发生了交叉,如上图的 A 和 B ,则难以一般性地断言两者的优劣,只能在具体的查准率或查全率条件下进行比较。在这种情况下,另外一个比较合理的判据是比较 P-R 曲线下面积的大小,它在一定程度上表征了学习器在查全率和查准率取得相对 “双高” 的比例,但这个值不太容易估计,因此人们设计了一些综合考虑查准率和查全率的性能度量。
“平衡点”(Break-Even Point,BEP)是 “查准率=查全率” 时的取值。例如上图中 A 的 BEP 大于 B 的,所以可以认为学习器 A 优于 B。
相比于平衡点,F1 度量更常用,其表示为:
F 1 = 2 × P × R P + R = 2 × T P 样例总数 + T P − T N F1=\frac{2 \times P \times R}{P+R}=\frac{2 \times TP}{\text{样例总数}+TP-TN} F1=P+R2×P×R=样例总数+TP−TN2×TP
在一些应用中,对查重率和查全率的重视程度有所不同, F 1 F1 F1 度量的一般形式—— F β F_{\beta} Fβ ,能让我们表达出对查准率/查全率的不同偏好,它定义为:
F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_{\beta}=\frac{\left(1+\beta^{2}\right) \times P \times R}{\left(\beta^{2} \times P\right)+R} Fβ=(β2×P)+R(1+β2)×P×R
其中 β > 0 \beta > 0 β>0 度量了查全率对查准率的相对重要性。 β = 1 \beta=1 β=1 时表示标准的 F 1 F1 F1; β > 1 \beta >1 β>1 时查全率有更大影响; β < 1 \beta<1 β<1 时查准率有更大影响。
ROC 与 AUC
很多机器学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。这样分类过程就相当于在这个排序中以某个 “截断点” 将样本分为两部分,前一部分作为正例,后一部分作为反例。
在不同的任务中,我们可以根据任务需求来采取不同的截断点,例如若我们更重视 “查准率” ,则可以选择排序中靠前的位置进行截断;若更重视 “查全率” ,可以选择靠后的位置进行截断。因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的 “期望泛化性能” 的好坏,ROC 曲线 就是从这个角度来 研究学习器泛化性能 的工具。
我们根据学习器的预测结果对样例进行排序,按此顺序依次把每个样本作为正例反例的截断点,然后用下面的两个公式,计算出两个值,分别以它们作为横、纵坐标作图,就得到了 “ROC 曲线” ,这里纵轴是 “真正率”(True Positive Rate,TPR),横轴是 “假正例率”(False Positive Rate,FPR),分别定义为:
T P R = T P T P + F N \mathrm{TPR}=\frac{T P}{T P+F N} TPR=TP+FNTP
F P R = F P T N + F P \mathrm{FPR}=\frac{F P}{T N+F P} FPR=TN+FPFP
显示 ROC 曲线的图称为 “ROC 图” 。下面给出了一个示意图:
与 P-R 图相似,若一个学习器的 ROC 曲线被另一个完全 “包住” ,则可以断言后者的性能优于前者;当两个学习器的 ROC 曲线发生交叉,一种较为合理的判据是比较 ROC 曲线下的面积,也就是 AUC(Area Under ROC Curve)。
代价敏感错误率
在现实任务中常会遇到这种情况,不同类型的错误所造成的后果不同,为权衡不同类型错误所造成的不同损失,可以为错误赋予 “非均等代价”(unequal cost)。
以二分类任务为例,我们可以根据任务的领域知识,设定一个 “代价矩阵”(cost matrix),如下表所示,其中 c o s t i j cost_{ij} costij 表示将第 i i i 类样本预测为第 j j j 类样本的代价。
因此,在非均等概率下,我们希望最小化的值变为了 “总体代价”(total cost)。若将上表中的第 0 类作为正类,第 1 类作为反类,令 D + D^+ D+ 与 D − D^- D− 分别代表样例集 D D D 的正例子集和反例子集,则 “代价敏感”(cost-sensitive)错误率为
E ( f ; D ; c o s t ) = 1 m ( ∑ x i ∈ D + I ( f ( x i ) ≠ y i ) × cost 01 + ∑ x i ∈ D − I ( f ( x i ) ≠ y i ) × cost 10 ) E(f ; D ; \mathrm{cost})=\frac{1}{m} \left( \sum_{\boldsymbol{x}_{i} \in D^{+}} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right) \times \operatorname{cost}_{01} +\sum_{\boldsymbol{x}_{i} \in D^{-}} \mathbb{I}\left(f\left(\boldsymbol{x}_{i}\right) \neq y_{i}\right) \times \operatorname{cost}_{10} \right) E(f;D;cost)=m1(xi∈D+∑I(f(xi)=yi)×cost01+xi∈D−∑I(f(xi)=yi)×cost10)
类似的,可以给出基于分布定义的代价敏感错误率,以及其他一些性能度量,如精度的代价敏感版本。若令 c o s t i j cost_{ij} costij 中的 i 、 j i、j i、j 取值不限于 0、1 ,则可以定义出多分类任务的代价敏感性能度量。