Я пытаюсь сжать и распаковать данные с помощью LDA, для этого я использую следующий код:
lda = LDA()
lda.fit(faces_centered, faces.target)
cumsum = np.cumsum(lda.explained_variance_ratio_)
d = np.argmax(cumsum >= 0.95) + 1
lda = LDA(n_components=max(d,36))
faces_transformed_lda = lda.fit(faces_centered, faces.target).transform(faces_centered)
def inverse_transform(lda, x):
if lda.solver == 'lsqr':
raise NotImplementedError("(inverse) transform not implemented for 'lsqr' "
"solver (use 'svd' or 'eigen').")
check_is_fitted(lda, ['xbar_', 'scalings_'], all_or_any=any)
inv = np.linalg.pinv(lda.scalings_)
x = check_array(x)
if lda.solver == 'svd':
x_back = np.dot(x, inv) + lda.xbar_
elif lda.solver == 'eigen':
x_back = np.dot(x, inv)
return x_back
faces_recovered_lda = inverse_transform(lda, faces_transformed_lda)
Это решение было предоставлено по этой ссылке: Линейный дискриминантный анализ обратное преобразование
Но когда я пытаюсь выполнить это, я получаю следующую ошибку:
----------------- -------------------------------------------------- -------- ValueError Traceback (последний вызов был последним) из 18 возвращают x_back 19 ---> 20 face_recovered_lda = inverse_transform (lda ,face_transformed_lda)
в inverse_transform (lda, x) 12 x = check_array (x) 13 if lda.solver == 'svd': ---> 14 x_back = np.dot (x, inv) + lda.xbar_ 15 elif lda.solver == 'eigen': 16 x_back = np. точка (x, inv)
<<strong> array_function innerals> in dot (* args, ** kwargs)
ValueError: shape (400,36) и (39, 4096) не выровнено: 36 (dim 1)! = 39 (dim 0)
Исходная форма набора данных:
faces.centered = (400, 4096) граней. T arget = (400,)
Есть идеи, как восстановить данные?