若干种降维方法的实现与比较(PCA、MDS)
新学到一种降维方式MDS,想到之前学过PCA但是也忘得差不多了,心想干脆这次来个包圆儿,一块再学习一遍,以后如果忘记还可以来这里再翻阅😁顺便编程给实现了,然后结合sklearn包里面提供的降维的方法进行了一些对比1、降维
参考西瓜书里面的讲法,降维是从KNN算法这里引入的,如果大家对KNN算法还不太了解的话,其实就一句话,给定一个新样本,其类别是由原有样本中最接近的 k k k个样本决定的。然后当原有样本数量的维数比较高,可能相隔非常远才有样本,这样跟近邻的概念有些背道而驰了。所以会考虑降低样本的维度,以增加样本在样本空间的密度。
维数灾难,curse of dimensionality,是困扰机器学习在一些场景适用性的一大问题。有的场景中数据分布非常稀疏、维数特别高,会带来距离比较难计算,结果不好解释等问题。所以降维,dimension reduction,是一个有效的途径。
那么为什么可以降维呢,这跟图片压缩差不多的意思,用更加少而精炼的部分来代替整体。降维就是通过一些数学的变换,将原始高位的属性空间转变为一个低维的子空间。样本虽然在观察的时候是高维的,但是跟学习任务相关的也许仅仅是某个低微分布,即高维空间的一个低维“嵌入”(embedding)。
2、MDS降维
2.1、原理介绍
MDS,多维缩放,Multiple Dimensional Scaling,一种经典的降维算法。
主要的特点是能够保持原始样本空间中样本之间的距离和降维后空间相等(或者十分近似)
由于自己也是第一次学习这个概念,还是把推导的过程给敲一遍吧,加深印象。
有 m m m个样本在原始空间的距离矩阵为 D ∈ R m × m D\in \R^{m×m} D∈Rm×m,第 i i i行 j j j列元素 d i s t i j dist_{ij} distij是样本 x i x_i xi到 x j x_j xj之间的距离。MDS的目的是获取样本在 d 1 d_1 d1维空间的表示 Z ∈ R d 1 × m Z\in \R^{d_1×m} Z∈Rd1×m,且任意两个距离在 d 1 d_1 d1维空间的欧氏距离等于原始空间的距离,即 ∥ z i − z j ∥ = d i s t i j \|z_i-z_j\|=dist_{ij} ∥zi−zj∥=distij。
令 B = Z T Z ∈ R m × m B=Z^TZ\in \R^{m×m} B=ZTZ∈Rm×m为降维后样本的内积矩阵, b i j = z i T z j b_{ij}=z^T_iz_j bij=ziTzj,有 d i s t i j 2 = ∥ z i ∥ 2 + ∥ z j ∥ 2 − 2 z i T z j = b i i + b j j − 2 b i j dist_{ij}^2=\|z_i\|^2+\|z_j\|^2-2z^T_iz_j=b_{ii}+b_{jj}-2b_{ij} distij2=∥zi∥2+