Я пытаюсь создать сценарий PCA, который просматривает набор изображений и разбивает их на ПК, отсортированные по мощности / весу. Насколько я понимаю, вы хотите сделать M = U*S*V.T
, что я сделал ниже. Я отрезал массив в N, который является фильтром, который удаляет все нижние ПК. но, похоже, он вообще не работает и возвращает тарабарщину, которой явно нет на ПК. Я неправильно понимаю математику?
def PCA(cube_array, PCA_N=False, cutoff=1, verbatim=0):
cube_shape_z, cube_shape_x, cube_shape_y = cube_array.shape
n = 1
M = cube_array.reshape(cube_array.shape[0],-1)
U, s, Vt = np.linalg.svd(M, full_matrices=False)
V = Vt.T
S = np.diag(s)
N = cutoff
Mhat = np.dot(U[:, :N], np.dot(S[:N, :N],
V[:,:N].T)).reshape(cube_array.shape)
return Mhat