机器学习与数据挖掘(上)——期末复习
就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。
降维具有如下一些优点:
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。方差越大,则样本在该特征上的差异就越大,因此该特征就越重要。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
问题:如何得到这些包含最大差异性的主成分方向?
通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。
得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。
输入:数据集 X = { x 1 , x 2 , … , x n } X=\{x_1,x_2,\ldots,x_n\} X={x1,x2,…,xn},需要降到K维。
去平均值(即去中心化),即每一位特征减去各自的平均值。
计算协方差矩阵 1 n X X T \frac1nXX^T n1XXT,这里除或不除样本数量 n n n或 n − 1 n-1 n−1,其实对求出的特征向量没有影响。
用特征值分解方法求协方差矩阵 1 n X X T \frac1nXX^T n1XXT的特征值与特征向量
对特征值从大到小排序,选择其中最大的 k k k个。然后将其对应的 k k k个特征向量分别作为行向量组成特征向量矩阵P。
将数据转换到k个特征向量构建的新空间中,即 Y = P X Y=PX Y=PX。
输入:数据集 X = { x 1 , x 2 , … , x n } X=\{x_1,x_2,\ldots,x_n\} X={x1,x2,…,xn},需要降到K维。
去平均值(即去中心化),即每一位特征减去各自的平均值。
计算协方差矩阵 1 n X X T \frac1nXX^T n1XXT,这里除或不除样本数量 n n n或 n − 1 n-1 n−1,其实对求出的特征向量没有影响。
通过 S V D SVD SVD计算协方差矩阵的特征值与特征向量。
对特征值从大到小排序,选择其中最大的 k k k个。然后将其对应的 k k k个特征向量分别作为行向量组成特征向量矩阵P。
将数据转换到k个特征向量构建的新空间中,即 Y = P X Y=PX Y=PX。
假设 m m m个 n n n维数据 ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ) (x^{(1)},x^{(2)},...,x^{(m)}) (x(1),x(2),...,x(m))都已经进行了中心化,即 ∑ i = 1 m x ( i ) = 0 \sum_{i=1}^mx^{(i)}=0 ∑i=1mx(i)=0。经过投影变换后得到的新坐标系为 { w 1 , w 2 , . . . , w n } \{w_1,w_2,...,w_n\} {w1,w2,...,wn},其中 w w w是标准正交基,即 ∥ w ∥ 2 = 1 , w i T w j = 0 \Vert w\Vert_2=1,w_i^Tw_j=0 ∥w∥2=1,wiTwj=0。
如果我们将数据从 n n n维降到 n ′ n' n′维,即丢弃新坐标系中的部分坐标,则新的坐标系为 w 1 , w 2 , . . . , w n ′ {w_1,w_2,...,w_{n′}} w1,w2,...,wn′,样本点 x ( i ) x^{(i)} x(i)在 n ′ n' n′维坐标系中的投影为: z ( i ) = ( z 1 ( i ) , z 2 ( i ) , . . . , z n ′ ( i ) ) T z{^{(i)}}=(z^{(i)}_1,z^{(i)}_2,...,z^{(i)}_{n′})T z(i)=(z1(i),z2(i),...,zn′(i))T.其中, z j ( i ) = w j T x ( i ) z^{(i)}_j=w^T_jx^{(i)} zj(i)=wjTx(i)是 x ( i ) x^{(i)} x(i)在低维坐标系里第 j j j维的坐标。
基于最小投影距离
即样本点到超平面的距离足够近。
如果我们用 z ( i ) z^{(i)} z(i)来恢复原始数据 x ( i ) x^{(i)} x(i),则得到的恢复数据 x ˉ ( i ) = ∑ j = 1 n ′ z j ( i ) w j = W z ( i ) \bar{x}^{(i)}=\sum_{j=1}^{n'}z^{(i)}_jw_j=Wz^{(i)} xˉ(i)=∑j=1n′zj(i)wj=Wz(i),其中, W W W为标准正交基组成的矩阵。
现在我们考虑整个样本集,我们希望所有的样本到这个超平面的距离足够近,即最小化下式:
∑ i = 1 m ∥ x ˉ ( i ) − x ( i ) ∥ 2 2 \sum^m_{i=1}\Vert \bar{x}^{(i)}-x^{(i)}\Vert ^2_2 i=1∑m∥xˉ(i)−x(i)∥22
对该式整理,可以得到:
∑ i = 1 m ∥ x ˉ ( i ) − x ( i ) ∥ 2 2 = ∑ i = 1 m ∥ W z ( i ) − x ( i ) ∥ 2 2 = ∑ i = 1 m ( W z ( i ) ) T ( W z ( i ) ) − 2 ∑ i = 1 m ( W z ( i ) ) T x ( i ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) − 2 ∑ i = 1 m ( z ( i ) ) T W T x ( i ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) − 2 ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = − ∑ i = 1 m ( z ( i ) ) T ( z ( i ) ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = − t r ( W T ( ∑ i = 1 m ( x ( i ) ) ( x ( i ) ) ) T W ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) = − t r ( W T X X T W ) + ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) \begin{aligned} \sum^m_{i=1}\Vert \bar{x}^{(i)}-x^{(i)}\Vert ^2_2&=\sum^m_{i=1}\Vert Wz^{(i)}-x^{(i)}\Vert ^2_2\\ &= \sum^m_{i=1}(Wz^{(i)})^T(Wz^{(i)})-2\sum^m_{i=1}(Wz^{(i)})^Tx^{(i)}+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= \sum^m_{i=1}(z^{(i)})^T(z^{(i)})-2\sum^m_{i=1}(z^{(i)})^TW^Tx^{(i)}+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= \sum^m_{i=1}(z^{(i)})^T(z^{(i)})-2\sum^m_{i=1}(z^{(i)})^T(z^{(i)})+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= -\sum^m_{i=1}(z^{(i)})^T(z^{(i)})+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= -tr\left(W^T\left(\sum^m_{i=1}(x^{(i)})(x^{(i)})\right)^TW\right)+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ &= -tr\left(W^TXX^TW\right)+\sum^m_{i=1}(x^{(i)})^T(x^{(i)})\\ \end{aligned} i=1∑m∥xˉ(i)−x(i)∥22=i=1∑m∥Wz(i)−x(i)∥22=i=1∑m(Wz(i))T(Wz(i))−2i=1∑m(Wz(i))Tx(i)+i=1∑m(x(i))T(x(i))=i=1∑m(z(i))T(z(i))−2i=1∑m(z(i))TWTx(i)+i=1∑m(x(i))T(x(i))=i=1∑m(z(i))T(z(i))−2i=1∑m(z(i))T(z(i))+i=1∑m(x(i))T(x(i))=−i=1∑m(z(i))T(z(i))+i=1∑m(x(i))T(x(i))=−tr⎝⎛WT(i=1∑m(x(i))(x(i)))TW⎠⎞+i=1∑m(x(i))T(x(i))=−tr(WTXXTW)+i=1∑m(x(i))T(x(i))
其中第 ( 1 ) (1) (1)行用到了 x ˉ ( i ) = W z ( i ) \bar{x}^{(i)}=Wz^{(i)} xˉ(i)=Wz(i),第 ( 2 ) (2) (2)行用到了平方和展开,第 ( 3 ) (3) (3)行用到了矩阵转置公式 ( A B ) T = B T A T (AB)^T=B^TAT (AB)T=BTAT和 W T W = I W^TW=I WTW=I,第 ( 4 ) (4) (4)行用到了 z ( i ) = W T x ( i ) z^{(i)}=W^Tx^{(i)} z(i)=WTx(i),第 ( 5 ) (5) (5)行合并同类项,第 ( 6 ) (6) (6)行用到了 z ( i ) = W T x ( i ) z^{(i)}=W^Tx^{(i)} z(i)=WTx(i)和矩阵的迹,第 ( 7 ) (7) (7)行将代数和表达为矩阵形式。
注意到 ∑ i = 1 m ( x ( i ) ) T ( x ( i ) ) \sum^m_{i=1}(x^{(i)})^T(x^{(i)}) ∑i=1m(x(i))T(x(i))是数据集的协方差矩阵,为常量,最小化上式等价于:
arg min W − t r ( W T X X T W ) s . t . W T W = I \underset{W}{\arg \min} -tr(W^TXX^TW) \qquad s.t.W^TW=I Wargmin−tr(WTXXTW)s.t.WTW=I
利用拉格朗日函数得到:
J ( W ) = − t r ( W T X X T W + λ ( W T W − I ) ) J(W)=-tr(W^TXX^TW+\lambda(W^TW-I)) J(W)=−tr(WTXXTW+λ(WTW−I))
对 W W W求导有 − X X T W + λ W = 0 -XX^TW+\lambda W=0 −XXTW+λW=0,即
X X T W = λ W XX^TW=\lambda W XXTW=λW
这样可以更清楚的看出, W W W为 X X T XX^T XXT的 n ′ n' n′个特征向量组成的矩阵,而 λ \lambda λ为 X X T XX^T XXT的若干特征值组成的矩阵,特征值在主对角线上,其余位置为0。当我们将数据集从 n n n维降到 n ′ n' n′维时,需要找到最大的 n ′ n' n′个特征值对应的特征向量。这 n ′ n' n′个特征向量组成的矩阵 W W W即为我们需要的矩阵。对于原始数据集,我们只需要用 z ( i ) = W T x ( i ) z(i)=W^Tx^{(i)} z(i)=WTx(i),就可以把原始数据集降维到最小投影距离的 n ′ n' n′维数据集。
基于最大投影方差
对于任意一个样本 x ( i ) x^{(i)} x(i),在新的坐标系中的投影为 W T x ( i ) W^Tx^{(i)} WTx(i),在新坐标系中的投影方差为 ( x ( i ) ) T W W T x ( i ) (x^{(i)})^TWW^Tx^{(i)} (x(i))TWWTx(i),要使所有的样本的投影方差和最大,也就是最大化 ∑ i = 1 m W T x ( i ) ( x ( i ) ) T W \sum_{i=1}^mW^Tx^{(i)}(x^{(i)})^TW ∑i=1mWTx(i)(x(i))TW的迹,即:
arg min W t r ( W T X X T W ) s . t . W T W = I \underset{W}{\arg \min} tr(W^TXX^TW) \qquad s.t.W^TW=I Wargmintr(WTXXTW)s.t.WTW=I
观察基于最小投影距离的优化目标,可以发现完全一样,只是一个是加负号的最小化,一个是最大化。利用拉格朗日函数得到:
J ( W ) = t r ( W T X X T W + λ ( W T W − I ) ) J(W)=tr(W^TXX^TW+\lambda(W^TW-I)) J(W)=tr(WTXXTW+λ(WTW−I))
对 W W W求导有 X X T W + λ W = 0 XX^TW+\lambda W=0 XXTW+λW=0,即
X X T W = ( − λ ) W XX^TW=(-\lambda) W XXTW=(−λ)W
W W W为 X X T XX^T XXT的 n ′ n' n′个特征向量组成的矩阵,而 − λ -\lambda −λ为 X X T XX^T XXT的若干特征值组成的矩阵,特征值在主对角线上,其余位置为0。当我们将数据集从 n n n维降到 n ′ n' n′维时,需要找到最大的 n ′ n' n′个特征值对应的特征向量。这 n ′ n' n′个特征向量组成的矩阵 W W W即为我们需要的矩阵。对于原始数据集,我们只需要用 z ( i ) = W T x ( i ) z(i)=W^Tx^{(i)} z(i)=WTx(i),就可以把原始数据集降维到最小投影距离的 n ′ n' n′维数据集。
基于奇异值分解
奇异值分解公式中 A = U Σ V T A=U\Sigma V^T A=UΣVT的 V T V^T VT正是我们想要的所有主成分,每个主成分轴对数据集方差的贡献度是依次减少的,对应特征值对角矩阵 Σ \Sigma Σ也是从左上到右下依次减少的。奇异值转换的目的,正是将这些绝大部分信息由靠前的i个主成分轴提供,而越往后所提供的信息越少,从而方便降维。
如欲降维,只需保留前 d d d列主成分,而将后 ( n − d ) (n-d) (n−d)列删去即可,还可以保证大部分信息不被删去,这是奇异值转换之前不能达到的。
概述
KMEANS算法又被成为K均值算法,是一种常用的聚类算法,由于不需要根据给定的训练集训练模型因此是一种无监督学习算法。其本质是根据选定的参数K将数据分类成K类,在聚类过程中从单一样本开始通过不断计算聚类数据的均值来作为整个类的中心进而再将距离此类别中心最近的数据纳入同一类。
通常用作探索性数据分析工具,在一维中,将重估变量量化为k个非均匀桶的好方法,用于语音理解中的声学数据,将波形转换为k类中的一种(称为矢量量化),还用于在老式图形显示设备上选择调色板。
算法原理
1、首先确定一个k值,即我们希望将数据集经过聚类得到k个集合。
2、从数据集中随机选择k个数据点作为质心。
3、对数据集中每一个点,计算其与每一个质心的距离(如欧式距离),离哪个质心近,就划分到那个质心所属的集合。
4、把所有数据归好集合后,一共有k个集合。然后重新计算每个集合的质心。
5、如果新计算出来的质心和原来的质心之间的距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),我们可以认为聚类已经达到期望的结果,算法终止。
6、如果新质心和原质心距离变化很大,需要迭代3~5步骤。
优化目标
min ∑ i = 1 K ∑ x ∈ C i ( C i − x ) 2 \min\sum^K_{i=1}\sum_{x\in C_i}(C_i-x)^2 mini=1∑Kx∈Ci∑(Ci−x)2
注:K是中心点,即簇数目; C i C_i Ci表示每个簇内的中心点, x x x属于每个簇内的样本点;我们的目的是优化每个簇的点使得它到样本中心点的距离是最短的。
求上式的偏导数,使其为0:
C i = 1 ∣ O w n e d B y ( C i ) ∣ C_i=\frac1{\vert OwnedBy(C_i)\vert} Ci=∣OwnedBy(Ci)∣1
也即每个中心是它所拥有的点的质心。
算法性能评估指标
轮廓系数:
S C i = b i − a i max ( b i , a i ) SC_i=\frac{b_i-a_i}{\max(b_i,a_i)} SCi=max(bi,ai)bi−ai
对于每个点 i i i为已聚类数据中的样本, b i b_i bi为 i i i到其他簇群的所有样本的距离最小值, a i a_i ai为 i i i到本身簇的距离平均值,最终计算出所有的样本点的轮廓系数平均值。
S C i SC_i SCi越接近1,说明样本 i i i聚类合理, S C i SC_i SCi接近-1,则说明样本 i i i更应该分类到另外的簇,若接近0,则说明样本 i i i在两个簇的边界上。
优缺点
优点
1、原理简单(靠近中心点) ,实现容易,收敛速度快
2、聚类效果中上(依赖K的选择)
3、空间复杂度 o ( N ) o(N) o(N)时间复杂度 o ( I K N ) o(IKN) o(IKN),N为样本点个数,K为中心点个数,I为迭代次数)
缺点
1、对离群点, 噪声敏感 (中心点易偏移)
2、很难发现大小差别很大的簇及进行增量计算
3、结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)
4、K值需要预先给定,很多情况下K值的估计是非常困难的。
5、对初始选取的质心点是敏感的
K值的选择
肘部法则适用于 K 值相对较小的情况,当选择的k值小于真正的时,k每增加1,cost值就会大幅的减小;当选择的k值大于真正的K时, k每增加1,cost值的变化就不会那么明显。这样,正确的k值就会在这个转折点。
KNN与K-means区别
KNN | K-Means |
---|---|
1. KNN是分类算法 2. 属于监督学习 3. 训练数据集是带label的数据 |
1. K-Means是聚类算法 2. 属于无监督学习 3. 训练数据集是无label数据,杂乱的,经过聚类之后变有序 |
没有明显的前期训练过程,属于memory based learning | 有明显的前期训练过程 |
K的含义:一个样本x,对它进行分类,就从训练数据中,在x附近找到离它最近的K个数据点,这K个数据点中类别c占的个数最多,就把x的label设为c。 | K的含义:K是人工固定好的数字,假设数据集合可以分为K个簇,那么就利用训练数据这K个分类。 |
层次聚类方法
聚类方法 | 两类之间的距离定义 |
---|---|
单联动 | 一个类中的点和另一个类中的点的最小距离 |
全联动 | 一个类中的点和另一个类中的点的最大距离 |
平均联动 | 一个类中的点和另一个类中的点的平均距离 |
质心 | 两类中质心之间的距离,对于单个观测值来说,质心就是变量的值 |
Ward法 | 两个类之间所有变量的方差分析的平方和 |
EM 算法,全称 Expectation Maximization Algorithm。期望最大算法是一种迭代算法,用于含有隐变量(Hidden Variable)的概率参数模型的最大似然估计或极大后验概率估计。
EM 算法的核心思想非常简单,分为两步:Expection-Step 和 Maximization-Step。E-Step 主要通过观察数据和现有模型来估计参数,然后用这个估计的参数值来计算似然函数的期望值;而 M-Step 是寻找似然函数最大化时对应的参数。由于算法会保证在每次迭代之后似然函数都会增加,所以函数最终会收敛。
Jensen不等式
如果 f f f是凸函数, X X X是随机变量,那么: E ( f ( X ) ) ≥ f ( E ( X ) ) E(f(X))\ge f(E(X)) E(f(X))≥f(E(X)) 。当且仅当 X X X是常量时,该式取等号。其中, E ( X ) E(X) E(X)表示 X X X的数学期望。
推导流程
对于n个样本观察数据 x = ( x 1 , x 2 , … , x n ) x=(x_1,x_2,\ldots,x_n) x=(x1,x2,…,xn),找出样本的参数 θ \theta θ,极大化模型分布的对数似然如下:
θ ^ = arg max ∑ i = 1 n log p ( x i ; θ ) \hat{\theta}=\argmax \sum^n_{i=1}\log p(x_i;\theta) θ^=argmaxi=1∑nlogp(xi;θ)
如果我们得到的观察数据有未观察到的隐含数据 z = ( z 1 , z 2 , … , z n ) z=(z_1,z_2,\ldots,z_n) z=(z1,z2,…,zn),即上文中每个样本属于哪个分布是未知的,此时我们极大化模型分布的对数似然函数如下:
θ ^ = arg max ∑ i = 1 n log p ( x i ; θ ) = arg max ∑ i = 1 n log ∑ z i p ( x i , z i ; θ ) \hat{\theta}=\argmax \sum^n_{i=1}\log p(x_i;\theta)=\argmax \sum^n_{i=1}\log \sum_{z_i} p(x_i,z_i;\theta) θ^=argmaxi=1∑nlogp(xi;θ)=argmaxi=1∑nlogzi∑p(xi,zi;θ)
上面这个式子是根据 x i x_i xi的边缘概率计算得来,没有办法直接求出 θ \theta θ。因此需要一些特殊的技巧,使用Jensen不等式对这个式子进行缩放如下:
∑ i = 1 n log ∑ z i p ( x i , z i ; θ ) = ∑ i = 1 n log ∑ z i Q i ( z i ) p ( x i , z i ; θ ) Q i ( z i ) ≥ ∑ i = 1 n ∑ z i Q i ( z i ) log p ( x i , z i ; θ ) Q i ( z i ) \begin{aligned} \sum^n_{i=1}\log \sum_{z_i} p(x_i,z_i;\theta)&=\sum^n_{i=1}\log \sum_{z_i} Q_i(z_i)\frac{p(x_i,z_i;\theta)}{Q_i(z_i)}\\&\ge \sum^n_{i=1}\sum_{z_i} Q_i(z_i)\log \frac{p(x_i,z_i;\theta)}{Q_i(z_i)} \end{aligned} i=1∑nlogzi∑p(xi,zi;θ)=i=1∑nlogzi∑Qi(zi)Qi(zi)p(xi,zi;θ)≥i=1∑nzi∑Qi(zi)logQi(zi)p(xi,zi;θ)
如果要满足Jensen不等式的等号,则有:
p ( x i , z i ; θ ) Q i ( z i ) = c c 为 常 数 \frac{p(x_i,z_i;\theta)}{Q_i(z_i)}=c\qquad c为常数 Qi(zi)p(xi,zi;θ)=cc为常数
由于 Q i ( z i ) Q_i(z_i) Qi(zi)是一个分布,所以满足 ∑ z Q i ( z i ) = 1 \sum_{z}Q_i(z_i)=1 ∑zQi(zi)=1,则 ∑ z p ( x i , z i ; θ ) = c \sum_zp(x_i,z_i;\theta)=c ∑zp(xi,zi;θ)=c。
Q i ( z i ) = p ( x i , z i ; θ ) ∑ z p ( x i , z i ; θ ) = p ( x i , z i ; θ ) p ( x i , θ ) = p ( z i ∣ x i ; θ ) Q_i(z_i)=\frac{p(x_i,z_i;\theta)}{\sum_zp(x_i,z_i;\theta)}=\frac{p(x_i,z_i;\theta)}{p(x_i,\theta)}=p(z_i|x_i;\theta) Qi(zi)=∑zp(xi,zi;θ)p(xi,zi;θ)=p(xi,θ)p(xi,zi;θ)=p(zi∣xi;θ)
至此,我们推出了在固定其他参数 θ \theta θ后, Q i ( z i ) Q_i(z_i) Qi(zi)的计算公式就是后验概率,解决了 Q i ( z i ) Q_i(z_i) Qi(zi)的问题。
如果 Q i ( z i ) = p ( z i ∣ x i ; θ ) Q_i(z_i)=p(z_i|x_i;\theta) Qi(zi)=p(zi∣xi;θ),则使用Jensen得到的公式是我们包含隐藏数据的对数似然函数的一个下界。如果我们能该式这个下界,则也是在极大化我们的对数似然函数。即我们需要最大化下式:
arg max ∑ i = 1 n ∑ z i Q i ( z i ) log p ( x i , z i ; θ ) Q i ( z i ) \argmax \sum^n_{i=1}\sum_{z_i} Q_i(z_i)\log \frac{p(x_i,z_i;\theta)}{Q_i(z_i)} argmaxi=1∑nzi∑Qi(zi)logQi(zi)p(xi,zi;θ)
上式也就是我们的EM算法的 M M M步,解决了 Q i ( z i ) Q_i(z_i) Qi(zi)如何选择的问题,这一步就是 E E E步
算法
输入:观测变量数据 Y Y Y,隐变量数据 Z Z Z,联合分布 P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Z∣θ),条件分布 P ( Z ∣ Y , θ ) P(Z|Y,\theta) P(Z∣Y,θ)
输出:模型参数 θ \theta θ。
选择参数的初值 θ ( 0 ) \theta^{(0)} θ(0),开始迭代;
E E E步:记 θ ( j ) \theta^{(j)} θ(j)维第 i i i次迭代参数 θ \theta θ的估计值,在第 j + 1 j+1 j+1次迭代的 E E E步,计算
Q i ( z i ) = p ( z i ∣ x i , θ ( j ) ) ℓ ( θ , θ ( j ) ) = ∑ i = 1 n ∑ z i Q i ( z i ) log p ( x i , z i ; θ ) Q i ( z i ) \begin{aligned} Q_i(z_i)&=p(z_i|x_i,\theta^{(j)})\\ \ell(\theta,\theta^{(j)})&=\sum^n_{i=1}\sum_{z_i} Q_i(z_i)\log \frac{p(x_i,z_i;\theta)}{Q_i(z_i)} \end{aligned} Qi(zi)ℓ(θ,θ(j))=p(zi∣xi,θ(j))=i=1∑nzi∑Qi(zi)logQi(zi)p(xi,zi;θ)
M M M步:求使 ℓ ( θ , θ ( j ) ) \ell(\theta,\theta^{(j)}) ℓ(θ,θ(j))极大化的 θ \theta θ , 确定第 j + 1 j+1 j+1次迭代的参数的估计值 θ ( j + 1 ) \theta^{(j+1)} θ(j+1)
θ ( j + 1 ) = arg max θ ℓ ( θ , θ ( j ) ) \theta^{(j+1)}=\underset{\theta}{\argmax} \quad \ell(\theta,\theta^{(j)}) θ(j+1)=θargmaxℓ(θ,θ(j))
重复第 (2) 步和第 (3) 步,直到收敛。
传统EM算法对初始值敏感,聚类结果随不同的初始值而波动较大。总的来说,EM算法收敛的优劣很大程度上取决于其初始参数。
EM算法可以保证收敛到一个稳定点,即EM算法是一定收敛的。但是却不能保证收敛到全局的极大值点,因此它是局部最优的算法,当然,如果我们的优化目标 ℓ ( θ , θ ( l ) ) \ell(\theta,\theta^{(l)}) ℓ(θ,θ(l))是凸的,则EM算法可以保证收敛到全局最大值,这点和梯度下降法这样的迭代算法相同。
高斯混合模型是一种概率式的聚类方法,它假定所有的数据样本 x x x由 k k k个混合多元高斯分布组成的混合分布生成。
p ( x ) = ∑ i = 1 k α i × p ( x ∣ μ i , Σ i ) p(x)=\sum^k_{i=1}\alpha_i\times p(x|\mu_i,\Sigma_i) p(x)=i=1∑kαi×p(x∣μi,Σi)
其中 p ( x ∣ μ i , Σ i ) p(x|\mu_i,\Sigma_i) p(x∣μi,Σi)为服从高斯分布的 n n n维随机向量 x x x的概率密度函数:
p ( x ∣ μ i , Σ i ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ i ) T Σ i − 1 ( x − μ i ) p(x|\mu_i,\Sigma_i)=\frac{1}{(2\pi)^\frac{n}{2}\vert\Sigma|^\frac12}e^{-\frac12(x-\mu_i)^T\Sigma^{-1}_i(x-\mu_i)} p(x∣μi,Σi)=(2π)2n∣Σ∣211e−21(x−μi)TΣi−1(x−μi)
其中 μ \mu μ是 n n n维均值向量, Σ \Sigma Σ是 n × n n\times n n×n的协方差矩阵, α i > 0 \alpha_i>0 αi>0为相应的混合系数, ∑ i = 1 k α i = 1 \sum^k_{i=1}\alpha_i=1 ∑i=1kαi=1。
利用GMM进行聚类的过程是利用GMM生成数据样本的“逆过程”:
给定聚类簇数 k k k,通过给定的数据集,以某一种参数估计的方法,推导出每一个混合成分的参数:均值向量 μ \mu μ,协方差矩阵 Σ \Sigma Σ,和混合系数 α \alpha α。每一个多元高斯分布成分即对应于聚类后的一个簇。
高斯混合模型在训练时使用了极大似然估计法,最大化以下对数似然函数:
L = log ∏ j = 1 m p ( x ) = ∑ j = 1 m log ∑ i = 1 k α i × p ( x ∣ μ i , Σ i ) L=\log \prod_{j=1}^{m}p(x)=\sum^m_{j=1}\log \sum^k_{i=1}\alpha_i\times p(x|\mu_i,\Sigma_i) L=logj=1∏mp(x)=j=1∑mlogi=1∑kαi×p(x∣μi,Σi)
若参数 { ( α i , μ i , Σ i ) ∣ ( 1 ≤ i ≤ k ) } \{(\alpha_i,\mu_i,\Sigma_i)|(1\le i\le k)\} {(αi,μi,Σi)∣(1≤i≤k)}能使对数似然函数最大化,则由 ∂ L ∂ μ i = 0 \frac{\partial L}{\partial \mu_i}=0 ∂μi∂L=0有
∑ j = 1 m α i ⋅ p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ i ) ( x j − μ i ) = 0 \sum^m_{j=1}\frac{\alpha_i\cdot p(x_j|\mu_i,\Sigma_i)}{\sum^k_{l=1}\alpha_l\cdot p(x_j|\mu_l,\Sigma_i)}(x_j-\mu_i)=0 j=1∑m∑l=1kαl⋅p(xj∣μl,Σi)αi⋅p(xj∣μi,Σi)(xj−μi)=0
令
γ j i = α i ⋅ p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ i ) \gamma_{ji}=\frac{\alpha_i\cdot p(x_j|\mu_i,\Sigma_i)}{\sum^k_{l=1}\alpha_l\cdot p(x_j|\mu_l,\Sigma_i)} γji=∑l=1kαl⋅p(xj∣μl,Σi)αi⋅p(xj∣μi,Σi)
表示样本 x j x_j xj和由第 i i i个混合成分生成的后验概率。则
μ i = ∑ j = 1 m ( γ j i ⋅ x j ) ∑ j = 1 m γ j i \mu_i=\frac{\sum^m_{j=1}(\gamma_{ji\cdot x_j})}{\sum^m_{j=1}\gamma_{ji}} μi=∑j=1mγji∑j=1m(γji⋅xj)
即各混合成分的均值可通过样本加权平均来估计,样本权重是每个样本属于该成分的后验概率。
类似的,由 ∂ L ∂ Σ i = 0 \frac{\partial L}{\partial \Sigma_i}=0 ∂Σi∂L=0有
Σ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i \Sigma_i=\frac{\sum^m_{j=1}\gamma_{ji}(x_j-\mu_i)(x_j-\mu_i)^T}{\sum^m_{j=1}\gamma_{ji}} Σi=∑j=1mγji∑j=1mγji(xj−μi)(xj−μi)T
对于混合系数 α i \alpha_i αi除了要最大化对数似然函数,还需满足 α i ≥ 0 , ∑ i = 1 k α i = 1 \alpha_i\ge0,\sum^k_{i=1}\alpha_i=1 αi≥0,∑i=1kαi=1,考虑 L L L的拉格朗日形式
L + λ ( ∑ i = 1 k α i − 1 ) L+\lambda(\sum^k_{i=1}\alpha_i-1) L+λ(i=1∑kαi−1)
其中 λ \lambda λ为拉格朗日乘子,令上式对 α i \alpha_i αi的导数为0,有
∑ j = 1 m p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j ∣ μ l , Σ l ) + λ = 0 \sum^m_{j=1}\frac{p(x_j|\mu_i,\Sigma_i)}{\sum^k_{l=1}\alpha_l\cdot p(x_j|\mu_l,\Sigma_l)}+\lambda=0 j=1∑m∑l=1kαl⋅p(xj∣μl,Σl)p(xj∣μi,Σi)+λ=0
两边同时乘以 α i \alpha_i αi,对所有样本求和可知 λ = − m \lambda=-m λ=−m,有
α i = 1 m ∑ j = 1 m γ j i \alpha_i=\frac1m\sum^m_{j=1}\gamma_{ji} αi=m1j=1∑mγji
优缺点
优点
投影后样本点不是得到一个确定的分类标记,而是得到每个类的概率
不仅可以用在聚类上,也可以用在概率密度估计上
缺点
当每个混合模型没有足够多的点时,估算协方差变得困难起来,同时算法会发散并且找具有无穷大似然函数值的解,除非人为地对协方差进行正则化。
GMM每一步迭代的计算量比较大,大于k-means
GMM的求解办法基于EM算法,因此有可能陷入局部极值,这和初始值的选取十分相关
推荐系统是一种帮助用户发现感兴趣的信息的方式,在推荐系统出现之前,传统的通过直接展现信息、搜索、分类来发现信息的方式都有一定的短板和局限。
推荐系统主要有两个局限,第一是需要信息量过载,如果信息量很少直接展现信息就可以了,就不需要推荐系统了;第二是需要用户没有明确目的,因为用户如果有明确目的直接通过搜索或分类来找到信息就可以了,也不需要推荐系统。
协同过滤
基于用户的协同过滤
基于用户的协同过滤推荐算法先使用统计技术寻找与目标用户有相同喜好的“邻居”,然后根据目标用户的邻居的行为,向目标用户进行推荐。基本原理就是利用用户访问行为的相似性来互相推荐用户可能感兴趣的资源。在一般应用中采用计算“k近邻”,然后基于这K个邻居的历史偏好信息,为当前用户进行推荐。
实现的时候一般还是将问题分解为三步:计算用户之间的相似度;根据用户的相似度和用户的历史行为填补User-Item评分矩阵;根据评分矩阵进行推荐(选高分)。
基于物品的协同过滤
给用户推荐那些和他们之前喜欢的物品相似的物品。
实现的时候主要分为三步:计算物品之间的相似度;根据物品的相似度和用户的历史行为填补User-Item评分矩阵;根据评分矩阵进行推荐(选高分)。
基于模型的协同过滤
ItemCF和UserCF可以被归为基于记忆的模型,即依赖简单的相似性度量(比如余弦相似性、皮尔森相关系数等)来把相似的用户或物品匹配起来。如果有一个矩阵,那么其中每一行是一个用户,每一列代表一个物品,那么基于记忆的方法就是对这一矩阵的行或列使用相似性度量来获得一个相似度值,进而推荐。
们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。
对于这个问题,用机器学习的思想来建模解决,主流的方法可以分为:用关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经网络,图模型以及隐语义模型等来解决。
基于记忆的CF利用简单的相似性度量,以及线性加权组合进行填补。而基于模型的CF则利用各种更复杂的模型或方法,对UI矩阵进行填补,比如矩阵分解、隐向量的思想(隐语义模型)、SVD、SVD++等。
基于内容的推荐
它根据用户过去喜欢的产品(本文统称为 item),为用户推荐和他过去喜欢的产品相似的产品。例如,一个推荐饭店的系统可以依据某个用户之前喜欢很多的烤肉店而为他推荐烤肉店。 CB最早主要是应用在信息检索系统当中,所以很多信息检索及信息过滤里的方法都能用于CB中。
CB的过程一般包括以下三步:
项目表示:为每个item抽取出一些特征(也就是item的content了)来表示此item;
特征学习:利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);
推荐生产:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item。
利用TF-IDF将文本信息转化为特征向量
基于知识的推荐
如果说CB和CF像通用搜索引擎的话,KB好比某个领域的垂直搜索引擎,可以提供该领域的特殊需求,包括专业性的优质特征,帮助提高搜索引擎在特定领域的服务。
基于知识的推荐,也更容易满足主观个性化需求。
利用物品的参数特征等属性形成约束知识,再将用户对物品的特定刻画为约束条件,然后经过对物品集合的约束满足问题的求解,就可以得到用户所期望的物品
基于矩阵分解的推荐系统
矩阵因子分解的基本形式是通过从项目评分推断出的因子向量来表征项目和用户。对项目因子和用户因子的高相关性促成了推荐。这些方法结合了良好的可扩展性和预测精度,为建模各种现实情况提供了很大的灵活性。
矩阵因子分解的一个优点是它允许合并额外的信息。在没有显式反馈的情况下,推荐系统可以通过隐式反馈推断用户的偏好,通过观察用户的购买历史、浏览历史、搜索模式甚至鼠标移动等行为,间接反映用户的意见。隐式反馈通常表示事件的存在或不存在,因此通常用密集填充的矩阵表示。
M k = U k Σ V k T M_k=U_k\Sigma V_k^T Mk=UkΣVkT
混合推荐系统
混合推荐算法就是利用两种或者两种以上推荐算法来配合,克服单个算法存在的问题,期望更好地提升推荐的效果。
特征组合(Feature Combination)混合
特征组合利用多个推荐算法的特征数据来作为原始输入,利用其中一个算法作为主算法最终生成推荐结果。
特征增强(Feature Augmentation)混合
特征增强会利用更加复杂的处理和变换,第一个算法可能事先预处理第二个算法依赖的数据,生成中间可用的特征或者数据(中间态),再供第二个算法使用最终生成推荐结果。
并行的(Parallelized)混合范式
并行的混合范式利用多个独立的推荐算法,每个推荐算法产生各自的推荐结果,在混合阶段将这些推荐结果融合起来,生成最终的推荐结果
并行混合范式利用多个推荐算法密切配合,利用特殊的混合机制聚合各个算法的结果,根据混合方案的不同主要有如下3中具体的实现方式。
掺杂(Mixed)混合
掺杂方法将多个推荐算法的结果混合起来,最终推荐给某个用户,见下面公式,其中,k是第k个推荐算法。
r e c m i x e d ( u ) = ∪ i = 1 n r e c k ( u ) rec_{mixed}(u)=\overset{n}{\underset{i=1}{\cup}}rec_{k}(u) recmixed(u)=i=1∪nreck(u)
上面公式只是给出了为用户推荐的标的物列表,不同的算法可能会推荐一样的,需要去重,另外这些标的物需要先排序再最终展示给用户,一般不同算法的排序逻辑不一样,直接按照不同算法的得分进行粗暴排序往往存在问题。可以将不同的算法预测的得分统一到可比较的范围(比如可以先将每个算法的得分归一化到0-1之间),再根据归一化后的得分大小来排序。还可以通过另外一个算法来单独进行排序。
加权(Weighted)混合
加权方法利用多个推荐算法的推荐结果,通过加权来获得每个推荐候选标的物的加权得分,最终来排序。这里同样要保证不同的推荐算法输出的得分要在同一个范围,否则加权是没有意义的。
分支(Switching)混合
分支混合根据某个判别规则来决定在某种情况发生时,利用某个推荐算法的推荐结果。分支条件可以是与用户状态相关的,也可以是跟上下文相关的。
评测指标
评测指标是用来评价一个系统性能好坏的函数,可以分为对于算法复杂度的度量以及算法准确性的度量。算法复杂度主要考虑算法实现的空间以及时间复杂度,当然算法复杂度同样重要,但这里主要讨论算法的准确性度量指标。
推荐系统根据推荐任务的不同通常分为两类:评分预测与Top-N列表推荐。在这里主要根据这两者来分别讨论评测指标。
评分预测任务
预测特定用户对于没有产生过行为的物品能够打多少分。评分预测一般通过均方根误差(RMSE)和平均绝对误差(MAE)来计算。对于测试集中的用户 u u u和项目 i i i, r u i r_{ui} rui是用户 u u u对项目 i i i的真实评分, r ^ u i \hat{r}_{ui} r^ui是推荐算法预测出的评分,那么RMSE:
R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ RMSE=\frac{\sqrt{\sum_{u,i\in T}(r_{ui}-\hat{r}_{ui})^2}}{\vert T\vert} RMSE=∣T∣∑u,i∈T(rui−r^ui)2
MAE为:
M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ MAE=\frac{\sum_{u,i\in T}\vert r_{ui}-\hat{r}_{ui}\vert}{\vert T\vert} MAE=∣T∣∑u,i∈T∣rui−r^ui∣
Top-N列表推荐
评分预测只能适用于小部分的场景,比如对于电影,书籍的评分,其实Top-N推荐更加符合现在的需求,给用户提供一个推荐的列表让其进行选择。Top-N推荐一般通过准确率与召回率来进行衡量。其中令 R ( u ) R(u) R(u)是根据用户在训练集上的行为给用户作出的推荐列表(指的是预测的推荐列表),而 T ( u ) T(u) T(u)是用户在测试集上的行为列表(指的是真实的列表GroundTruth)。
准确率的意义在于所预测的推荐列表中有多少是用户真是感兴趣的,即预测列表的准确率,那么准确率的定义为:
P r e c i s i o n = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ R ( u ) ∣ Precision=\frac{\sum_{u\in U}\vert R(u)\cap T(u)\vert}{\sum_{u\in U}\vert R(u)\vert} Precision=∑u∈U∣R(u)∣∑u∈U∣R(u)∩T(u)∣
召回率的意义在于真正用户感兴趣的列表中有多少是被推荐算法准确预测出来的,即真实列表的召回率,那么召回率的定义为:
R e c a l l = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ T ( u ) ∣ Recall=\frac{\sum_{u\in U}\vert R(u)\cap T(u)\vert}{\sum_{u\in U}\vert T(u)\vert} Recall=∑u∈U∣T(u)∣∑u∈U∣R(u)∩T(u)∣
两个评测指标从不同的方面来衡量推荐系统的好坏,两者呈现一个负相关的状态,即准确率高的情况下召回率往往会比较低,反之亦然。所以人们又提出了一个结合了准确率与召回率的评测指标F1值,可以更加方便的观察推荐系统的好坏,公式如下:
F 1 = 2 P R P + R F_1=\frac{2PR}{P+R} F1=P+R2PR
混淆矩阵
预测为正 | 预测为反 | |
---|---|---|
真实为正 | TP(预测正确的正例) | FN(预测错误的反例) |
真实为反 | FP(预测错误的正例) | TN(预测正确的反例) |
冷启动问题
对于一个新用户,或者一个新物品,因为没有相关的喜好数据,无法作出推荐。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统。
解决办法
数据稀疏问题
用户平均浏览的商品数量比较小,商品类别特别多,会使U_I矩阵中只有少部分是有值的,而绝大部分为空。
主成分分析(PCA)原理详解
机器学习算法—KMEANS算法原理
K-means聚类算法
聚类算法,k-means,高斯混合模型(GMM)
EM算法详解
[聚类四原型聚类]之高斯混合模型聚类
推荐系统原理
推荐系统:协同过滤CF和基于内容的推荐CB
推荐系统从入门到接着入门
混合推荐系统介绍
主成分分析(PCA)原理总结 - 刘建平Pinard - 博客园 (cnblogs.com)
机器学习(六):K-means聚类原理及案例分析 - 简书 (jianshu.com)
无监督机器学习-聚类分析 - 知乎 (zhihu.com)