Variabel “normalisasi” untuk SVD / PCA

17

Misalkan kita memiliki N variabel terukur, (a1,a2,,aN) , kita melakukan sejumlah M>N pengukuran, dan kemudian ingin melakukan dekomposisi nilai singular pada hasil untuk menemukan sumbu varians tertinggi untuk poin M dalam N dimensi ruang. ( Catatan: asumsikan bahwa sarana ai telah dikurangi, jadi ai=0 untuk semua i .)

Sekarang anggaplah satu (atau lebih) variabel memiliki magnitudo karakteristik yang berbeda secara signifikan daripada variabel lainnya. Misalnya a1 dapat memiliki nilai dalam kisaran 10100 sedangkan sisanya dapat sekitar 0.11 . Ini akan sangat condong ke sumbu varian tertinggi terhadap sumbu a1 .

Perbedaan dalam besaran mungkin semata-mata karena pilihan yang tidak menguntungkan dari satuan pengukuran (jika kita berbicara tentang data fisik, misalnya kilometer vs meter), tetapi sebenarnya variabel yang berbeda mungkin memiliki dimensi yang sama sekali berbeda (misalnya berat vs volume), jadi mungkin tidak ada cara yang jelas untuk memilih unit "sebanding" untuk mereka.

Pertanyaan: Saya ingin tahu apakah ada cara standar / umum untuk menormalkan data untuk menghindari masalah ini. Saya lebih tertarik pada teknik standar yang menghasilkan besaran yang sebanding untuk a1aN untuk tujuan ini daripada menghasilkan sesuatu yang baru.

EDIT: Satu kemungkinan adalah untuk menormalkan setiap variabel dengan standar deviasinya atau yang serupa. Namun, masalah berikut muncul kemudian: mari kita menafsirkan data sebagai titik awan dalam ruang N dimensi. Cloud titik ini dapat diputar, dan jenis normalisasi ini akan memberikan hasil akhir yang berbeda (setelah SVD) tergantung pada rotasi. (Misalnya dalam kasus paling ekstrim bayangkan memutar data dengan tepat untuk menyelaraskan sumbu utama dengan sumbu utama.)

Saya berharap tidak akan ada cara rotasi-invarian untuk melakukan ini, tapi saya akan menghargai jika seseorang dapat mengarahkan saya ke beberapa diskusi tentang masalah ini dalam literatur, terutama mengenai peringatan dalam interpretasi hasil.

Szabolcs
sumber
4
Masalahnya sendiri biasanya bukan invarian rotasi, karena masing-masing variabel dicatat dengan unit pengukuran konvensional yang sesuai dengannya. Misalnya, mungkin dalam kaki, dalam mikron, dalam liter, dll. Bahkan ketika semua unit adalah sama, jika variabel mengukur berbagai hal, jumlah yang mereka bervariasi kemungkinan akan berbeda dalam cara karakteristik dari variabel-variabel tersebut. : sekali lagi, ini bukan rotasi invarian. Karena itu Anda harus mengabaikan invarian rotasi sebagai prinsip atau pertimbangan panduan. a1a2a3
whuber

Jawaban:

11

Tiga normalisasi yang umum adalah pemusatan, penskalaan, dan standarisasi.

Biarkan menjadi variabel acak.X

Centering adalah

xi=xix¯.

Hasil akan memiliki .xx¯=0

Penskalaan adalah

xsaya=xsaya(sayaxsaya2).

Hasil akan memiliki .xsayaxsaya2=1

Standarisasi adalah penskalaan lalu penskalaan. Hasil akan memiliki dan .xx¯=0sayaxsaya2=1

ttnphns
sumber
Bisakah Anda mendefinisikan "SS"?
Szabolcs
Jumlah keseluruhan. Jumlah kuadrat Xi.
ttnphns
Alasan untuk menetapkan jumlah kuadrat ke 1, dan bukan varians, adalah bahwa nilai singular akan sesuai dengan standar deviasi sepanjang sumbu utama (kecuali saya salah)?
Szabolcs
Harap lihat juga edit saya untuk pertanyaan itu.
Szabolcs
@Szabolcs, sebenarnya saya mungkin melewatkan satu poin dari suntingan Anda. Tetapi PCA (atau SVD) hanyalah rotasi itu sendiri (kasus khusus rotasi ortogonal dari sumbu). Setiap terjemahan (seperti pemusatan) atau penyusutan / dilatasi (seperti penskalaan) cloud harus memengaruhi hasil rotasi ini.
ttnphns
7

Anda benar bahwa memiliki variabel individual dengan varian yang sangat berbeda dapat menimbulkan masalah untuk PCA, terutama jika perbedaan ini disebabkan oleh unit yang berbeda atau dimensi fisik yang berbeda. Untuk alasan itu, kecuali semua variabel dapat dibandingkan (jumlah fisik yang sama, unit yang sama), disarankan untuk melakukan PCA pada matriks korelasi dan bukan matriks kovarians. Lihat disini:

Melakukan PCA pada matriks korelasi sama dengan standarisasi semua variabel sebelum analisis (dan kemudian melakukan PCA pada matriks kovarians). Standarisasi berarti memusatkan dan kemudian membagi masing-masing variabel dengan deviasi standarnya, sehingga semuanya menjadi varian unit. Ini dapat dilihat sebagai "perubahan unit" yang nyaman, untuk membuat semua unit dapat dibandingkan.

Orang bisa bertanya apakah kadang-kadang ada cara yang lebih baik untuk "menormalkan" variabel; mis. seseorang dapat memilih untuk membaginya dengan beberapa estimasi varian yang kuat, bukan oleh varians mentah. Ini ditanyakan di utas berikut, dan lihat diskusi berikutnya (meskipun tidak ada jawaban pasti diberikan di sana):

Akhirnya, Anda khawatir bahwa normalisasi dengan standar deviasi (atau yang serupa) bukan rotasi invarian. Ya tidak. Tapi, seperti yang dikatakan @whuber dalam komentar di atas, tidak ada cara rotasi invarian untuk melakukannya: mengubah unit variabel individual bukanlah operasi invarian rotasi ! Tidak ada yang perlu dikhawatirkan di sini.

amuba kata Reinstate Monica
sumber
Saya mendapatkannya untuk PCA. Tetapi apakah itu juga direkomendasikan untuk melakukan normalisasi apa pun sebelum menjalankan Dekomposisi Nilai Tunggal?
hipoglucido
4

Teknik umum sebelum menerapkan PCA adalah dengan mengurangi mean dari sampel. Jika Anda tidak melakukannya, vektor eigen pertama akan menjadi mean. Saya tidak yakin apakah Anda telah melakukannya tetapi biarkan saya membicarakannya. Jika kita berbicara dalam kode MATLAB: ini

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')

Seperti yang dapat dilihat dari gambar, saya pikir Anda harus mengurangi mean dari data jika Anda ingin menganalisis varians (co) yang lebih baik. Maka nilainya tidak akan antara 10-100 dan 0,1-1, tetapi rata-rata semua akan menjadi nol. Varians akan ditemukan sebagai nilai eigen (atau kuadrat dari nilai singular). Vektor eigen yang ditemukan tidak terpengaruh oleh skala dimensi untuk kasus ketika kita mengurangi rata-rata sebanyak kasus ketika kita tidak. Sebagai contoh, saya telah menguji dan mengamati hal-hal berikut yang memberi tahu mengurangi mean mungkin penting untuk kasus Anda. Jadi masalahnya mungkin hasil bukan dari varians tetapi dari perbedaan terjemahan.

% 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

masukkan deskripsi gambar di sini

petrichor
sumber
1
Saya seharusnya menyebutkan dalam pertanyaan bahwa nilai tengah telah dikurangi. Saya akan mengeditnya sesuai.
Szabolcs
1
Seseorang mungkin saja membagi setiap variabel dengan standar deviasinya, tetapi saya bertanya-tanya apakah ada hal-hal lain yang dilakukan orang. Sebagai contoh, kita dapat menganggap dataset ini sebagai awan titik dalam ruang dimensi- . Apakah ada cara untuk melakukannya dengan cara yang tidak bergantung pada rotasi di ruang -d ini? Jika kita membaginya dengan standar deviasi, akan menjadi masalah di mana sumbu standar deviasi tersebut diambil (yaitu bukan invarian rotasi). Jika kita melakukannya di sepanjang sumbu utama, maka saya pikir variabel akan tampak tidak berkorelasi. NNN
Szabolcs
1
Saya menyadari mungkin tidak ada cara rotasi-invarian untuk melakukannya, tapi saya ingin setidaknya membaca beberapa diskusi tentang masalah ini ... setiap petunjuk selamat datang. Catatan: Saya tidak memiliki pelatihan stat terapan (hanya matematika, seperti linalg, teori prob), jadi saya mempelajari hal-hal ini saat saya akan pergi.
Szabolcs
1
Ketika Anda tidak memusatkan sampel (kurangi rata-rata dari kolom), vektor eigen pertama biasanya bukan vektor rata-rata.
whuber
-1 Diturunkan, karena jawaban ini hanya tentang pemusatan, sedangkan pertanyaannya adalah tentang penskalaan. Juga, klaim bahwa vektor eigen pertama adalah vektor berarti salah, seperti dicatat oleh @whuber.
Amuba mengatakan Reinstate Monica
-5

Untuk menormalkan data untuk PCA, rumus berikut juga digunakan

SC=100X-min(X)maks(X)-min(X)

di mana adalah nilai mentah untuk indikator itu untuk negara pada tahun , dan menggambarkan semua nilai mentah di semua negara untuk indikator itu sepanjang tahun.c t XXctX

Ali
sumber
7
Siapa yang mengatakan sesuatu tentang negara atau tahun?
Nick Stauner