ROC与PRC
先定义几个指标:
F P R = F P F P + T N T P R = T P T P + F N (Sensitivity/Recall) Precision = T P T P + F P \begin{align*} FPR &= \frac{FP}{FP+TN}\\ TPR &= \frac{TP}{TP+FN} \text{\quad(Sensitivity/Recall)}\\ \text{Precision} &= \frac{TP}{TP+FP}\\ \end{align*} F P R T P R Precision = F P + T N F P = T P + F N T P (Sensitivity/Recall) = T P + F P T P
ROC
ROC曲线是以FPR为横坐标,TPR为纵坐标的曲线。这曲线是咋画出来的呢,见下
把预测样本(假设有n个)按概率从大到小排序(想象从上到下排成一列) 画n+1条分界线(每个样本上下都有一条线)。 取最下面的一条线,其上预测为1,其下预测为0,计算出对应的FPR和TPR,得到一个点。 依次往上取分界线,重复步骤3,得到n+1个点。
这曲线刻画了模型的排序能力,理想的模型应该把正例全部排在负例上面,这样按照上面的步骤,会得到一个从(1,1)到(0,1)再到(0,0)的折线。
基准线是从(0,0)到(1,1)的对角线,表示随机猜测的模型。
PRC
PRC曲线是以Recall为横坐标,Precision为纵坐标的曲线。
绘制方法与ROC类似,也是按照预测概率排序,依次取分界线计算Precision和Recall得到点。
但是理想模型的PRC曲线是从 ( 1 , 总体中正例比例 ) (1, \text{总体中正例比例}) ( 1 , 总体中正例比例 ) 到 ( 1 , 1 ) (1,1) ( 1 , 1 ) 再到 ( 0 , 1 ) (0,1) ( 0 , 1 ) 的折线。
基准线是从 ( 0 , 总体中正例比例 ) (0, \text{总体中正例比例}) ( 0 , 总体中正例比例 ) 到 ( 1 , 总体中正例比例 ) (1, \text{总体中正例比例}) ( 1 , 总体中正例比例 ) 的水平线,表示随机猜测的模型。
交互式演示
以下演示的分界线是从上往下走的。注意PRC图中第一个点无法绘制,因为Precision无法计算(没有预测为正例的样本),这其实也能检测模型在极不平衡样本中偷懒的问题
交互演示
可以看到ROC在分界线移动过程中在纳入负例后,点会向右移动。想象一个极不平衡的样本,负例占绝大多数,那么这样的右移是极其微弱的,ROC曲线看起来仍然表现很好,但PRC曲线会因为Precision的下降而明显下移。
总结
这俩曲线都能评估模型的排序能力,但PRC更适合评估不平衡数据集上的模型性能,因为它关注的是正例的预测质量,而ROC可能会被大量的负例所掩盖。
信息论的一些知识
事件的信息量
直觉是:一个事件 A A A 发生的概率越小,那么它带来的信息量越大。这是合理的,一个大概率事件的发生,比如说“明天太阳会从东边升起”,几乎是一句屁话,它不含任何信息量。
用 I ( A ) I(A) I ( A ) 代表事件 A A A 发生的信息量,上面的直觉告诉我们,信息量直接与事件发生的概率挂钩,故 I ( A ) = f ( P ( A ) ) I(A) = f(P(A)) I ( A ) = f ( P ( A )) ,它应该是事件概率的函数。
再想想,如果两个独立事件同时发生,带来的总信息量应该是两者信息量之和,因此 I ( A ∩ B ) = I ( A ) + I ( B ) I(A\cap B) = I(A)+I(B) I ( A ∩ B ) = I ( A ) + I ( B ) ,也就是
f ( P ( A ∩ B ) ) = f ( P ( A ) ⋅ P ( B ) ) = f ( P ( A ) ) + f ( P ( B ) ) f(P(A\cap B)) = f(P(A)\cdot P(B)) = f(P(A))+f(P(B))
f ( P ( A ∩ B )) = f ( P ( A ) ⋅ P ( B )) = f ( P ( A )) + f ( P ( B ))
满足这种性质的函数是 C log ( ⋅ ) C\log(\cdot) C log ( ⋅ ) ,为满足随概率递减的性质,事件的信息量定义为
I ( A ) = − log P ( A ) I(A) = -\log P(A)
I ( A ) = − log P ( A )
信息熵
随机变量是概率论中的重要对象,定义完事件的信息量,我们当然要尝试能不能扩展到随机变量上。
随机变量 X X X 的信息熵定义为
H ( X ) = E [ I ( X ) ] H(X) = E[I(X)]
H ( X ) = E [ I ( X )]
直觉上理解,就是随机变量所代表的事件的信息量的平均,或者说,观察一次随机变量,平均意义上能带来多少信息量。
有时候信息熵也写为 H ( p ) , p H(p),p H ( p ) , p 代表概率质量函数或概率密度函数,因为信息熵只与概率分布有关,这是容易看出来的。
进一步探讨见一些统计指标 。
互信息
两个随机变量的互信息 I ( X ; Y ) I(X;Y) I ( X ; Y ) 定义为
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y) = H(X) - H(X\mid Y)
I ( X ; Y ) = H ( X ) − H ( X ∣ Y )
H ( X ∣ Y ) H(X\mid Y) H ( X ∣ Y ) 代表平均意义上,在观察到 Y Y Y 的条件下观察 X X X 获得的信息量。如果得知 Y Y Y 可以帮助我们得知 X X X ,那么 H ( X ∣ Y ) H(X\mid Y) H ( X ∣ Y ) 应该小于 H ( X ) H(X) H ( X ) ,也就是说我们会获得比无条件情况下更少的信息量,这是符合直觉的。这少下来的信息量,就是 X , Y X,Y X , Y 的互信息。它衡量的是观察 Y Y Y 能帮助我们获得多少观察 X X X 的信息量。
互信息有以下的性质:
I ( X ; Y ) = I ( Y ; X ) I(X;Y) = I(Y;X) I ( X ; Y ) = I ( Y ; X ) I ( X ; Y ) ≥ 0 I(X;Y)\ge 0 I ( X ; Y ) ≥ 0
I ( X ; Y ) = E [ log p ( X ∣ Y ) − log p ( X ) ] = E [ log p ( X , Y ) p ( Y ) − log p ( X ) ] = E [ log p ( X , Y ) − log p ( X ) − log p ( Y ) ] = E [ log p ( X , Y ) p ( X ) − log p ( Y ) ] = E [ log p ( Y ∣ X ) − log p ( Y ) ] = I ( Y ; X ) \begin{align*} I(X;Y) &= E[\log p(X\mid Y)-\log p(X)]\\ &= E[\log \frac{p(X,Y)}{p(Y)}-\log p(X)]\\ &= E[\log p(X,Y) - \log p(X) - \log p(Y)]\\ &= E[\log \frac{p(X,Y)}{p(X)}-\log p(Y)]\\ &= E[\log p(Y\mid X)-\log p(Y)]\\ &= I(Y;X) \end{align*} I ( X ; Y ) = E [ log p ( X ∣ Y ) − log p ( X )] = E [ log p ( Y ) p ( X , Y ) − log p ( X )] = E [ log p ( X , Y ) − log p ( X ) − log p ( Y )] = E [ log p ( X ) p ( X , Y ) − log p ( Y )] = E [ log p ( Y ∣ X ) − log p ( Y )] = I ( Y ; X )
这是第一个性质的证明。
从上面的等式,也能得到
I ( X ; Y ) = E [ log p ( X , Y ) p ( X ) p ( Y ) ] I(X;Y) = E[\log\frac{p(X,Y)}{p(X)p(Y)}] I ( X ; Y ) = E [ log p ( X ) p ( Y ) p ( X , Y ) ]
由 1 − 1 x + 1 ≤ log ( 1 + x ) 1-\frac{1}{x+1}\le\log (1+x) 1 − x + 1 1 ≤ log ( 1 + x ) 这个经典不等式知
E [ log p ( X , Y ) p ( X ) p ( Y ) ] ≥ E [ 1 − p ( X ) p ( Y ) p ( X , Y ) ] = 1 − ∬ p ( x , y ) p ( x ) p ( y ) p ( x , y ) d x d y = 1 − ∫ p ( x ) d x ∫ p ( y ) d y = 1 − 1 ⋅ 1 = 0 \begin{align*} E[\log\frac{p(X,Y)}{p(X)p(Y)}]&\ge E[1-\frac{p(X)p(Y)}{p(X,Y)}] \\ &= 1-\iint p(x,y)\frac{p(x)p(y)}{p(x,y)}dxdy\\ &= 1- \int p(x)dx\int p(y)dy\\ &=1-1\cdot 1\\ &=0 \end{align*} E [ log p ( X ) p ( Y ) p ( X , Y ) ] ≥ E [ 1 − p ( X , Y ) p ( X ) p ( Y ) ] = 1 − ∬ p ( x , y ) p ( x , y ) p ( x ) p ( y ) d x d y = 1 − ∫ p ( x ) d x ∫ p ( y ) d y = 1 − 1 ⋅ 1 = 0
原谅我用 p ( x ) p(x) p ( x ) 表示随机变量的 X X X 的概率密度或概率质量函数,p ( y ) , p ( x , y ) p(y),p(x,y) p ( y ) , p ( x , y ) 类似,这太不规范了,但是知道意思就好。
以及上面没有指定区域的积分,实际上指定积分而不是不定积分。
由上面的推导,还可以知道
I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X , Y ) I(X;Y) = H(X) + H(Y) - H(X,Y)
I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X , Y )
直观上理解,以上的两个性质分别可以解读为:
期望意义上,两者相互之间的信息是对等的
期望意义上,得知其中之一,不会帮倒忙。
机器学习中的损失函数
分类问题
逻辑回归
逻辑回归假设 Y ∣ X = x Y\mid X=\boldsymbol x Y ∣ X = x 服从伯努利分布,并且
P ( Y = 1 ∣ X = x ) = 1 1 + e − z z = w T x + b P(Y=1\mid X=\boldsymbol x) = \frac{1}{1+e^{-z}}\qquad z = \boldsymbol w^T\boldsymbol x + b
P ( Y = 1 ∣ X = x ) = 1 + e − z 1 z = w T x + b
Y ∣ X Y\mid X Y ∣ X 所服从的分布由 w T \boldsymbol w^T w T 和 b b b 决定。
假设我们观察到一堆样本 ( y i , x i ) , i = 1 , . . , n (y_i,\boldsymbol x_i), i=1,..,n ( y i , x i ) , i = 1 , .. , n ,记 p i = P ( Y = y i ∣ X = x i ) p_i = P(Y=y_i\mid X=\boldsymbol x_i) p i = P ( Y = y i ∣ X = x i )
用极大似然估计方法可得, w T \boldsymbol w^T w T 和 b b b 应该使下面的函数最小
− log L = − ∑ i = 1 n [ y i log p ^ i + ( 1 − y i ) log ( 1 − p ^ i ) ] −\log L=-\sum_{i=1}^n[y_i\log \hat p_i+(1−y_i)\log(1−\hat p_i)]
− log L = − i = 1 ∑ n [ y i log p ^ i + ( 1 − y i ) log ( 1 − p ^ i )]
上面的函数关于 w , b \boldsymbol w,b w , b 是凸函数,容易用梯度下降算法找到全局最小值点。
实践中,对上面的表达式实行梯度下降更新,就可以得到 w , b \boldsymbol w,b w , b 的估计量。
上面的损失函数,实际上是交叉熵的估计(差一个倍数 1 n \frac{1}{n} n 1 ),先给出交叉熵的定义:
假设随机变量 X X X 的概率质量函数为 p p p ,我们估计出它的质量函数为 q q q ,那么它的交叉熵定义为
H ( p , q ) = − ∑ x p ( x ) log q ( x ) = − E p [ log q ( X ) ] H(p,q) = -\sum_x p(x)\log q(x) = -E_{p}[\log q(X)] H ( p , q ) = − x ∑ p ( x ) log q ( x ) = − E p [ log q ( X )]
交叉熵一个重要的性质是 H ( p , q ) = H ( p ) + D K L ( p ∥ q ) H(p,q) = H(p) + D_{KL}(p\|q) H ( p , q ) = H ( p ) + D K L ( p ∥ q ) ,就是真实分布的信息熵加上两个分布之间的 KL 散度,这个 KL 散度我不清楚是什么东西(后面会补上介绍),总之它大于等于0。
这样一来,逻辑回归就有一个全新的理解角度了,那就是尽量使我们的估计分布贴合真实分布。注意,在这种理解下,最初真实条件概率的假设是不需要的,我们应该理解为,我们用那个模型来构造估计分布。
GPT说的不赖:
逻辑回归的极大似然解释依赖于伯努利条件分布假设;但交叉熵最小化的解释不要求真实条件概率一定严格服从 logistic 形式,它可以被理解为在一个受限制的模型族中寻找最接近真实条件分布的近似。
在逻辑回归中,上面的质量函数都是带条件的,并且由于我们无从得知真实分布,所以用 1 n ∑ i = 1 n ⋅ \frac{1}{n}\sum_{i=1}^n \cdot n 1 ∑ i = 1 n ⋅ 来估计。
分类树
决策树的构建目标是最小化各个叶子节点内样本的某种指标的和。这个指标可以取
基尼不纯度
设这个分类树做的是 K K K 分类问题,某个叶子节点中元素属于各类的占比分别为 p 1 , . . . , p K p_1,...,p_K p 1 , ... , p K ,那么基尼不纯度
G = 1 − ∑ i = 1 K p i 2 G = 1-\sum_{i=1}^{K}p_i^2
G = 1 − i = 1 ∑ K p i 2
一个节点越纯净,即如果存在一个主导的类别,上面的不纯度就越低。
这个实际上是这批样本波动程度的一种度量。下面具体讲讲:
以三分类为例,我们先想想,用什么表示一个样本的类别?用取值为 1 , 2 , 3 1,2,3 1 , 2 , 3 的随机变量吗?这跟用 0 , 1 , 2 0,1,2 0 , 1 , 2 有什么区别?跟 − 114514 , 0 , 114514 -114514,0,114514 − 114514 , 0 , 114514 又有什么区别?显然上面三种取值的随机变量的方差是不一样的(即使对应的概率一样),所以这种方法并不好。所以咱们用一个三维的 0 / 1 0/1 0/1 向量来表示类别,比如 [ 0 , 0 , 1 ] T [0,0,1]^T [ 0 , 0 , 1 ] T 表示第三类。
设一个节点内有若干样本,三类占比分别为 p 1 , p 2 , p 3 p_1,p_2,p_3 p 1 , p 2 , p 3 ,用 y i = [ x 1 i , x 2 i , x 3 i ] T \boldsymbol y_i = [x_{1i},x_{2i},x_{3i}]^T y i = [ x 1 i , x 2 i , x 3 i ] T 来表示一个样本的类别。每个分量服从伯努利分布。我们用
E [ ∥ y i − E ( y i ) ∥ 2 ] E[\|\boldsymbol y_i - E(\boldsymbol y_i)\|^2]
E [ ∥ y i − E ( y i ) ∥ 2 ]
来表示随机向量的波动,这实际上就是 y i \boldsymbol y_i y i 协方差矩阵的迹。
我们求 y i \boldsymbol y_i y i 的协方差矩阵:
C o v ( y ) = [ p 1 ( 1 − p 1 ) ⋅ ⋅ ⋅ p 2 ( 1 − p 2 ) ⋅ ⋅ ⋅ p 3 ( 1 − − p 3 ) ] Cov(\boldsymbol y) =
\begin{bmatrix}
p_1(1-p_1) &\cdot &\cdot \\
\cdot&p_2(1-p_2)&\cdot\\
\cdot&\cdot&p_3(1--p_3)
\end{bmatrix}
C o v ( y ) = p 1 ( 1 − p 1 ) ⋅ ⋅ ⋅ p 2 ( 1 − p 2 ) ⋅ ⋅ ⋅ p 3 ( 1 − − p 3 )
(非对角线元素用点代替,因为我们不知道各分量的具体相关性,其协方差不一定为零。)
求迹即得 1 − ∑ i = 1 3 p i 2 1-\sum_{i=1}^{3}p_i^2 1 − ∑ i = 1 3 p i 2 正是所谓基尼不纯度。
信息熵
沿用上面的记号,信息熵
H = − ∑ i = 1 K p i ln p i H = -\sum_{i=1}^{K}p_i\ln p_i
H = − i = 1 ∑ K p i ln p i
也可以作为一个指标。
回忆上面对 “用单个随机变量表示样本类别” 问题的讨论,主要就是分配给同样的类别同样的概率和不同的取值导致的方差不一致的问题,上面对信息熵的介绍说到信息熵与随机变量的具体取值无关,只关心概率的分布,那它就很适合做指标。
在这种场景下,“熵” 的概念就更明显了。我们知道物理学中的熵是用来描述系统混乱程度的,这里的熵就是用来描述一个节点的混乱程度:如果一个节点都是同类的样本,那信息熵为0,代表节点纯净、不混乱;反之,若一个节点内部有各种各样的类别,且都不主导,百家争鸣,那信息熵就会很大,代表节点很混乱。
LDA
分类问题关注 P ( Y = k ∣ X = x ) P(Y=k\mid X=\boldsymbol x) P ( Y = k ∣ X = x ) ,逻辑回归直接建模它,而LDA则利用贝叶斯公式来建模。下面给出贝叶斯公式:
P ( Y = k ∣ X = x ) = P ( X = x ∣ Y = k ) P ( Y = k ) P ( X = x ) P(Y=k\mid X=\boldsymbol x) = \frac{P(X=\boldsymbol x\mid Y=k)P(Y=k)}{P(X=\boldsymbol x)}
P ( Y = k ∣ X = x ) = P ( X = x ) P ( X = x ∣ Y = k ) P ( Y = k )
其中
P ( Y = k ∣ X = x ) P(Y=k\mid X=\boldsymbol x) P ( Y = k ∣ X = x ) 为后验概率
P ( Y = k ) P(Y=k) P ( Y = k ) 为先验概率
P ( X = x ∣ Y = k ) P(X=\boldsymbol x\mid Y=k) P ( X = x ∣ Y = k ) 为似然度
LDA假设
X ∣ Y = k ∼ N ( μ k , Σ ) X\mid Y=k\sim N(\mu_k,\Sigma)
X ∣ Y = k ∼ N ( μ k , Σ )
这是说它认为每一类中,特征都服从同方差的多元正态分布。
在上面的假设下,我们可以很方便地计算 P ( X = x ∣ Y = k ) P ( Y = k ) P(X=\boldsymbol x\mid Y=k)P(Y=k) P ( X = x ∣ Y = k ) P ( Y = k ) ,由于分母都是相同的,给定 x \boldsymbol x x , 在比较不同的 P ( Y = k ∣ X = x ) P(Y=k\mid X=\boldsymbol x) P ( Y = k ∣ X = x ) 时只用比较分子即可。
正态分布的参数可以由样本估计,P ( Y = k ) P(Y=k) P ( Y = k ) 也可以,因此 P ( X = x ∣ Y = k ) P ( Y = k ) P(X=\boldsymbol x\mid Y=k)P(Y=k) P ( X = x ∣ Y = k ) P ( Y = k ) 是可以计算的。