Функция, которая вычисляет ошибку проекции и восстановления, используя numpy - python - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу создать функцию, которая вычисляет и возвращает проекцию вектора x на вектор b, а также ошибку восстановления.

Мой код следующий:

def reconstruction_error(x, b):

    '''The function calculates the projection and reconstruction error
    from projecting a vector x onto a vector b'''


    b = np.matrix(b)

    x_projection_on_b = (b.T @ b/ float((b@b.T))) @ x

    reconstruction_error = (x - x_projection_on_b) @ (x - x_projection_on_b).T 

    return( x_projection_on_b, float(reconstruction_error))

Однако ошибка восстановления неверна.Например,

x = np.array([1,1,1])

b = np.array([5, 10, 10])

a, error = reconstruction_error(x, b)

a
matrix([[0.55555556, 1.11111111, 1.11111111]])

error
0.2222222222222222

1 Ответ

0 голосов
/ 12 сентября 2018

Не уверен насчет терминологии , но если «ошибка реконструкции» равна длине «вектора отклонения» (исходный вектор минус его проекция), то вы получите:

import numpy as np
from numpy.linalg import norm

a = np.array([1,1,1])
b = np.array([5, 10, 10])    

def projection(x, on):
    return np.dot(x, on) / np.dot(on, on) * on

def rejection(x, on):
    return x - projection(x, on)

def reconstruction_error(x, on):
    return norm(rejection(x, on))

>>> reconstruction_error(a, b)
0.4714045207910317
...