#python #machine-learning #seaborn #pca
#python #машинное обучение #seaborn #pca
Вопрос:
Я пытаюсь выполнить PCA с нуля для подмножества данных MNIST (цифры 0 и 1) с использованием Python. (ПРИМЕЧАНИЕ: x_train_0_scaled имеет размеры: 5923×784, где 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)
Причина, по которой я хочу больше двух собственных векторов, заключается в том, что, согласно изображению ниже, я предполагаю, что мои данные нельзя четко разделить, поэтому я хочу найти больше измерений для построения моих данных. Верна ли моя интуиция?
Ответ №1:
Проблема решена. eigvals принимает аргументы как (lo, hi). Поэтому вместо указания (781,782, 783) Мне нужно было указать lo = 781 и hi = 783, чтобы получить верхние 3 собственных значения.