2

I am interested in taking a look at the Eigenvalues after performing Multidimensional scaling. What function can do that ? I looked at the documentation, but it does not mention Eigenvalues at all.

Here is a code sample:

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
4

1 回答 1

2

我也无法通过阅读文档找到它。我怀疑他们没有执行经典的 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]
于 2016-11-10T18:29:41.203 回答