Я пытаюсь повторить идеи со страницы Eigenface в Википедии. Из сотни образцов изображений, представленных матрицей данных (где каждое изображение сведено к вектору длины n , то есть X является матрицей размером 100 на n ), я вычислил декомпозицию SVD:
следовательно:
Принимая подмножество крупнейших собственных мод, можно аппроксимировать матрицу (пусть сг 1 ≥ сг 2 ≥ ⋯ ):
Теперь, учитывая новый вектор , который представляет изображение не в X , как мне определить вес q собственных векторов U, чтобы наилучшим образом представить мое новое изображение y ? За исключением патологических случаев, является ли это представление уникальным?
Короче говоря, то, что я хотел бы сделать, это (со страницы вики):
Эти собственные грани теперь можно использовать для представления как существующих, так и новых граней : мы можем спроецировать новое (вычтенное из среднего) изображение на собственные грани и тем самым записать, как это новое лицо отличается от среднего грани.
Как мне сделать эту проекцию?
источник
Ответы:
Упомянутая «проекция» является векторной проекцией . Чтобы рассчитать проекцию вектора на вектор b , вы используете внутреннее произведение двух векторов:a b
в этом случае - векторная компонента a, которая лежит в том же направлении от b . В евклидовом пространстве оператор внутреннего произведения определяется как ихточечный продукт:aproj a b
где - количество компонентов в векторах a и b, а a i и b i - i-й компонент векторов a и b соответственно. Интуитивно, вычисляя внутреннее произведение двух векторов, вы находите, «сколько из» вектора a идет в направлении вектора b . Обратите внимание, что это число со знаком, поэтому отрицательное значение будет означать, что угол между двумя векторами больше 90 градусов, как показано альтернативным определением для оператора проекции:n a b ai bi i a b a b
где - угол между двумя векторами.θ
Таким образом, учитывая вектор и набор базисных векторов b i , можно найти «сколько из a » идет в каждом из направлений каждого из базисных векторов. Как правило, эти базисные векторы будут взаимно ортогональными. В вашем случае SVD - это ортогональное разложение, поэтому это условие должно быть выполнено. Итак, чтобы выполнить то, что вы описываете, вы должны взять матрицу собственных векторов U и вычислить внутреннее произведение вектора-кандидата y с каждым из столбцов матрицы:a bi a U y
Скалярное значение которое вы получаете от каждого внутреннего произведения, показывает, насколько хорошо вектор y "выровнен" с i-м собственным вектором. Поскольку собственные векторы ортонормированы , вы можете восстановить исходный вектор y следующим образом:pi y i y
источник