版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kabuto_hui/article/details/84350968
1. k近邻学习 - (k-Nearest Neighbor, KNN)
这一小节的内容在之前已经间断的学习了,所以这里就不再赘述了,放上之前的链接,有兴趣的朋友可以随时去查看。
从零开始-Machine Learning学习笔记(20)-kNN(k-Nearset Neignbor)学习笔记
2. 低维嵌入
在高维情形下出现的数据样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重障碍,被称为"维数灾难" (curse of
dimensionality)。缓解维数灾难的一个重要途径是降维(dimension red uction),亦称维数“约简”。
即通过某种数学变换将原始高维属性空间转变为一个低维"子空间" (subspace),在这个子空间中样本密度大幅提高,距离计算也变得更为容易为什么能进行降维,这是因为在很多时候,人们观测或收集到的数据样本虽是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维"嵌入" (embedding)。
若要求原始空间中样本之间的距离在低维空间中得以保持,如下图示,即得到"多维缩放" (Multiple Dimensional Scaling,简称MDS):
这感觉像是什么呢,我将一张A4纸弯曲放在空间中,A4纸上每一点的距离都是固定的,现在我将这张A4纸平铺在桌面上,即从“三维”降到了“二维”,但是纸上任意两点之间的距离并没有发生改变,这就是MDS所干的工作。
假定m个样本在原始空间的距离矩阵为
D∈Rm×m,其第i行j列的元素
distij为样本
xi到
xj的距离。我们的目标是获得样本在d’维空间的表示
Z∈Rd′×m且任意两个样本在d’维空间中的欧氏距离等于原始空间中的距离,即
∣∣zi−zj∣∣=distij,令
B=ZTZ∈Rm×m,其中B为降维度后的样本内积矩阵,则有
bij=ziTzj:
distij2=∣∣zi∣∣2+∣∣zj∣∣2−2ziTzj=bii+bjj−2bij
其中令Z在降维后样本Z被中心化,即有
∑i=1mzi=0,对于矩阵B则有行和列和为0,即
∑i=1mbij=∑j=1mbij=0,那么对于上面的式子,我们分别左右两边同时取:
∑i=1m,∑j=1m,∑i=1m∑j=1m于是有:
i=1∑mdistij2=i=1∑mbii+i=1∑mbjj−2i=1∑mbij=tr(B)+mbjjj=1∑mdistij2=j=1∑mbii+j=1∑mbjj−2j=1∑mbij=mbii+tr(B)i=1∑mj=1∑mdistij2=i=1∑mj=1∑mbii+i=1∑mj=1∑mbjj−2i=1∑mj=1∑mbij=2mtr(B)
其中,
tr(B)=∑i=1mbii,表示矩阵B的迹,其实就是对角线元素之和。
这样,我们根据上面的式子就可以反推出
bij:
bij=−21(distij2−bii−bjj)=−21[distij2−m1(j=1∑mdistij2−tr(B))−m1(i=1∑mdistij2−tr(B))]=−21[distij2−m1j=1∑mdistij2−m1i=1∑mdistij2+m2tr(B)]=−21[distij2−m1j=1∑mdistij2−m1i=1∑mdistij2+m21i=1∑mj=1∑mdistij2]=−21(distij2−disti⋅2−dist⋅j2+dist⋅⋅2)
对于矩阵B做特征值分解有:
B=VΛVT,取
d′≤d个最大的特征值组成的对角矩阵
Λ∗与其对应的特征向量矩阵$V^* $。于是Z可以表示为:
Z=Λ∗21V∗T
这就是MDS算法的全部原理:
非常明显,先求矩阵B;再对矩阵B做特征值分解;取前d个最大的特征值及其对应的特征向量得到Z,即为所求!
3. 主成分分析(Principal Component Analysis, PCA)
较之于MDS,PCA则显得更为简单,主要就是以下几个简单的步骤:对所有样本进行中心化;然后计算协方差矩阵;对协方差矩阵进行特征值分解,选取最大的d个特征值对应的特征向量组成投影矩阵W。这个投影矩阵就能将原来的高维数据转化为低位数据,实现降维。
降维后低维空间的维数d’通常是由用户事先指定,或通过在d’值不同的低维空间中对k近邻分类器(或其他开销较小的学习器)进行交叉验证来选取较好的d’值。对PCA,还可从重构的角度设置一个重构阔值,例如t = 95% ,然后选取使下式成立的最小d’值:
∑i=1dλi∑i=1d′λi≥t
4. 核化线性降维 - KPCA(Kernelized PCA, KPCA)
假定我们将在高维特征空间中把数据投影到由W确定的超平面上,即PCA欲求解:
(i=1∑mziziT)W=λW
其中
zi是样本点
xi在高维特征空间中的像,于是可以解出W:
W=λ1(i=1∑mziziT)W=i=1∑mziλziTW=i=1∑mziαi
其中:
αi=λziTW,如果
zi可以由原来的高维空间中
xi的某种映射产生,即:
zi=ϕ(xi),那么原来的式子可以表示为:
(i=1∑mϕ(xi)ϕ(xi)T)W=λW同时:W=i=1∑mϕ(xi)αi
把括号中间的部分替换为核函数:
k(xi,xj)=ϕ(xi)Tϕ(xi),于是就变为
KA=λA,对核矩阵进行特征值分解,并取最大的d个特征值对应的特征向量即可,对于新的样本,其投影为:
zj=WjTϕ(x)=i=1∑mαijϕ(xi)Tϕ(xi)=i=1∑mαijk(xi,x)
由于KPCA 需对所有样本求和,因此它的计算开销较大。
5. 流形学习
流形学习(manifold learning)是一类借鉴了拓扑流形概念的降维方法。"流形"是在局部与欧氏空间同胚的空间,换言之,它在局部具有欧氏空间的性质,能用欧氏距离来进行距离计算。这给降维方法带来了很大的启发:若低维流形嵌入到高维空间中,则数据样本在高维空间的分布虽然看上去非常复杂,但在局部上仍具有欧氏空间的性质,因此,可以容易地在局部建立阵维映射关系,然后再设法将局部映射关系推广到全局。
5.1 等度量映射((Isometric Mapping, Isomap)
Isomap利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,然后就能建立一个近邻连接图,图中近邻点之间存在接,而非近邻点之间不存在连接,于是,计算两点之间测地线距离的问题就转变为计算近邻连接图上两点之间的最短路径问题。在近邻连接图上计算两点间的最短路径,可采用著名的Dijkstra算法或Floyd算法。然后调用MDS算法就可以求出样本集D在低维空间上的投影。
Floyd算法我之前也写过一篇笔记,这里就只放出链接了:最短路径-Floyd算法的matlab实现。
其实主要就两个步骤:1.计算距离矩阵;2.调用MDS算法。
5.2 局部线性嵌入(Locally Linear Embedding, LLE)
与Isomap试图保持近邻样本之间的距离不同,局部线性嵌入试图保持邻域内样本之间的线性关系,即:
xi=wijxj+wikxk+wilxl
先为每个样本
xi找到其近邻的下标集合
Qi,近邻的个数k提前设定。于是有:
w1,w2,...,wmmini=1∑m∣∣xi−j∈Qi∑wijxj∣∣22s.t. j∈Qi∑wij=1
根据上式,可以将
wij解出来,令
Cjk=(xi−xj)T(xi−xk)有:
wij=∑l,s∈QiCls−1∑j∈QiCjk−1
LLE要在低维空间中保持
wij不变,令
zj是
xi在低维空间中的坐标,于是
zi可以由下式求得:
z1,z2,...,zmmini=1∑m∣∣zi−j∈Qi∑wijzj∣∣22
令
M=(I−W)T(I−W),于是上式可以写为:
Zmin tr(ZMZT)s.t. ZZT=I
M最小的d个特征值对应的特征向量组成的矩阵即为Z:
6.度量学习(Matric Learning)
每个空间对应了在样本属性上定义的一个距离度量,而寻找合适的空间,实质上就是在寻找一个合适的距离度量。那么,为何不直接尝试"学习"出一个合适的距离度量呢,这就是度量学习(metric learning) 的基本动机。
定义马氏距离:
distmah2(xi,xj)=(xi−xj)TM(xi−xj)
其中M 亦称"度量矩阵",而度量学习则是对M 进行学习。 其中M是一个半正定矩阵,即即必有正交基P使得M能写为
M=PPT。
不同的度量学习方法针对不同目标获得"好"的半正定对称距离度量矩阵M,若M是一个低秩矩阵,则通过对M进行特征值分解,总能找到一组正交基,其正交基数目为矩阵M的秩rank(M),小于原属性数d。于是,度量学习学得的结果可衍生出一个降维矩阵P,能用于降维之目的。
书中并没有给出多少度量学习的算法,所以这里也暂时没有做更多的研究,留待之后遇到或者研究过,再来补充这一块的内容~