«Нормализующие» переменные для SVD / PCA


17

Предположим, у нас есть N измеримых переменных (a1,a2,...,aN) , мы выполняем ряд измерений M>N , а затем хотим выполнить разложение по сингулярным значениям результатов, чтобы найти оси наибольшей дисперсии для M точек в N мерном пространстве. ( Примечание: предположим , что средства я уже вычитали, так я= 0aяai=0 для всех я ) .

Теперь предположим, что одна (или более) переменная имеет существенно отличающуюся характеристическую величину, чем остальные. Например , 1 может иметь значение в диапазоне 10 - 100 , а остальные может быть около 0,1 - 1 . Это сильно изменит ось наибольшей дисперсии в направлении оси .a1101000.11a1

Разница в величинах может быть просто из-за неудачного выбора единицы измерения (если мы говорим о физических данных, например, километрах против метров), но на самом деле разные переменные могут иметь совершенно разные измерения (например, вес против объема), поэтому не может быть никакого очевидного способа выбрать «сопоставимые» единицы для них.

Вопрос: Я хотел бы знать, существуют ли какие-либо стандартные / общие способы нормализации данных, чтобы избежать этой проблемы. Меня больше интересуют стандартные методы, которые производят сравнимые величины для для этой цели, а не придумывают что-то новое.a1-aN

РЕДАКТИРОВАТЬ: Одна возможность состоит в нормализации каждой переменной по ее стандартному отклонению или что-то подобное. Однако тогда возникает следующая проблема: давайте интерпретируем данные как облако точек в мерном пространстве. Это облако точек можно вращать, и этот тип нормализации даст разные конечные результаты (после SVD) в зависимости от вращения. (Например, в самом крайнем случае представьте, что данные вращаются точно, чтобы выровнять главные оси с основными осями.)N

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


4
Сама проблема обычно не является инвариантной к вращению, потому что каждая из переменных записывается с соответствующей ей стандартной единицей измерения. Например, 1 может быть в футах, 2 в микронах, 3 в литрах и т.д. Даже тогда , когда все устройства одинаковы, если переменные измерения различных видов вещей, суммы , по которым они различаются, скорее всего , различаются способами , характерными из этих переменных: еще раз, это не инвариант вращения. Поэтому вы должны отказаться от инвариантности вращения в качестве руководящего принципа или соображения. a1a2a3
whuber

Ответы:


11

Три общие нормализации - центрирование, масштабирование и стандартизация.

Пусть - случайная величина.Икс

Центрирование:

Икся*знак равноИкся-Икс¯,

Полученный будет иметь ¯ х * = 0 .Икс*Икс*¯знак равно0

Масштабирование

Икся*знак равноИкся(ΣяИкся2),

Результирующий будет иметь i x i 2 = 1Икс*ΣяИкся*2знак равно1 .

Стандартизация - это центрирование, а затем масштабирование. Полученный будет иметь ¯ х * = 0 и Σ я х * я 2 = 1 .Икс*Икс*¯знак равно0ΣяИкся*2знак равно1


Можете ли вы определить "SS", пожалуйста?
Сабольч

Сумма площадей. Сумма в квадрате Си.
ttnphns

Причина установки суммы квадратов в 1, а не дисперсии, состоит в том, что тогда единичные значения будут соответствовать стандартным отклонениям вдоль главных осей (если я не ошибаюсь)?
Сабольч

Пожалуйста, также посмотрите мою правку на вопрос.
Сабольч

@Szabolcs, я действительно могу пропустить точку вашего редактирования. Но PCA (или SVD) - это просто само вращение (частный случай ортогонального вращения осей). Любое смещение (например, центрирование) или сжатие / расширение (например, масштабирование) облака должно повлиять на результаты этого вращения.
ttnphns

7

Вы абсолютно правы в том, что наличие отдельных переменных с очень разными отклонениями может быть проблематичным для PCA, особенно если это различие связано с разными единицами измерения или разными физическими размерами. По этой причине, если все переменные не являются сопоставимыми (одна и та же физическая величина, одни и те же единицы), рекомендуется выполнять PCA на корреляционной матрице вместо ковариационной матрицы. Посмотреть здесь:

Ведение PCA на корреляционной матрице эквивалентно стандартизации всех переменных перед анализом (а затем выполнение PCA на ковариационной матрице). Стандартизация означает центрирование, а затем деление каждой переменной на ее стандартное отклонение, чтобы все они стали единичной дисперсией. Это можно рассматривать как удобную «смену единиц», чтобы сделать все единицы сопоставимыми.

Можно спросить, может ли иногда быть лучший способ «нормализации» переменных; Например, можно выбрать деление на некоторую надежную оценку дисперсии, а не на необработанную дисперсию. Это было задано в следующей ветке, и вы увидите последующее обсуждение (хотя там не было дано определенного ответа):

Наконец, вы были обеспокоены тем, что нормализация стандартным отклонением (или чем-то подобным) не является инвариантом вращения. Ну да, это не так. Но, как заметил @whuber в приведенном выше комментарии, не существует способа, инвариантного к вращению: изменение единиц отдельных переменных не является операцией, инвариантной к вращению ! Здесь не о чем беспокоиться.


Я получаю это для PCA. Но также рекомендуется выполнить какую-либо нормализацию перед выполнением разложения по единому значению?
hipoglucido

4

Обычная техника перед применением PCA состоит в том, чтобы вычесть среднее значение из образцов. Если вы этого не сделаете, первым будет собственный вектор. Я не уверен, что вы это сделали, но позвольте мне поговорить об этом. Если мы говорим в коде MATLAB: это

clear, clf
clc
%% Let us draw a line
scale = 1;
x = scale .* (1:0.25:5);
y = 1/2*x + 1;

%% and add some noise
y = y + rand(size(y));

%% plot and see
subplot(1,2,1), plot(x, y, '*k')
axis equal

%% Put the data in columns and see what SVD gives
A = [x;y];
[U, S, V] = svd(A);

hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found directly')

%% Now, subtract the mean and see its effect
A(1,:) = A(1,:) - mean(A(1,:));
A(2,:) = A(2,:) - mean(A(2,:));

[U, S, V] = svd(A);

subplot(1,2,2)
plot(x, y, '*k')
axis equal
hold on
plot([mean(x)-U(1,1)*S(1,1) mean(x)+U(1,1)*S(1,1)], ...
     [mean(y)-U(2,1)*S(1,1) mean(y)+U(2,1)*S(1,1)], ...
     ':k');
plot([mean(x)-U(1,2)*S(2,2) mean(x)+U(1,2)*S(2,2)], ...
     [mean(y)-U(2,2)*S(2,2) mean(y)+U(2,2)*S(2,2)], ...
     '-.k');
title('The left singular vectors found after subtracting mean')

Как видно из рисунка, я думаю, вам следует вычесть среднее значение из данных, если вы хотите лучше проанализировать (со) дисперсию. Тогда значения не будут между 10-100 и 0,1-1, но их среднее будет все равно нулю. Дисперсии будут найдены как собственные значения (или квадрат сингулярных значений). На найденные собственные векторы не влияет масштаб измерения для случая, когда мы вычитаем среднее так же, как и для случая, когда мы этого не делаем. Например, я протестировал и наблюдал следующее, что говорит, что вычитание среднего значения может иметь значение для вашего случая. Таким образом, проблема может быть вызвана не дисперсией, а переводом.

% scale = 0.5, without subtracting mean
U =

-0.5504   -0.8349
-0.8349    0.5504


% scale = 0.5, with subtracting mean
U =

-0.8311   -0.5561
-0.5561    0.8311


% scale = 1, without subtracting mean
U =

-0.7327   -0.6806
-0.6806    0.7327

% scale = 1, with subtracting mean
U =

-0.8464   -0.5325
-0.5325    0.8464


% scale = 100, without subtracting mean
U =

-0.8930   -0.4501
-0.4501    0.8930


% scale = 100, with subtracting mean
U =

-0.8943   -0.4474
-0.4474    0.8943

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


1
Я должен был упомянуть в вопросе, что среднее значение уже вычтено. Я отредактирую это соответственно.
Сабольч

1
NN

1
Я понимаю, что не может быть никакого способа сделать это, не зависящего от ротации, но я бы хотел хотя бы прочитать некоторые обсуждения этих вопросов ... любые указатели приветствуются. Примечание: я не тренируюсь по прикладной статистике (только по математике, такой как linalg, теория проб), поэтому я изучаю этот материал по ходу дела.
Сабольч

1
Когда вы не центрируете выборки (вычитаете среднее из столбцов), первый собственный вектор обычно не является вектором средних.
whuber

-1 Понижено, потому что этот ответ касается только центрирования, тогда как вопрос о масштабировании. Кроме того, утверждение о том, что первый собственный вектор обязательно является вектором средних, неверно, как отмечает @whuber.
амеба говорит восстановить

-5

Для нормализации данных для PCA также использовалась следующая формула

Южная Каролиназнак равно100Икс-мин(Икс)Максимум(Икс)-мин(Икс)

где Икс это необработанное значение для этого показателя для страны с в год T, и Икс описывает все исходные значения во всех странах для этого показателя за все годы.


7
Кто сказал что-нибудь о странах или годах?
Ник Стаунер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.