Значения формы ошибок не выровнены при выполнении инверсии LDA - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь сжать и распаковать данные с помощью 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,)

Есть идеи, как восстановить данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...