【问题标题】:How to obtain the eigenvalues after performing Multidimensional scaling?多维缩放后如何获取特征值?
【发布时间】:2016-11-01 22:39:18
【问题描述】:

我有兴趣在执行多维缩放后查看特征值。什么功能可以做到这一点?我查看了documentation,但它根本没有提到特征值。

这是一个代码示例:

mds = manifold.MDS(n_components=100, max_iter=3000, eps=1e-9,
                   random_state=seed, dissimilarity="precomputed", n_jobs=1)
results = mds.fit(wordDissimilarityMatrix)
# need a way to get the Eigenvalues

【问题讨论】:

    标签: python scikit-learn eigenvalue dimensionality-reduction multi-dimensional-scaling


    【解决方案1】:

    我也无法通过阅读文档找到它。我怀疑他们不是在执行classical MDS,而是更复杂的东西:

    “现代多维缩放 - 理论与应用”Borg, I.; Groenen P. Springer 统计系列(1997 年)

    “非度量多维标度:一种数值方法”Kruskal, J. Psychometrika, 29 (1964)

    “通过优化非度量假设的拟合优度来进行多维缩放”Kruskal, J. Psychometrika, 29, (1964)

    如果您正在寻找每个经典 MDS 的特征值,那么自己获取它们并不难。步骤是:

    1. 获取距离矩阵。然后平方。
    2. 执行双居中。
    3. 查找特征值和特征向量
    4. 选择前 k 个特征值。
    5. 你的第 i 个主成分是 sqrt(eigenvalue_i)*eigenvector_i

    代码示例见下:

    import numpy.linalg as la
    import pandas as pd
    
    # get some distance matrix
    df = pd.read_csv("http://rosetta.reltech.org/TC/v15/Mapping/data/dist-Aus.csv")
    A = df.values.T[1:].astype(float)
    # square it
    A = A**2
    
    # centering matrix
    n = A.shape[0]
    J_c = 1./n*(np.eye(n) - 1 + (n-1)*np.eye(n))
    
    # perform double centering
    B = -0.5*(J_c.dot(A)).dot(J_c)
    
    # find eigenvalues and eigenvectors
    eigen_val = la.eig(B)[0]
    eigen_vec = la.eig(B)[1].T
    
    # select top 2 dimensions (for example)
    PC1 = np.sqrt(eigen_val[0])*eigen_vec[0]
    PC2 = np.sqrt(eigen_val[1])*eigen_vec[1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-31
      • 2019-10-10
      • 2014-02-05
      • 2015-09-25
      • 2017-10-13
      • 2021-03-09
      • 2021-06-22
      • 1970-01-01
      相关资源
      最近更新 更多