0

我正在尝试使用 Python 从头开始​​对 MNIST 数据的子集(数字 0 和 1)执行 PCA。(注意:x_train_0_scaled 的尺寸为:5923x784,其中 5923 是图像数量,784 是 28*28 展平像素值)

这是我查找特征值的代码:


# matrix multiplication using numpy
covar_matrix = np.matmul(x_train_0_scaled.T, x_train_0_scaled)

print("The shape of variance matrix = ", covar_matrix.shape)

# the parameter 'eigvals' is defined (low value to heigh value)
# eigh function will return the eigen values in asending order
# this code generates only the top 2 (782 and 783)(index) eigenvalues.
values, vectors = eigh(covar_matrix, eigvals=(782, 783))

print("Shape of eigen vectors = ", vectors.shape)

但是,当我尝试获得两个以上的特征值时,会出现以下错误:

    values, vectors = eigh(covar_matrix, eigvals=(782, 783, 781))
  File "/usr/local/lib/python3.8/site-packages/scipy/linalg/decomp.py", line 484, in eigh
    lo, hi = [int(x) for x in subset_by_index]
ValueError: too many values to unpack (expected 2)

我想要两个以上特征向量的原因是因为根据下图,我猜我的数据不是很明显可分离的,所以我想找到更多维度来绘制我的数据。我的直觉正确吗?

在此处输入图像描述

4

1 回答 1

0

问题已解决。eigvals 将参数作为 (lo, hi)。因此,我需要指定 lo=781 和 hi=783 来获取前 3 个特征值,而不是指定 (781,782, 783)。

于 2020-10-18T06:45:50.347 回答