MDS降维方法实现

MDS是一种降维方法,目标是降维后任意两个样本在低维空间中的欧式距离与原始空间中的相等。

令降维后样本的内积矩阵B=Z^TZ,有

d_{ij}=||z_i-z_j||_2^2=||z_i||^2+||z_j||^2-2z_i^Tz_j=b_{ii}+b_{jj}-2b_{ij}

通过上面的式子可以得出

\sum_{i=1}^{m}d^2_{ij}=tr(B)+mb_{jj}

\sum_{j=1}^{m}d_{ij}^{2}=tr(B)+mb^{ii}

\sum_{i=1}^{m}\sum_{j=1}^{m}d_{ij}^2=2mtr(B)

由上面四个式子可以解得,b_{ij}=-\frac{1}{2}(d_{ij}^2-d_{i\cdot}^2-d_{\cdot j}^2+d_{\cdot \cdot}^2)

对B做特征值分解,B=V\Lambda V^T,得

Z=\Lambda ^{\frac{1}{2}}V^T\in R^{d'\times m}

接下来上代码,采用的数据集是美国部分城市主要城市间距离。由于地球表面是球形,所以可以看作一个三维空间,降维后就是类似地图上的位置。

 

from numpy import *
import matplotlib.pyplot as plt

# 读取数据
def loadDataSet():
    dataMat = []
    fr = open('D:/distance.txt')
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append([float(lineArr[0]), float(lineArr[1]), float(lineArr[2]), float(lineArr[3]), float(lineArr[4]), float(lineArr[5]), float(lineArr[6]), float(lineArr[7]), float(lineArr[8]), float(lineArr[9])])
    return dataMat

# MDS降维算法
def MDS(dataMat, d):  
    dataMatrix = asarray(dataMat)
    dataMatSqua = dataMatrix ** 2
    
    # 计算dist_i^2, dist_j^2, dist^2
    distI = mean(dataMatSqua, axis=1)
    distJ = mean(dataMatSqua, axis=0)
    distAll = mean(dataMatSqua)
    
    # 计算矩阵B
    B = zeros(dataMatSqua.shape)
    for i in range(B.shape[0]):
        for j in range(B.shape[1]):
            B[i][j] = -0.5 * (dataMatSqua[i][j] - distI[i] - distJ[j] + distAll)
    
    # 特征值分解
    eigA, eigV = linalg.eig(B)
    X = dot(eigV[:, :d], sqrt(diag(eigA[:d])))
    label = ['Atl', 'Chi', 'Den', 'Hou', 'LA', 'Mia', 'NY', 'SF', 'Sea', 'DC']
    plt.plot(X[:, 0], X[:, 1], 'o')
    for i in range(X.shape[0]):
        plt.text(X[i, 0] + 25, X[i, 1] - 15, label[i])
    plt.show()

运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值