[2021.08.01 更新:Adaboosting]
2020.4 ∼ 2020.6 2020.4 \sim 2020.6 2020.4 ∼ 2020.6 上了蔡登教授《数据挖掘导论》这门课,讲得硬核而严谨。
课程内容涉及机器学习入门的 topic,包括以下内容:
贝叶斯模型和线性分类器
非线性方法,包括 Kernel 和 神经网络
KNN,决策树和随机森林
聚类和降维
主题模型和矩阵分解
于是撰写此文,试图把一些 solid 的知识点总结下来。
Bayesian Decision Theory
在 Supervised Learning 里,通过对 Samples { ( x 1 , ω 1 ) , … , ( x n , ω n } \{(x_1,\omega_1),\dots,(x_n,\omega_n\} {( x 1 , ω 1 ) , … , ( x n , ω n } 的训练,我们要做到对于每一个给出的 Sample x x x ,预测它的标签 ω \omega ω 。
由条件概率的知识,我们可以得到左下图的贝叶斯公式:
如果套用 Bayesian Decision Theory 的知识,我们要用贝叶斯公式来预测 P ( ω ∣ x ) P(\omega|x) P ( ω ∣ x ) ,其中:
P ( w j ) P(w_j) P ( w j ) 被称为 Prior 。我们得不到这个随机变量的精确值,但能根据训练数据的先验知识去估计。
P ( x ∣ w j ) P(x|w_j) P ( x ∣ w j ) 被称为 Likelihood 。有一个 naive 的预测方法叫做 Maximum likelihood decision :直接根据 Likelihood 的大小去预测标签,即选择 P ( x ∣ ω j ) P(x|\omega_j) P ( x ∣ ω j ) 最大的 ω j \omega_j ω j (当然这个算法通常不优)。
P ( ω j ∣ x ) P(\omega_j|x) P ( ω j ∣ x ) 被称为 Posterior 。
Optimal Bayes Decision Rule :用 Posterior 去预测二分类(即选择 P ( ω j ∣ x ) P(\omega_j|x) P ( ω j ∣ x ) 大的 ω j \omega_j ω j )能最小化错误概率。
证明:假设只有两个标签,则 P ( e r r o r ∣ x ) = P ( ω ∼ o ∣ x ) = min ( P ( ω 1 ∣ x ) , P ( ω 2 ∣ x ) ) P(error|x)=P(\omega_{\sim o}|x)=\min(P(\omega_1|x), P(\omega_2|x)) P ( error ∣ x ) = P ( ω ∼ o ∣ x ) = min ( P ( ω 1 ∣ x ) , P ( ω 2 ∣ x )) 。(ω o \omega_o ω o 为预测值)
P ( e r r o r ) = ∫ x P ( e r r o r ∣ x ) P(error)=\int_xP(error|x) P ( error ) = ∫ x P ( error ∣ x ) ,因为每个点都取到 min \min min ,所以积分起来的概率值也取到最小。
在现实情况下,我们可能会对 Loss Function 有不同的要求,所以形式化的贝叶斯估计如下:
假设总共有 { ω 1 , … , ω c } \{\omega_1,\dots,\omega_c\} { ω 1 , … , ω c } 这些标签,一共进行了 α 1 , … , α n \alpha_1,\dots,\alpha_n α 1 , … , α n 这些预测。
定义损失函数 λ ( α i ∣ ω i ) \lambda(\alpha_i|\omega_i) λ ( α i ∣ ω i ) 的值为:标签为 ω j \omega_j ω j 时预测了 α i \alpha_i α i 后的损失。
那么 Conditional risk 就是 R ( α i ∣ x ) = ∑ j = 1 c λ ( α i ∣ ω j ) P ( ω j ∣ x ) R(\alpha_{i} | x)=\sum_{j=1}^{c} \lambda(\alpha_{i} | \omega_{j}) P(\omega_{j} | x) R ( α i ∣ x ) = ∑ j = 1 c λ ( α i ∣ ω j ) P ( ω j ∣ x ) 。
定义 Bayes Risk 为 R R R 函数关于所有 x x x 的积分,我们就是想让 Bayes Risk 尽量小。
刚才讲到的用 Posterior 去预测,其实取的就是 λ i , j = [ i = j ] \lambda_{i,j}=[i=j] λ i , j = [ i = j ]
对于 Prior 的估计,可以直接用训练集里每一种标签出现的频率。但是如何估计 Likelihood 呢?
这就涉及到 Parameter Estimation 的知识了。假设 Likelihood 的分布满足某个已知函数,我们要根据训练数据估计出这个函数的参数 θ j \theta_j θ j ,以便最终估计 P ( x ∣ ω j ) P(x|\omega_j) P ( x ∣ ω j ) 。一般设为正态分布,即 P ( x ∣ ω j ) ∼ N ( μ j , σ j ) P(x|\omega_j) \sim N(\mu_j,\sigma_j) P ( x ∣ ω j ) ∼ N ( μ j , σ j ) 。
注意到,对于一个给定的标签 ω j \omega_j ω j ,只有等于这些标签的数据才会对 P ( x ∣ ω j ) P(x|\omega_j) P ( x ∣ ω j ) 产生贡献,即 w j w_j w j 彼此之间独立。具体地,假设标签为 ω j \omega_j ω j 的数据一共有 n n n 个,分别是 D = { x 1 , x 2 , … , x n } D=\{x_1,x_2,\dots,x_n\} D = { x 1 , x 2 , … , x n } ,求 P ( x ∣ ω j ) P(x|\omega_j) P ( x ∣ ω j ) 就是求 P ( x ∣ D ) P(x|D) P ( x ∣ D ) 。
参数估计主要分为两种方法:Maximum‐Likelihood 和 Bayesian Estimation 。
Maximum‐Likelihood 认为参数 θ \theta θ 是固定不变的未知数,通过估计 θ \theta θ 来估计 P ( x ∣ D ) P(x|D) P ( x ∣ D ) 。具体地,要求一组 θ ^ \hat \theta θ ^ 使得似然函数 P ( D ∣ θ ) = ∏ i = 1 n P ( x i ∣ θ ) P(D|\theta)=\prod \limits_{i=1}^nP(x_i|\theta) P ( D ∣ θ ) = i = 1 ∏ n P ( x i ∣ θ ) 的概率取到最大。例如,假设数据满足正态分布,且 ( μ , σ ) (\pmb{\mu},\sigma) ( μ μ , σ ) 都未知:
回忆正态分布的矩阵表示:P ( x ) = 1 ( 2 π ) d 2 ∣ Σ ∣ 1 2 exp [ − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) ] P(\boldsymbol{x})=\frac{1}{(2 \pi)^{\frac{d}{2}}|\Sigma|^{\frac{1}{2}}} \exp \left[-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu})^{T} \Sigma^{-1}(\boldsymbol{x}-\boldsymbol{\mu})\right] P ( x ) = ( 2 π ) 2 d ∣Σ ∣ 2 1 1 exp [ − 2 1 ( x − μ ) T Σ − 1 ( x − μ ) ]
则参数 μ \pmb{\mu} μ μ 的对数似然函数为: ln P ( x k ∣ μ ) = − 1 2 ln [ ( 2 π ) d ∣ Σ ∣ ] − 1 2 ( x k − μ ) T Σ − 1 ( x k − μ ) \ln P\left(x_{k} | \mu\right)=-\frac{1}{2} \ln \left[(2 \pi)^{d}|\Sigma|\right]-\frac{1}{2}\left(\pmb{x}_{k}-\pmb{\mu}\right)^{T} \Sigma^{-1}\left(\pmb{x}_{k}-\pmb{\mu}\right) ln P ( x k ∣ μ ) = − 2 1 ln [ ( 2 π ) d ∣Σ∣ ] − 2 1 ( x x k − μ μ ) T Σ − 1 ( x x k − μ μ )
导函数等于 0 0 0 ,解得 μ ^ = 1 n ∑ k = 1 n x k \boldsymbol{\hat \mu}=\frac{1}{n} \sum_{k=1}^{n} x_{k} μ ^ = n 1 ∑ k = 1 n x k ,Σ ^ = 1 n ∑ k = 1 n ( x k − μ ^ ) ( x k − μ ^ ) t \boldsymbol{\hat \Sigma}=\frac{1}{n} \sum_{k=1}^{n}\left(\mathbf{x}_{k}-\hat{\boldsymbol{\mu}}\right)\left(\mathbf{x}_{k}-\hat{\boldsymbol{\mu}}\right)^{t} Σ ^ = n 1 ∑ k = 1 n ( x k − μ ^ ) ( x k − μ ^ ) t
Bayesian Estimation 则是把参数 θ \theta θ 也看做随机变量。注意到 P ( x ∣ D ) = ∫ θ P ( x ∣ θ ) P ( θ ∣ D ) P(x|D)=\int _\theta P(x|\theta)P(\theta|D) P ( x ∣ D ) = ∫ θ P ( x ∣ θ ) P ( θ ∣ D ) ,前一项可以直接表示,所以 BE 的核心就是在给定的 D D D 下,估计每一个 θ \theta θ 的概率密度 P ( θ ∣ D ) P(\theta|D) P ( θ ∣ D ) (也就是 θ \theta θ 的关于 D D D 的分布 )。
注意到,如果 θ \theta θ 在 θ ^ \hat \theta θ ^ 处的取值特别大,P ( x ∣ D ) P(x|D) P ( x ∣ D ) 的积分式就可以直接用 P ( x ∣ θ ^ ) P(x|\hat \theta) P ( x ∣ θ ^ ) 来近似,这其实就是 Bayesian Estimation 退化成 Maximum‐Likelihood 了。在应用时其实很难搞出解析解,一般用数值方法做。
举一个理论推导的例子,假设 P ( x ∣ D ) ∼ N ( μ , σ 2 ) P(x|D) \sim N(\mu,\sigma^2) P ( x ∣ D ) ∼ N ( μ , σ 2 ) ,且我们知道 μ \mu μ 服从分布 N ( μ 0 , σ 0 2 ) N(\mu_0,\sigma_0^2) N ( μ 0 , σ 0 2 ) 。为了表示 P ( θ ∣ D ) P(\theta|D) P ( θ ∣ D ) ,我们得 再套一次贝叶斯公式 ,即 P ( θ ∣ D ) ∝ P ( D ∣ θ ) P ( θ ) P(\theta|D) \propto P(D|\theta)P(\theta) P ( θ ∣ D ) ∝ P ( D ∣ θ ) P ( θ ) (分母只是个系数不影响)。具体过程如下:
最后总结一下解决 Real-World 问题时(比如应付考试时)的 Naïve Bayes Classifier 步骤。
为了预测 P ( ω ∣ x ) P(\omega|\pmb{x}) P ( ω ∣ x x ) ,我们把 P ( ω j ) P(\omega_j) P ( ω j ) 设成 ω j \omega_j ω j 的频率,并对每一个 j j j 尝试去估计 P ( x ∣ ω j ) P(\pmb{x}|\omega_j) P ( x x ∣ ω j ) 。
上面讨论的所有做法里,每一条数据默认只有一个特征。现实里如果有多个特征,我们可以简单地假设它们之间条件独立,即 P ( x ∣ ω j ) = ∏ P ( x i ∣ ω j ) P(\pmb{x}|\omega_j)=\prod P(x_i|\omega_j) P ( x x ∣ ω j ) = ∏ P ( x i ∣ ω j ) 。
对于离散的特征,P ( x i ∣ ω j ) P(x_i|\omega_j) P ( x i ∣ ω j ) 直接用 x i x_i x i 在 ω j \omega_j ω j 条件下出现的频率近似。连续的特征有以下几种方法:
把分布函数划成离散的几段(bin),和离散的方法一样,每段统计频率。
假设它是正态分布,直接用 MLE 的结论去估计 ( μ , σ ) (\mu,\sigma) ( μ , σ ) ,带进去得到 P ( x i ∣ ω j ) P(x_i|\omega_j) P ( x i ∣ ω j )
注意:因为条件独立的假设,数据量不足时可能会因为某个特征的 P ( x i ∣ ω j ) = 0 P(x_i|\omega_j)=0 P ( x i ∣ ω j ) = 0 ,导致 P ( x ∣ ω j ) P(\pmb{x}|\omega_j) P ( x x ∣ ω j ) 被强制计算成 0 0 0 了。对此我们可以用 Laplace smoothing ,把 P ( x i ∣ ω k ) P(x_{i} | \omega_{k}) P ( x i ∣ ω k ) 的估计从 ∣ x i k ∣ N ω k \frac{|x_{ik}|}{N_{\omega_k}} N ω k ∣ x ik ∣ 变成 ∣ x i k ∣ + 1 N ω k + K \frac{|x_{i k}|+1}{N_{\omega_{k}}+K} N ω k + K ∣ x ik ∣ + 1
Linear Model
所谓 linear,就是对于训练数据 ( x i , y i ) (\pmb{x}_i,y_i) ( x x i , y i ) ,我们要学一个向量 w \pmb{w} w w 使得预测函数为 f ( x ) = w 0 + w T x f(x)=w_0+\pmb{w}^T\pmb{x} f ( x ) = w 0 + w w T x x 。
我们一般用 MSE 去估计一个模型的好坏,即最小化 J n = 1 n ∑ ( y i − f ( x i ) ) 2 J_n=\frac{1}{n} \sum (y_i-f(\pmb{x}_i))^2 J n = n 1 ∑ ( y i − f ( x x i ) ) 2 。
这就是 Linear Regression 的主要思路。注意到 min J n \min J_n min J n 是能求出解析解:
设 X = [ x 1 , x 2 , … , x n ] X=[\pmb{x}_1,\pmb{x}_2,\dots,\pmb{x}_n] X = [ x x 1 , x x 2 , … , x x n ] ,y = [ y 1 , … , y n ] T \pmb{y}=[y_1,\dots,y_n]^T y y = [ y 1 , … , y n ] T 。
我们要优化 w \pmb{w} w w 使得 J n ( w ) = ( y − X T w ) T ( y − X T w ) J_n(w)=(\pmb{y}-X^T\pmb{w})^T(y-X^T\pmb{w}) J n ( w ) = ( y y − X T w w ) T ( y − X T w w ) 取到最小。
J n J_n J n 对 w \pmb{w} w w 求导,有 ∇ J n = − 2 X ( y − X T w ) \nabla J_n=-2X(y-X^T\pmb{w}) ∇ J n = − 2 X ( y − X T w w )
若 ∇ J n = 0 \nabla J_n=0 ∇ J n = 0 ,解得 w ^ = ( X X T ) − 1 X y \pmb{\hat w}=(XX^T)^{-1}X\pmb{y} w ^ w ^ = ( X X T ) − 1 X y y 。
从上面的结果也可以推得,如果样本数小于特征数,X X T XX^T X X T 一定不满秩,也就推不出最优解。
下面我们来证明,为什么用 MSE 估价是合理的。
一个线性模型的实际效果往往是 y = f ( x , w ) + ϵ y=f(\pmb{x},\pmb{w})+\epsilon y = f ( x x , w w ) + ϵ ,其中 ϵ \epsilon ϵ 是噪声。
我们假设 ϵ \epsilon ϵ 服从高斯分布 N ( 0 , σ 2 ) N(0,\sigma^2) N ( 0 , σ 2 ) (根据概率知识,样本量充足时任何分布都是趋向高斯分布)
如果我们已经有了个模型,那么当前标签分布出现的概率是 L = ∏ i = 1 n P ( y i ∣ x i , w i , σ ) L=\prod \limits_{i=1}^n P(y_i|\pmb{x}_i,\pmb{w}_i,\sigma) L = i = 1 ∏ n P ( y i ∣ x x i , w w i , σ )
我们总希望找到一个模型使得 L L L 尽可能得大,所以用最大似然那套理论去估计。
log L = − 1 2 σ 2 ∑ ( y − f ( x , w ) 2 ) + c ( σ ) \log L=-\frac{1}{2\sigma^2}\sum(y-f(\pmb{x},\pmb{w})^2)+c(\sigma) log L = − 2 σ 2 1 ∑ ( y − f ( x x , w w ) 2 ) + c ( σ ) ,所以极大化 L L L 等价于极小化 MSE。
线性模型会有一个缺点。维度足够高时总能学出一个很接近的模型,但是它的过拟合现象十分严重。所以我们用 Ridge Regression 来限制模型的复杂程度。它会对 w \pmb{w} w w 做一个 regularize 操作。
即估价函数改成 J ’ n = ∑ i = 1 n ( y i − x i T w ) 2 + λ ∑ i = 1 p a j 2 J’_n=\sum \limits_{i=1}^n(y_i-\pmb{x}_i^T\pmb{w})^2+\lambda \sum \limits_{i=1}^p a_j^2 J ’ n = i = 1 ∑ n ( y i − x x i T w w ) 2 + λ i = 1 ∑ p a j 2
注意到 min J n ′ \min J'_n min J n ′ 也是可以求出解析解的。∇ J n ′ = − 2 X ( y − X T w ) + 2 λ w \nabla J'_n=-2X(y-X^T\pmb{w})+2\lambda \pmb{w} ∇ J n ′ = − 2 X ( y − X T w w ) + 2 λ w w 所以 w ^ = ( X X T + λ I ) − 1 X y \pmb{\hat w}=(XX^T+\lambda\pmb{I})^{-1}X\pmb{y} w ^ w ^ = ( X X T + λ I I ) − 1 X y y 。Ridge Regression 还有一个好处:X X T + λ I XX^T+\lambda \pmb{I} X X T + λ I I 是正定矩阵,所以 不会出现不满秩无法求解 的情况。
一个更 general 的正则化方法是,加上 λ ∣ a ∣ q \lambda |\pmb{a}|_q λ ∣ a a ∣ q 这一项。 当 q = 1 , 2 , 3 … q=1,2,3 \dots q = 1 , 2 , 3 … 时优化函数是凸的(定义域当然也是凸的),由于凸优化的良好性质,我们总能解出最优的解(即使是数值解)。但是当 q = 0.5 q=0.5 q = 0.5 时就没有那么好的性质了。注意 q = 1 q=1 q = 1 的情况被称为 LASSO (Least Absolute Selection and Shrinkage Operator)。LASSO 是一个重要的优化方法,因为它找到的解是 Sparse 的(很多 w i \pmb{w}_i w w i 容易取为 0 0 0 )。
下面再介绍一下 Logistic Regression :在线性变换的基础上又套了一个 Sigmoid \text{Sigmoid} Sigmoid 函数。
P ( y i = ± 1 ∣ x , a ) = 1 1 + e − y i a T x P(y_i=\pm 1|\pmb{x},\pmb{a})=\frac{1}{1+e^{-y_i\pmb{a}^T\pmb{x}}}
P ( y i = ± 1∣ x x , a a ) = 1 + e − y i a a T x x 1
由于 Sigmoid \text{Sigmoid} Sigmoid 可以把 ( − ∞ , + ∞ ) (-\infty,+\infty) ( − ∞ , + ∞ ) 转化到 ( 0 , 1 ) (0,1) ( 0 , 1 ) ,我们可以认为 LR 学到的就是标签的分布概率。
之前说的贝叶斯模型被称为 Generative Modeling (生成模型),因为该模型表示了从给定输入 X X X 到概率分布 Y Y Y 之间的生成关系。而 Logistic Regression 是正好与之对应的 Discriminative Modeling (判别模型),它会直接学习概率分布,但是不能反映训练数据本身的特性。
现在我们想找一组参数 a \pmb{a} a a ,使得以下式子取到最大(又是最大似然的套路)。
E ( a ) = ∏ i ∈ I 1 1 + e − y i a T x i E(\pmb{a})=\prod \limits_{i \in I} \frac{1}{1+e^{-y_i\pmb{a}^T\pmb{x}_i}}
E ( a a ) = i ∈ I ∏ 1 + e − y i a a T x x i 1
当然在具体训练时,我们会对 E ( a ) E(\pmb{a}) E ( a a ) 取对数,即使得下列式子取到最小。
ln E ( a ) = ∑ i ∈ I ln ( 1 + e − y i a T x i ) \ln E(\pmb{a})=\sum \limits_{i \in I} \ln (1+e^{-y_i\pmb{a}^T\pmb{x}_i})
ln E ( a a ) = i ∈ I ∑ ln ( 1 + e − y i a a T x x i )
下面我们来简要证明 ln E ( a ) \ln E(\pmb{a}) ln E ( a a ) 是凸函数(所以可以直接用 Gradient Descent 解)。
先把 ∑ \sum ∑ 拆开,证明每个部分都是凸函数,凸函数的和还是凸函数。
设 θ i = a T x i \theta_i=\pmb{a}^T\pmb{x}_i θ i = a a T x x i 。根据凸函数的定义,证明 ln E ( a ) \ln E(\pmb{a}) ln E ( a a ) 凸性等价于证明 ln E ( θ i ) \ln E(\theta_i) ln E ( θ i ) 。
所以我们现在想证明 J ( θ ) = ln ( 1 + e − y i θ ) J(\theta)=\ln(1+e^{-y_i\theta}) J ( θ ) = ln ( 1 + e − y i θ ) 是凸函数。
求一阶导 J ′ ( θ ) = − y i e y i θ + 1 J'(\theta)=-\frac{y_i}{e^{y_i\theta}+1} J ′ ( θ ) = − e y i θ + 1 y i ,二阶导 J ′ ′ ( θ ) = e y i θ ( e y i θ + 1 ) 2 = e θ ( e θ + 1 ) 2 ≥ 0 J''(\theta)=\frac{e^{y_i\theta}}{(e^{y_i\theta}+1)^2}=\frac{e^\theta}{(e^\theta+1)^2} \ge 0 J ′′ ( θ ) = ( e y i θ + 1 ) 2 e y i θ = ( e θ + 1 ) 2 e θ ≥ 0
所以 J ( θ i ) J(\theta_i) J ( θ i ) 是凸的,即 ln E ( a ) \ln E(\pmb{a}) ln E ( a a ) 也是凸的。
Model Assessment and Selection
Bias & Variance Decomposition 是模型评价的理论基石。
对于有一个有监督学习 ( x i , y i ) (\pmb{x}_i,y_i) ( x x i , y i ) ,假设我们的模型是 f ( x ) f(\pmb{x}) f ( x x ) ,那么期望的损失函数为:
E ( L ) = ∬ L ( y , f ( x ) ) p ( x , y ) d x d y E(L)=\iint L(y,f(\pmb{x}))~p(\pmb{x},y) d\pmb{x}dy
E ( L ) = ∬ L ( y , f ( x x )) p ( x x , y ) d x x d y
假设损失函数使用平方误差,那么得到的 Expected Prediction Error 是:
E P E ( f ) = ∬ ( y − f ( x ) ) 2 p ( x , y ) d x d y EPE(f)=\iint (y-f(\pmb{x}))^2~p(\pmb{x},y)dxdy
EPE ( f ) = ∬ ( y − f ( x x ) ) 2 p ( x x , y ) d x d y
现在我们想化简这个积分式。把 ( y − f ( x ) ) 2 (y-f(\pmb{x}))^2 ( y − f ( x x ) ) 2 换成 ( y − E ( y ∣ x ) + E ( y ∣ x ) − f ( x ) ) 2 (y-E(y|\pmb{x})+E(y|\pmb{x})-f(\pmb{x}))^2 ( y − E ( y ∣ x x ) + E ( y ∣ x x ) − f ( x x ) ) 2 展开化简
E P E ( f ) = ∫ ( f ( x ) − E ( y ∣ x ) ) 2 p ( x ) d x + ∫ v a r ( y ∣ x ) p ( x ) d x EPE(f)=\int (f(\pmb{x})-E(y|\pmb{x}))^2p(\pmb{x})d\pmb{x} + \int var(y|\pmb{x})p(\pmb{x})d\pmb{x}
EPE ( f ) = ∫ ( f ( x x ) − E ( y ∣ x x ) ) 2 p ( x x ) d x x + ∫ v a r ( y ∣ x x ) p ( x x ) d x x
我们会发现,无论我们怎么选择模型都不可能让 EPE 变为 0 0 0 。
虽然最优的 f ( x ) f(\pmb{x}) f ( x x ) 满足 f ( x ) = E ( y ∣ x ) f(\pmb{x})=E(y|\pmb{x}) f ( x x ) = E ( y ∣ x x ) ,但是实际操作时我们只能从训练数据里构建模型,所以我们学到的 f ( x ) f(\pmb{x}) f ( x x ) 其实是 f ( x ∣ D ) f(\pmb{x}|D) f ( x x ∣ D ) 。重新推导式子后,可以将 EPE 分成以下三个部分:
bias = ∫ { E D ( f ( x ; D ) − E ( y ∣ x ) ) } 2 p ( x ) d x variance = ∫ E D { [ f ( x ; D ) − E D ( x ; D ) ] 2 } p ( x ) d x noise = ∫ v a r ( y ∣ x ) p ( x ) d x \begin{align}
\text{bias} &= \int \{E_D(f(\pmb{x};D)-E(y|\pmb{x}))\}^2p(\pmb{x})d\pmb{x} \\
\text{variance} &= \int E_D\{[f(\pmb{x};D)-E_D(\pmb{x};D)]^2\}p(\pmb{x})d\pmb{x} \\
\text{noise} &= \int var(y|\pmb{x})p(\pmb{x})d\pmb{x}
\end{align}
bias variance noise = ∫ { E D ( f ( x x ; D ) − E ( y ∣ x x )) } 2 p ( x x ) d x x = ∫ E D {[ f ( x x ; D ) − E D ( x x ; D ) ] 2 } p ( x x ) d x x = ∫ v a r ( y ∣ x x ) p ( x x ) d x x
之前说的正则化操作,大的 λ \lambda λ 会导致更大的 bias,小的 λ \lambda λ 会导致更大的 variance。
在模型选择时,常用 Cross-Validation 的方法。将训练数据集划成 k k k 份,每次留一份 i i i 作为 Validation,其它k − 1 k-1 k − 1 份用来训练,挑选 bias 或者 variance 比较小的模型。不同的 Validation 能重复 k k k 次。当训练数据比较少时,可能会用到比较极端的 leave-one-out 方法,即取 k = N k=N k = N 。
Decision Tree 决策树
决策树 (Decision Tree)是一个简单而有效的分类问题的解决方案。训练时,它每次从当前(带标签的)样本中选择一个“方差”最大的属性 a a a ,不同属性值的数据会被分配到不同的分叉里;重复这个操作,直到当前样本的标签均相同或是特征均相同。预测时直接沿着对应分叉往下走。
熵 (entropy)是随机变量不确定性的度量。设 E E E 是离散随机变量,概率分布为 P ( X = x k ) = p k P(X=x_k) = p_k P ( X = x k ) = p k ,则熵:
E n t ( E ) = − ∑ k = 1 K p k log ( p k ) Ent(E)=-\sum \limits_{k=1}^{K} p_k\log(p_k)
E n t ( E ) = − k = 1 ∑ K p k log ( p k )
E n t Ent E n t 越小,E E E 就越稳定。注意到 lim p → 0 + p k log ( p k ) = 0 \lim \limits_{p\to 0^+} p_k\log(p_k)=0 p → 0 + lim p k log ( p k ) = 0 ,所以额外定义 0 log 0 = 0 0 \log 0=0 0 log 0 = 0 。
我们尝试把熵应用到决策树的属性选择上。对于样本 D D D ,设 K K K 是标签总数,n 0 n_0 n 0 是样本总数,n 1 … n k n_1 \dots n_k n 1 … n k 是每个标签对应的样本数。定义样本 D D D 的熵 H ( D ) H(D) H ( D ) 为:
H ( D ) = − ∑ k = 1 K n k n 0 log ( n k n 0 ) H(D)=-\sum \limits_{k=1}^{K} \frac{n_k}{n_0}\log(\frac{n_k}{n_0})
H ( D ) = − k = 1 ∑ K n 0 n k log ( n 0 n k )
H ( D ) H(D) H ( D ) 越小,则决策树节点的“纯度”就越高。但是我们应该根据什么来决定用来划分的属性呢?
如果样本 D D D 选了属性 a a a 作为分支属性,且不同取值有 V V V 个,定义选 a a a 对 D D D 的 信息增益 :
g ( D , a ) = H ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) g(D,a)=H(D)-\sum \limits_{v=1}^V \frac{|D_v|}{|D|}H(D_v)
g ( D , a ) = H ( D ) − v = 1 ∑ V ∣ D ∣ ∣ D v ∣ H ( D v )
显然,g ( D , a ) g(D,a) g ( D , a ) 越大说明使用属性 a a a 进行划分所获得的“纯度提升”越大,著名的 ID3 决策树 就是靠这个决定属性的。注意,该准则对可取值数目较多的属性有所偏好,这种偏好可能带来不良影响。
为了改进上述问题,C4.5算法 引入了 信息增益率 的新准则。
g R ( D , a ) = g ( D , a ) H a ( D ) g_R(D,a)=\frac{g(D,a)}{H_a(D)}
g R ( D , a ) = H a ( D ) g ( D , a )
这里的 H a ( D ) H_a(D) H a ( D ) 和之前的 H ( D ) H(D) H ( D ) 含义不一样:H ( D ) H(D) H ( D ) 是针对标签的信息熵,而 H a ( D ) H_a(D) H a ( D ) 是针对属性 a a a 划分的信息熵。引入的 H a ( D ) H_a(D) H a ( D ) 有点像平衡(惩罚)因子,因为分叉多了之后 H ( a ) H(a) H ( a ) 也会偏高,可抑制原来的信息增益带来的负面效果。在实际测试中,信息增益率 比 信息增益 效果更好一些。
此外,CART 算法 用 基尼不纯度 (gini impurity) 来构建决策树的划分函数。基尼指数就是独立取值两次后不相等的概率。设 E E E 是离散随机变量,概率分布为 P ( X = x k ) = p k P(X=x_k) = p_k P ( X = x k ) = p k ,则:
I ( E ) = ∑ k = 1 K p i ∑ k ≠ i p k = 1 − ∑ k = 1 K p k 2 I(E)=\sum \limits_{k=1}^K p_i \sum \limits_{k \ne i}p_k=1-\sum \limits_{k=1}^K p_k^2
I ( E ) = k = 1 ∑ K p i k = i ∑ p k = 1 − k = 1 ∑ K p k 2
推广到决策树,定义属性 a a a 对样本 D D D 的基尼指数增益为:
g I ( D , a ) = I ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ I ( D v ) g_I(D,a)=I(D)-\sum \limits_{v=1}^V \frac{|D_v|}{|D|}I(D_v)
g I ( D , a ) = I ( D ) − v = 1 ∑ V ∣ D ∣ ∣ D v ∣ I ( D v )
更加优美的是:基尼不纯度增益 和 信息熵增益 还有神秘的联系!当 p p p 很小的时候,log ( p ) ∼ p − 1 \log(p) \sim p-1 log ( p ) ∼ p − 1 ,于是 − p log p ∼ p ( 1 − p ) -p \log p \sim p(1-p) − p log p ∼ p ( 1 − p ) !也就是说,我们可以用基尼指数近似熵里的对数来加速。
单一的决策树往往会遇到过拟合的问题。所以我们往往会留下一部分数据作为 Validation,同时在构建决策树时利用它们做一些 剪枝 。下面是两个有效的剪枝技巧:
Prepruning 预剪枝:在某个点决定完分支后,我们把 Validation 的数据分别用不分支(即直接在这个点投票决定统一的预测)和分支验证一遍。如果前者优于后者,我们就在这个节点进行剪枝。
Postpruning 后剪枝:我们先建好整棵搜索树,在回溯的时候同时维护当前子树的 Validation 结果。如果某个点直接投票的答案优于产生分支的答案(即子树结果和),我们就在这个节点进行剪枝。
预剪枝的剪枝本身带有估计的成分(因为下一层其实还没有继续分叉),剪枝力度往往很大;实际中一般会采取比较稳定的后剪枝方法。下面是我对 Titanic 数据集进行决策树剪枝的实验结果:
方法
总运行时间 s
平均节点
平均训练集正确率 %
平均测试集正确率 %
No pruning
3.85
217.7
86.11
79.43
Prepruning
1.84
14.6
79.88
78.47
Postpruning
2.91
44.4
81.87
80.76
Ensemble Model
我们通常用 committee 来形容多个模型集成的方法。首先来证明一下集成模型的有效性。
假设 h ( x ) h(x) h ( x ) 是真实模型,y m ( x ) y_m(x) y m ( x ) 是我们给出的单一预测模型。定义继承模型 y c o m = 1 M y m ( x ) y_{com}=\frac{1}{M}y_m(x) y co m = M 1 y m ( x ) 。
(这里待续…)
那么如何来科学地生成 M M M 个不同的小模型呢?有以下两种方法:
Bagging (B ootstrap Agg regating ):通过采样多组数据构建不同的模型。这些 Base Learners 之间需要略微不同,且允许有过拟合的现象发生。Bagging 分为以下两个阶段:
Bootstrap Sampling :每次从 N N N 组数据里随机抽取 D D D 组构建模型并放回。
Aggregating :每一个模型都训练一套参数,并把它们的预测结果聚合起来。
Boosting :通过修改每组数据的权重来构建不同的模型。
决策树是一个很好的 Base Learner,而用决策树来 Bagging 的方法被称为 随机森林(Random Forest) 。为了保证每次构建的决策树之间有更多的特异性,在每次决定分支时,我们往往先在总特征 F F F 里面随机选择一个子集 f f f ,并在 f f f 里寻找最优的特征。经验性地来说,一般分类问题 ∣ f ∣ = ∣ F ∣ |f|=\sqrt{|F|} ∣ f ∣ = ∣ F ∣ 回归问题 ∣ f ∣ = ∣ F ∣ / 3 |f|=|F|/3 ∣ f ∣ = ∣ F ∣/3 。
AdaBoost 全称 Adaptive Boosting ,是 Boosting 最经典的实践。首先我们先介绍它的流程。
有 n n n 个训练集样本 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(x_1,y_1),\dots,(x_n,y_n)\} {( x 1 , y 1 ) , … , ( x n , y n )} ,其中 y i ∈ { − 1 , 1 } y_i \in \{-1, 1\} y i ∈ { − 1 , 1 } 。
最开始设参数组 w i 1 = 1 w^1_i=1 w i 1 = 1 ,其中 w i m w^m_i w i m 表示第 m m m 轮时每个样本的权重。
按顺序迭代 T T T 轮,假设当前是第 m m m 轮:
训练一个分类器 g m ( x ) g_m(x) g m ( x ) 使得在当前权重下的训练集误差最小,即 ϵ m = min ∑ w i m [ g m ( x i ) ≠ y i ] \epsilon_m=\min \sum w^m_i [g_m(x_i)\ne y_i] ϵ m = min ∑ w i m [ g m ( x i ) = y i ] 。
设第 m m m 轮的分类器的权重为 α m = 1 2 ln ( 1 − ϵ m ϵ m ) \alpha_m=\frac{1}{2}\ln(\frac{1-\epsilon_m}{\epsilon_m}) α m = 2 1 ln ( ϵ m 1 − ϵ m ) ,总集成模型为 F m ( x ) = F m − 1 ( x ) + α m g m ( x ) F_m(x)=F_{m-1}(x)+\alpha_mg_m(x) F m ( x ) = F m − 1 ( x ) + α m g m ( x ) 。
更新下一轮样本权值,w i m + 1 = w i m exp ( − y i α m g m ( x i ) ) w^{m+1}_i=w^m_i\exp(-y_i\alpha_mg_m(x_i)) w i m + 1 = w i m exp ( − y i α m g m ( x i )) 。
F T ( x ) F_T(x) F T ( x ) 就是最后的 AdaBoost 集成模型。注意我们只关心 w i m w^m_i w i m 的相对大小,所以每轮开始前可以对其归一化。
下面我们来说明,为什么 AdaBoost 的流程是这样的,里面的函数是如何推出来的。
设 E m = ∑ exp ( − y i F m ( x i ) ) E_m=\sum \exp(-y_iF_m(x_i)) E m = ∑ exp ( − y i F m ( x i )) 为 AdaBoost 的参考损失函数。可以证明,以该损失函数为导向,并在集成规则是 F m ( x ) = F m − 1 ( x ) + α m g m ( x ) F_m(x)=F_{m-1}(x)+\alpha_mg_m(x) F m ( x ) = F m − 1 ( x ) + α m g m ( x ) 的情况下,按上述流程取 w i m , α m w^m_i,\alpha_m w i m , α m 并训练分类器 g m ( x ) g_m(x) g m ( x ) 能使 F m ( x ) F_m(x) F m ( x ) 最优。
E m = ∑ i = 1 n exp ( − y i F m ( x i ) ) = ∑ i = 1 n exp ( − y i F m − 1 ( x i ) ) ⋅ exp ( − y i α m g m ( x i ) ) E_m=\sum \limits_{i=1}^n \exp(-y_iF_m(x_i))=\sum \limits_{i=1}^n \exp(-y_iF_{m-1}(x_i)) \cdot \exp(-y_i\alpha_mg_m(x_i))
E m = i = 1 ∑ n exp ( − y i F m ( x i )) = i = 1 ∑ n exp ( − y i F m − 1 ( x i )) ⋅ exp ( − y i α m g m ( x i ))
所以我们设 $$w^m_i=\exp(-y_i\alpha_mg_m(x_i))$$ 来简化 E m E_m E m 的表达式。
E m = ∑ i = 1 n w i m exp ( − y i α m g m ( x i ) ) = ∑ y i = g m ( x i ) w i m exp ( − α m ) + ∑ y i ≠ g m ( x i ) w i m exp ( α m ) ( 1 ) = ∑ i = 1 n w i m exp ( − α m ) + ∑ y i ≠ g m ( x i ) w i m ( exp ( α m ) − exp ( − α m ) ) ( 2 ) \begin{align}
E_m&=\sum \limits_{i=1}^n w^m_i\exp(-y_i\alpha_mg_m(x_i)) \quad\\
&=\sum \limits_{y_i = g_m(x_i)}w^m_i\exp(-\alpha_m)+\sum \limits_{y_i \ne g_m(x_i)}w^m_i\exp(\alpha_m) \quad (1)\\
&=\sum \limits_{i=1}^nw^m_i\exp(-\alpha_m)+\sum \limits_{y_i \ne g_m(x_i)}w^m_i(\exp(\alpha_m)-\exp(-\alpha_m)) \quad (2)
\end{align}
E m = i = 1 ∑ n w i m exp ( − y i α m g m ( x i )) = y i = g m ( x i ) ∑ w i m exp ( − α m ) + y i = g m ( x i ) ∑ w i m exp ( α m ) ( 1 ) = i = 1 ∑ n w i m exp ( − α m ) + y i = g m ( x i ) ∑ w i m ( exp ( α m ) − exp ( − α m )) ( 2 )
对于公式1,我们把 g m ( x i ) g_m(x_i) g m ( x i ) 和 w i m w^m_i w i m 固定,把 E m E_m E m 看做关于 α m \alpha_m α m 的函数以确定 α m \alpha_m α m 该如何取值。
d E m / d α m = 0 ∑ y i = g m ( x i ) w i m exp ( − α m ) = ∑ y i ≠ g m ( x i ) w i m exp ( α m ) − α m + ln ( ∑ y i = g m ( x i ) w i m ) = α m + ln ( ∑ y i ≠ g m ( x i ) w i m ) α m = 1 2 ln ( ∑ y i ≠ g m ( x i ) w i m ∑ y i = g m ( x i ) w i m ) \begin{align}
dE_m/d\alpha_m&=0 \\
\sum_{y_i = g_m(x_i)}w^m_i\exp(-\alpha_m)&=\sum_{y_i \ne g_m(x_i)}w^m_i\exp(\alpha_m) \\
-\alpha_m+\ln(\sum_{y_i = g_m(x_i)}w^m_i)&=\alpha_m+\ln(\sum_{y_i \ne g_m(x_i)}w^m_i) \\
\alpha_m&=\frac{1}{2}\ln(\frac{\sum_{y_i \ne g_m(x_i)}w^m_i}{\sum_{y_i = g_m(x_i)}w^m_i})
\end{align}
d E m / d α m y i = g m ( x i ) ∑ w i m exp ( − α m ) − α m + ln ( y i = g m ( x i ) ∑ w i m ) α m = 0 = y i = g m ( x i ) ∑ w i m exp ( α m ) = α m + ln ( y i = g m ( x i ) ∑ w i m ) = 2 1 ln ( ∑ y i = g m ( x i ) w i m ∑ y i = g m ( x i ) w i m )
对于公式2,我们把 α m \alpha_m α m 和 w i m w^m_i w i m 固定,本质上就是想让 ∑ y i ≠ g m ( x i ) w i m \sum \limits_{y_i \ne g_m(x_i)}w^m_i y i = g m ( x i ) ∑ w i m 最小,所以会对新带权样本做分类 g m ( x ) g_m(x) g m ( x ) 。
以上分析摘自 Wikipedia 有关 AdaBoost 的介绍 ,下面再引入一个蔡登教授课程中的推导角度。
我们用另一个角度来解释 w i m w^m_i w i m 和 g m ( x ) g_m(x) g m ( x ) 的关系。观察 g m ( x ) g_m(x) g m ( x ) 所有猜错的样本,即 ∑ i = 1 n w i m [ g m ( i ) ≠ y i ] \sum_{i=1}^n w^m_i [g_m(i) \ne y_i] ∑ i = 1 n w i m [ g m ( i ) = y i ] 。在集成模型的思想中,我们希望 g m + 1 ( x ) g_{m+1}(x) g m + 1 ( x ) 能弥补一些 g m ( x ) g_m(x) g m ( x ) 犯的错,所以设计新的样本权重 w i m + 1 w^{m+1}_i w i m + 1 。为了能让 g m ( x ) g_m(x) g m ( x ) 和 g m + 1 ( x ) g_{m+1}(x) g m + 1 ( x ) 尽量 diverse,我们构造新的 w i m + 1 w^{m+1}_i w i m + 1 使得原来的 g m ( x ) g_m(x) g m ( x ) 在 w i m + 1 w^{m+1}_i w i m + 1 环境下的正确率只有 50 % 50\% 50% :
∑ i = 1 n w i m + 1 [ g m ( i ) ≠ y i ] ∑ i = 1 n w i m + 1 [ g m ( i ) ≠ y i ] + ∑ i = 1 n w i m + 1 [ g m ( i ) = y i ] = 1 2 \frac{\sum_{i=1}^n w^{m+1}_i[g_m(i) \ne y_i]}{\sum_{i=1}^n w^{m+1}_i[g_m(i) \ne y_i]+\sum_{i=1}^n w^{m+1}_i[g_m(i) = y_i]}=\frac{1}{2}
∑ i = 1 n w i m + 1 [ g m ( i ) = y i ] + ∑ i = 1 n w i m + 1 [ g m ( i ) = y i ] ∑ i = 1 n w i m + 1 [ g m ( i ) = y i ] = 2 1
大部分情况下 ∑ i = 1 n w i m [ g m ( i ) ≠ y i ] \sum_{i=1}^n w^m_i [g_m(i) \ne y_i] ∑ i = 1 n w i m [ g m ( i ) = y i ] 比较小,上面这种构造相当于放大了 g m ( i ) ≠ y i g_m(i) \ne y_i g m ( i ) = y i 处的 w i m + 1 w^{m+1}_i w i m + 1 至总体的 50 % 50\% 50% ,希望 g m + 1 ( x ) g_{m+1}(x) g m + 1 ( x ) 能更好地从错误样本中学习。如果我们把之前证明里的 w i m + 1 = w i m exp ( − y i α m g m ( x i ) ) w^{m+1}_i=w^{m}_i\exp(-y_i\alpha_mg_m(x_i)) w i m + 1 = w i m exp ( − y i α m g m ( x i )) 和 α m = 1 2 ln ( 1 − ϵ m ϵ m ) \alpha_m=\frac{1}{2}\ln(\frac{1-\epsilon_m}{\epsilon_m}) α m = 2 1 ln ( ϵ m 1 − ϵ m ) 带入上述构造的等式中,等式恰好成立——这进一步说明 AdaBoost 算法的有效性。
Topic Model
主题模型多用于文本分析,比如判断一篇文档的主题。或者说给出一个文档集合和一些 queries,每次要回答与当前 query 最相近的页面(搜索引擎)。
注意,我们在这里探讨的主题模型属于 Bag‐of‐Words(词袋模型),即我们不考虑单词出现的顺序问题,只考虑整篇文档里单词的概率分布。这样可以简化问题。
一个最直接的做法是 Salton’s Vector Space Model 。对于每一个文档,统计各个单词出现的次数,并用一个向量去描述它——该向量的长度就是字典大小。我们可以开一个 w e i g h t weight w e i g h t 向量去给每个单词加权,最后用 cos 相似度去衡量两个文档之间的相似程度。
这样做有什么问题呢?topics 和 words 之间可能会存在不匹配的现象!
一词多义会让两个远离向量的距离变小
同义词会让两个相近向量的距离变大
在 Language Model Paradigm 里,我们应用贝叶斯公式去完成文档查询。设 R d ∈ { 0 , 1 } R_d \in \{0,1\} R d ∈ { 0 , 1 } 表示文档 d d d 和当前询问 q q q 是否有关。我们知道 P ( R d = 1 ∣ q ) ∝ P ( q ∣ R d = 1 ) P ( R d = 1 ) P(R_d=1|q) \propto P(q|R_d=1)P(R_d=1) P ( R d = 1∣ q ) ∝ P ( q ∣ R d = 1 ) P ( R d = 1 ) ,所以可以用后两者去估计前者。
Prior P ( R d = 1 ) P(R_d=1) P ( R d = 1 ) 对应搜索引擎技术里的一个重要概念——Page Rank 。
Likelihood P ( q ∣ R d = 1 ) P(q|R_d=1) P ( q ∣ R d = 1 ) 就是我们要从数据中训练出来的。
一次询问 q q q 通常包含若干个词,即 q = ( w 1 , w 2 , … , w q ) q=(w_1,w_2,\dots,w_q) q = ( w 1 , w 2 , … , w q ) 。此时我们又要像以前那样,假设词和词之间是独立同分布的 ,所以 P ( q ∣ R d = 1 ) = ∏ w ∈ q P ( w ∣ d ) P(q|R_d=1)=\prod \limits_{w \in q}P(w|d) P ( q ∣ R d = 1 ) = w ∈ q ∏ P ( w ∣ d ) ,我们要估计的核心就是 P ( w ∣ d ) P(w|d) P ( w ∣ d ) 。
一个 Naive 的尝试是:取 P ^ ( w ∣ d ) = n ( d , w ) ∑ w ′ n ( d , w ′ ) \hat P(w|d)=\frac{n(d,w)}{\sum _{w'} n(d,w')} P ^ ( w ∣ d ) = ∑ w ′ n ( d , w ′ ) n ( d , w ) ,即直接用每个单词(在训练数据)出现的频率去估计。但是这会遇到严重的 zero frequency 问题,当我们训练数据不足时会有很大的影响。
下面介绍一下经典的 Probabilistic Latent Semantic Analysis 方法。在 Document 和 Vocabulary 之间添加一个新的关系 Topic。我们认为一篇文档里的 n n n 个单词是按这样的方法独立生成的:每次带权随机一个和这个文档有关的 Topic z z z ,然后再带权随机一个该 Topic 下的单词 w w w ,即 P ( w ∣ d ) = ∑ z P ( w ∣ z ) P ( z ∣ d ) P(w|d)=\sum \limits_z{P(w|z)P(z|d)} P ( w ∣ d ) = z ∑ P ( w ∣ z ) P ( z ∣ d ) 。
这样做有什么好处呢?本来我们需要求一个 N × M N \times M N × M 的参数矩阵,表示文档 i i i 下单词 j j j 出现的概率,但是这个矩阵可能很大。现在我们引入了 K K K 个 Topic,只要分别估计 N × K N \times K N × K 和 K × M K \times M K × M 两个参数矩阵就行。
考虑用最大似然估计去求参数。对于一篇文档,当前单词集合出现的概率是:
P ( w ∣ d ) = ∑ z P ( w ∣ z ; θ ) P ( z ∣ d ; π ) P(w|d)=\sum \limits_{z} P(w|z;\theta)P(z|d;\pi)
P ( w ∣ d ) = z ∑ P ( w ∣ z ; θ ) P ( z ∣ d ; π )
我们需要估计参数 θ \theta θ 和 π \pi π 。它的对数似然函数如下:
l ( θ , π ; N ) = ∑ d , w n ( d , w ) log ( ∑ z = 1 K P ( w ∣ z ; θ ) P ( z ∣ d ; π ) ) l(\theta,\pi;N)=\sum \limits_{d,w}n(d,w)\log(\sum \limits_{z=1}^K P(w|z;\theta)P(z|d;\pi))
l ( θ , π ; N ) = d , w ∑ n ( d , w ) log ( z = 1 ∑ K P ( w ∣ z ; θ ) P ( z ∣ d ; π ))
注意这个 l ( θ , π ; N ) l(\theta,\pi;N) l ( θ , π ; N ) 不是凸函数,我们要使用 Expectation Maximization 方法来求、EM 算法采用迭代的方式,专门用来求解包含“隐含变量”或者“缺失数据”的概率模型参数估计问题。
首先我们要明白,估计参数 θ \theta θ 和 π \pi π ,本质上就是求 N × K N\times K N × K 和 K × M K \times M K × M 两个矩阵里的参数。在 EM 算法开始前,我们先随机生成这些参数,然后通过重复以下两个步骤来不断迭代。
E-step :我们可以利用当前的结果计算最新的后验:
P ( z k ∣ d i , w j ) = P ( w j ∣ z k ) P ( z k ∣ d i ) ∑ l = 1 K P ( w j ∣ z l ) P ( z l ∣ d i ) P\left(z_{k} | d_{i}, w_{j}\right)=\frac{P\left(w_{j} | z_{k}\right) P\left(z_{k} | d_{i}\right)}{\sum_{l=1}^{K} P\left(w_{j} | z_{l}\right) P\left(z_{l} | d_{i}\right)}
P ( z k ∣ d i , w j ) = ∑ l = 1 K P ( w j ∣ z l ) P ( z l ∣ d i ) P ( w j ∣ z k ) P ( z k ∣ d i )
M-step
利用这些后验概率修正最大化函数。
E ( d i , w j , z k ) = ∑ i = 1 N ∑ j = 1 M n ( d i , w j ) ∑ k = 1 K P ( z k ∣ d i , w j ) log [ P ( w j ∣ z k ) P ( z k ∣ d i ) ] s.t. ∑ j = 1 M p ( w j ∣ z k ) = 1 , ∑ k = 1 K p ( z k ∣ d i ) = 1 E(d_i,w_j,z_k)=\sum_{i=1}^{N} \sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) \sum_{k=1}^{K} P\left(z_{k} | d_{i}, w_{j}\right) \log \left[P\left(w_{j} | z_{k}\right) P\left(z_{k} | d_{i}\right)\right] \\
\text{s.t.}
\sum_{j=1}^{M} p\left(w_{j} | z_{k}\right)=1,\sum_{k=1}^{K} p\left(z_{k} | d_{i}\right)=1
E ( d i , w j , z k ) = i = 1 ∑ N j = 1 ∑ M n ( d i , w j ) k = 1 ∑ K P ( z k ∣ d i , w j ) log [ P ( w j ∣ z k ) P ( z k ∣ d i ) ] s.t. j = 1 ∑ M p ( w j ∣ z k ) = 1 , k = 1 ∑ K p ( z k ∣ d i ) = 1
用拉格朗日乘子法,拉格朗日函数为:
H = E ( d i , w j , z k ) + ∑ k = 1 K τ k ( 1 − ∑ j = 1 M P ( w j ∣ z k ) ) + ∑ i = 1 N ρ i ( 1 − ∑ k = 1 K P ( z k ∣ d i ) ) \mathcal{H}=E(d_i,w_j,z_k)+\sum_{k=1}^{K} \tau_{k}\left(1-\sum_{j=1}^{M} P\left(w_{j} | z_{k}\right)\right)+\sum_{i=1}^{N} \rho_{i}\left(1-\sum_{k=1}^{K} P\left(z_{k} | d_{i}\right)\right)
H = E ( d i , w j , z k ) + k = 1 ∑ K τ k ( 1 − j = 1 ∑ M P ( w j ∣ z k ) ) + i = 1 ∑ N ρ i ( 1 − k = 1 ∑ K P ( z k ∣ d i ) )
对 N K + M K NK+MK N K + M K 个变量分别求偏导,得:
∑ i = 1 N n ( d i , w j ) P ( z k ∣ d i , w j ) − α k P ( w j ∣ z k ) = 0 ∑ j = 1 M n ( d i , w j ) P ( z k ∣ d i , w j ) − β i P ( z k ∣ d i ) = 0 \begin{align}
\sum_{i=1}^{N} n\left(d_{i}, w_{j}\right) P\left(z_{k} | d_{i}, w_{j}\right)-\alpha_{k} P\left(w_{j} | z_{k}\right)&=0\\
\sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) P\left(z_{k} | d_{i}, w_{j}\right)-\beta_{i} P\left(z_{k} | d_{i}\right)&=0
\end{align}
i = 1 ∑ N n ( d i , w j ) P ( z k ∣ d i , w j ) − α k P ( w j ∣ z k ) j = 1 ∑ M n ( d i , w j ) P ( z k ∣ d i , w j ) − β i P ( z k ∣ d i ) = 0 = 0
最终解得新的迭代方程为:
P ( w j ∣ z k ) = ∑ i = 1 N n ( d i , w j ) P ( z k ∣ d i , w j ) ∑ m = 1 M ∑ i = 1 N n ( d i , w m ) P ( z k ∣ d i , w m ) P ( z k ∣ d i ) = ∑ j = 1 M n ( d i , w j ) P ( z k ∣ d i , w j ) n ( d i ) \begin{array}{l}P\left(w_{j} | z_{k}\right)=\frac{\sum_{i=1}^{N} n\left(d_{i}, w_{j}\right) P\left(z_{k} | d_{i}, w_{j}\right)}{\sum_{m=1}^{M} \sum_{i=1}^{N} n\left(d_{i}, w_{m}\right) P\left(z_{k} | d_{i}, w_{m}\right)} \\P\left(z_{k} | d_{i}\right)=\frac{\sum_{j=1}^{M} n\left(d_{i}, w_{j}\right) P\left(z_{k} | d_{i}, w_{j}\right)}{n\left(d_{i}\right)}\end{array}
P ( w j ∣ z k ) = ∑ m = 1 M ∑ i = 1 N n ( d i , w m ) P ( z k ∣ d i , w m ) ∑ i = 1 N n ( d i , w j ) P ( z k ∣ d i , w j ) P ( z k ∣ d i ) = n ( d i ) ∑ j = 1 M n ( d i , w j ) P ( z k ∣ d i , w j )