DennyQi's Log

05 非监督学习

kk-means 算法

下面我们讨论聚类问题(clustering)的算法。给定nnpp维空间上的样本点,如何把它们分为kk类,使得距离相近的点尽量在同一类里?kk-means算法是这样做的:首先我们随机kk个坐标点μ1,,μk\mu_1,\cdots,\mu_k,称为聚类中心(cluster centroids)。对于每个样本点xix_i,我们找到距离xix_i最近的那个聚类中心作为xix_i的类别。具体地,取ci=argminjxiμj2c_i=\arg\min\limits_j \|x_i-\mu_j\|^2。接着,我们调整聚类中心的位置,使每个中心的位置等于当前属于这一类的所有坐标点的均值。具体地,μj=i(1[ci=j]xi)i1[ci=j]\mu_j'=\dfrac{\sum_i (\mathbb{1}[c_i=j]\cdot x_i)}{\sum_i \mathbb{1}[c_i=j]}。得到新的聚类中心之后,我们再次更新cic_i,接着再次更新μj\mu_j,不断重复上述过程。我们期待聚类中心的坐标最终会渐渐收敛,这样就得到了聚类的结果。

kk-means算法一定会收敛吗?大体上来说是肯定的。我们定义distortion function如下:J(c,μ)=i=1nxiμci2J(c,\mu)=\sum\limits_{i=1}^{n}\|x_i-\mu_{c_i}\|^2,表示每个样本点与其对应的聚类中心的距离平方和。我们发现,随着算法的进行这个函数一定是单调递减的:当我们固定μ\mu重新分配cic_i时,每个xix_i都会选择使得xiμci\|x_i-\mu_{c_i}\|最小的cic_i,因此JJ一定减小;当我们固定cic_i重新计算μ\mu时,我们会把聚类中心移到每个类别的均值的位置,这对于每个类都一定会减小距离平方和。综上根据单调有界必收敛,J(c,μ)J(c,\mu)最终一定会收敛到某个值。虽然在某些极端例子中,JJ收敛并不能保证ccμ\mu也收敛,但即便那样聚类中心的位置也可以被认为是基本没有变化了。所以kk-means一般就可以被认为是收敛的。

我们注意到,JJ函数并不是凸函数,因此kk-means得到的可能只是局部最优解,这取决于初始时随机的情况。所以实际应用时,我们一般会多执行几次这个算法,取最优的结果。

期望最大化算法(Expectation-Maximization algorithm, EM)

依然考虑聚类问题。类似高斯判别分析,我们建立这样的模型:假设样本点是根据kk个不同的高斯分布生成的,模型有一个参数向量ϕ\phiϕj\phi_j表示生成第jj类点的概率;有每个类别的期望和协方差矩阵μj,Σj\mu_j,\Sigma_j。我们希望找到这样的ϕ,μ,Σ\phi,\mu,\Sigma,使得样本点这样的分布是参数ϕ,μ,Σ\phi,\mu,\Sigma下概率最大的分布。具体地,我们的假设下的模型生成一列点(u1,,um)(u_1,\cdots,u_m)的概率是i=1mp(uiϕ,μ,Σ)\prod\limits_{i=1}^{m}p(u_i\mid \phi,\mu,\Sigma)。因此我们训练的目标就是最大化i=1np(xiϕ,μ,Σ)\prod\limits_{i=1}^{n}p(x_i\mid \phi,\mu,\Sigma),取对数等价于最大化i=1nlogp(xiϕ,μ,Σ)\sum\limits_{i=1}^{n}\log p(x_i\mid \phi,\mu,\Sigma)。其中,为了计算p(xiϕ,μ,Σ)p(x_i\mid \phi,\mu,\Sigma),必须用到全概率公式枚举所有可能的类别的概率p(xiϕ,μ,Σ)=z=1kp(xiz,μ,Σ)p(z,ϕ)p(x_i\mid \phi,\mu,\Sigma)=\sum\limits_{z=1}^{k}p(x_i\mid z,\mu,\Sigma)p(z,\phi)

遗憾的是,尽管看上去和高斯判别分析很类似,以上目标函数梯度为零的方程却是没有封闭解的。原因在于,我们引入了隐变量zz(latent variable)。如果我们能提前给出每个样本点应该属于哪一类,那么目标函数的求导就和高斯判别分析中一样了,也就有封闭解了。为此,我们每一次先猜测zz,然后代入zz优化得到ϕ,μ,Σ\phi,\mu,\Sigma。接着再次猜测,再次优化,直到猜测收敛位置。这就是EM算法,猜测的过程称为E-step,优化的过程称为M-step。具体地,在E-step中我们不给出每个zz的具体值而是计算分布:wj(i)=p(z=jxi,ϕ,μ,Σ)w_j^{(i)}=p(z=j\mid x_i,\phi,\mu,\Sigma)(这可以直接由多元高斯分布的density表达式计算得到)。在M-step中,仿照高斯判别分析的结果得到ϕj=1ni=1nwj(i)\phi_j=\dfrac{1}{n}\sum\limits_{i=1}^{n}w_j^{(i)}μj=iwj(i)xiiwj(i)\mu_j=\dfrac{\sum\limits_{i} w_j^{(i)}x_i}{\sum\limits_{i} w_j^{(i)}}Σj=iwj(i)(xiμj)(xiμj)iwj(i)\Sigma_j=\dfrac{\sum\limits_{i} w_j^{(i)}(x_i-\mu_j)(x_i-\mu_j)^\top}{\sum\limits_{i} w_j^{(i)}},也即新的类别分布取决于上一阶段每个点位于每种类别的概率之和,新的均值点和方差是上一阶段每个点在该类别上的概率加权平均。重复以上过程直到收敛以后,对于每个样本点输出概率最大的那个高斯分布即可。

主成分分析(Principle component analysis, PCA)

对于高维空间中的样本点(假设是pp维的),它们可能在某些方向上有较大的方差,有些方向上则有较小的方差。如果我们选取若干个两两垂直的方差最大的方向(不妨设kk维),把样本点投影到这kk个方向向量上,我们就可以看作把样本点降到了kk维。由于我们舍弃的是方差最小的方向,我们认为这样做损失的样本信息是较少的。这个降维方法就称为主成分分析。

假设我们有nnpp维的样本点xix_ikk个主方向wiw_i,那么降维的过程可以写作矩阵乘法:[x1xn][w1wk]=[t1tn]\begin{bmatrix}x_1^\top\\\vdots\\x_n^\top\end{bmatrix}\begin{bmatrix}w_1&\cdots &w_k\end{bmatrix}=\begin{bmatrix}t_1^\top\\\vdots\\t_n^\top\end{bmatrix},其中ti=(xi,w1,,xi,wk)t_i=(\lang x_i,w_1\rang,\cdots,\lang x_i,w_k\rang)。我们把上式简记为XW=TXW=T

如何选取主方向呢?首先我们假设所有样本点的期望就落在原点,不然我们可以先做平移。为了选取方差最大的第一主方向w1w_1,我们就是要使得样本点在这个方向上投影的方差(平方和)最大,也即maxi=1nxi,w12\max \sum\limits_{i=1}^{n}\lang x_i,w_1\rang^2,其中w1=1\|w_1\|=1。注意到,i=1nxi,w12=Xw12\sum\limits_{i=1}^{n}\lang x_i,w_1\rang^2=\|Xw_1\|^2,因此等价于最大化(Xw1)2=w1XXw1(Xw_1)^2=w_1^\top X^\top Xw_1w1=1\|w_1\|=1。这等价于maxw1XXw1w12\max\dfrac{w_1^\top X^\top Xw_1}{\|w_1\|^2}。在组合数学中我们学过Rayleigh Quotient,这个最大值就是矩阵XXX^\top X的最大特征值λ1\lambda_1,当w1w_1λ1\lambda_1对应的特征向量时取到。这样我们就找到了第一主方向。接下来要求第二主方向,我们首先所有样本点在w1w_1方向上的分量:x^i=xi(w1xi)w1\hat x_i=x_i-(w_1^\top x_i)w_1。这样所有样本点都与w1w_1垂直了,换言之样本点已经没有w1w_1方向上的维度了。我们再用同样的方法求新的矩阵X^X^\hat X^\top \hat X的最大特征值与特征向量,得到的方向一定是与w1w_1垂直的方向上样本点方差最大的方向, 这就是第二主方向。以此类推,一般地,求第kk主方向的方法是:x^i=xij=1k1(wjxi)wj\hat x_i=x_i-\sum\limits_{j=1}^{k-1}(w_j^\top x_i)w_j,求maxwkX^X^wkwk2\max\dfrac{w_k^\top \hat X^\top \hat X w_k}{\|w_k\|^2}