多维标度法

多维标度法_第1张图片

多维标度法(MultiDimensional Scaling,MDS),与主成分分析(Principle Component Analysis,PCA)、线性判别分析(Linear Discriminent Analysis,LDA)类似,都可以用来降维。

# D是初始距离矩阵
D=np.array([[0,411,213,219,296,397],
            [411,0,204,203,120,152],
            [213,204,0,73,136,245],
            [219,203,73,0,90,191],
            [296,120,136,90,0,109],
            [ 397,152,245,191,109,0]])

N = D.shape[0]
T = np.zeros((N,N))

ss = 1.0/N**2*np.sum(D**2)
for i in range(N):
    for j in range(i,N):       
        T[i,j] = T[j,i] = -0.5*(D[i,j]**2 -1.0/N*np.dot(D[i,:],D[i,:]) -1.0/N*np.dot(D[:,j],D[:,j])+ss)

eigVal,eigVec = np.linalg.eig(T) # eigVec 的列向量对应特征向量
X = np.dot(eigVec[:,:2],np.diag(np.sqrt(eigVal[:2]))) # 用两个特征值和特征向量,降到二维

为了能够直观地看到MDS降维方法具有的保留样本数据间的距离的特性,我们打印原始距离和重构距离:

print '原始距离','\t重构距离'
for i in range(N):
    for j in range(i+1,N):
        print np.str(D[i,j]),'\t\t',np.str("%.4f"%np.linalg.norm(X[i]-X[j]))

原始距离 重构距离
411         411.0730
213         213.3703
219         216.1111
296         299.8839
397         396.5059
204         206.0970
203         200.8076
120         132.0087
152         151.6636
73         76.6109
136         132.5989
245         246.1059
90         84.4350
191         190.9788
109         113.5375

  • http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5191/lecture/06_MDS.pdf
  • 模式识别之 MDS Multidimensional Scaling 多维尺度法 分析及Matlab实现
    http://blog.csdn.net/songrotek/article/details/42235097

你可能感兴趣的:(多维标度法)