В ловушке при реализации PCA: вычислить среднее значение в каком измерении?

#algorithm #machine-learning #pca

#алгоритм #машинное обучение #pca

Вопрос:

Я изучаю UFLDL. Используя код из этого руководства

 avg = mean(x, 1);
x = x - repmat(avg, size(x, 1), 1);
sigma = x * x' / size(x, 2);
[U,S,V] = svd(sigma);
xRot = U' * x;
xTilde = U(:,1:k)' * x;
  

Я могу получить результат, требуемый в этом руководстве (вычислить k в другом месте, скажем, k равно 300). В этом примере x представляет собой матрицу n * m (784 * 60000), каждый столбец представляет собой MNIST-изображение. На случай, если я ошибся, я видел код loadMNISTImages .m, который подготовил этот учебник, загружает изображения mnist в виде матрицы 28x28x [количество изображений MNIST] и изменяет форму матрицы до #пикселей x # примеров.

Из кода я вычисляю среднее значение пикселя и вычитаю его из каждого участка изображения, то есть m (60000) означает. А сигма — это матрица n * n (784 * 784), поэтому U. xTilde равно k * m (300 * 60000). Итак, этот код вычисляет среднее значение для каждого участка изображения (каждого столбца) и уменьшает размер для каждого участка изображения (размер строки уменьшается).

Затем я попытался реализовать простой пример PCA, как показано на этом изображении:

исходные данные

используя такой код

 x = [-3.8,-2.5;-1.2,-2.5;1,1.5;2.7,2.5;3,1.3];
x = x';
x = x - repmat(mean(x, 2), 1, size(x, 2));
sigma = x * x' / size(x, 2);
[U, S, V] = svd(sigma);
xRot = U' * x;
xTilde = U(:,1)' * x;
  

Вы можете видеть, что x — это n * m (2 * 5, после транспонирования). Я вычисляю среднее значение для каждой строки, и размер строки уменьшается.

Оба этих двух случая уменьшили размер строки, но в первом случае вычисляется среднее значение для столбца, а во втором — для строки. Как я понимаю эту ситуацию?

Комментарии:

1. Вы говорите, что удивлены тем, что транспонирование матрицы заставляет вас использовать средние значения по строкам вместо средних значений по столбцам? Что в этом удивительного? Это в основном то же самое.

2. понимание простое — ваш первый подход неверен. Вы должны вычислять средние значения по характеристикам , а не по выборке , поэтому вам нужно среднее значение для каждого «пикселя», а не для каждого «изображения»

3. Но первый подход — это именно то, что говорится в руководстве UFLDL. Так это просто ошибка в руководстве или что-то, чего я не знаю?