Эквивалентный код Matlab для математической формулы (ковариационная матрица для алгоритма собственных граней)

введите здесь описание изображения

Я разрабатываю алгоритм собственных лиц для распознавания лиц. Вычитав среднее значение из обучающих изображений, теперь у меня есть матрица A с центрированными изображениями.

Теперь я не уверен, эквивалентен ли код Matlab AxA' всей первой строке, показанной на изображении выше, или только части ΣΦnΦn'.

Итак, я спрашиваю, нужно ли мне все еще делить AxA' на M (размер тренировочного набора) или это часть матричного умножения, выполняемого Matlab?


person Yiannis    schedule 20.02.2016    source источник


Ответы (2)


На самом деле это зависит от обозначений, используемых в этой статье и/или в Matlab. Со строго математической точки зрения они должны быть равны.

В общих чертах, если вы вычли среднее значение, следующим шагом будет оценка ковариационной матрицы (посмотрите на cov() в Matlab), а затем из такой матрицы вы должны извлечь собственные значения и собственные векторы.

person AlessioX    schedule 20.02.2016
comment
эта конкретная статья - Turk и Pentland Eigenfaces для распознавания, но, похоже, это одна и та же запись во всех статьях, которые я читал. Да, я пытался найти математическое расширение части ΣΦnΦn', чтобы я мог сравнить полученную матрицу для простого примера с результатом, данным Matlab, но я ничего не смог найти. - person Yiannis; 20.02.2016
comment
Я смотрел на бумагу и да, эти два выражения эквивалентны. Вы можете использовать одно или другое: вы можете объединить все Φ вместе и выполнить A*A' или выполнить сумму всех Φ и разделить на M. - person AlessioX; 20.02.2016
comment
хорошо спасибо! я только что нашел несколько математических видео на YouTube по умножению матриц, просто проверю это :) - person Yiannis; 20.02.2016
comment
Допустим, в Matlab-ian X - это ваш тренировочный набор, где каждый столбец представляет собой изображение. Из раздела «Вычисление собственных граней» довольно ясно, что такие изображения должны быть преобразованы в вектор-столбец. Объединение таких векторов-столбцов приведет к матрице X. Следующим шагом является вычитание среднего значения (Ψ, в документе) из всех изображений (столбцов): поэтому вам нужно оценить среднее значение каждой строки (вектор-столбец) и вычесть такое значение из каждого столбца. Теперь вы хотите использовать cov() в такой матрице (не забудьте транспонировать матрицу в качестве входных данных в cov()!) и оценить собственные значения/векторы - person AlessioX; 20.02.2016
comment
оказывается, что только часть ΣΦnΦn' эквивалентна AxA', поэтому ТАКЖЕ требуется деление на M. Я нашел способ вычислить сумму на бумаге и попробовал простую матрицу 2x2 (math.stackexchange.com/questions/621036/). Для матрицы Q = [1 2 ; 3 4] транспонированный Q' = [1 3 ; 2 4]. На бумаге ΣQnQn' = [5 11 ; 11 25], а в Matlab QxQ' = [5 11 ; 11 25]. Это показывает, что часть формулы 1/M не выполняется Matlab, и мне нужно сделать это отдельно. Поправьте меня, если я где-то ошибся :) - person Yiannis; 20.02.2016
comment
Да, действительно, я продолжал проверять математику. В бумаге ошибка. Во втором уравнении также должно быть 1/M, учитывая определение A, включенное в саму статью. - person AlessioX; 20.02.2016

Оказывается, только часть ΣΦnΦn' эквивалентна AxA', поэтому ТАКЖЕ требуется деление на M. Я нашел способ вычислить сумму на бумаге и попробовал простую матрицу 2x2 (https://math.stackexchange.com/questions/621036/how-sum-work-vectors-and-matrices).

Для матрицы Q = [1 2 ; 3 4] транспонированный Q' = [1 3 ; 2 4]. На бумаге ΣQnQn' = [5 11 ; 11 25], а в Matlab QxQ' = [5 11 ; 11 25]. Это показывает, что часть формулы 1/M не выполняется Matlab, и мне нужно сделать это отдельно.

person Yiannis    schedule 23.02.2016