Saya mencoba mengurangi dimensi dan derau dataset dengan melakukan PCA pada dataset dan membuang beberapa PC terakhir. Setelah itu, saya ingin menggunakan beberapa algoritma pembelajaran mesin pada PC yang tersisa, dan karena itu saya ingin menormalkan data dengan menyamakan varians PC untuk membuat algoritma bekerja lebih baik.
Satu cara sederhana adalah dengan hanya menormalkan varians ke nilai unit. Namun, PC pertama berisi lebih banyak varians dari dataset asli daripada yang berikut, dan saya masih ingin memberikan lebih banyak "bobot". Karena itu saya bertanya-tanya: adakah cara sederhana untuk hanya memisahkan variansnya dan membaginya dengan PC dengan varian yang lebih sedikit?
Cara lain adalah memetakan PC kembali ke ruang fitur asli, tetapi dalam hal itu dimensi juga akan meningkat ke nilai aslinya.
Saya kira lebih baik untuk menjaga kolom yang dihasilkan ortogonal, tetapi itu tidak perlu saat ini.
sumber
Jawaban:
Tidak sepenuhnya jelas bagi saya bahwa apa yang Anda tanyakan adalah apa yang benar-benar Anda butuhkan: langkah preprocessing yang umum dalam pembelajaran mesin adalah pengurangan dimensi + pemutihan, yang berarti melakukan PCA dan menstandarisasi komponen, tidak ada yang lain. Tetapi saya akan tetap fokus pada pertanyaan Anda seperti yang dirumuskan, karena itu lebih menarik.
Biarkan menjadi pusat data matriks dengan titik data dalam baris dan variabel dalam kolom. PCA sama dengan dekomposisi nilai singular mana untuk melakukan pengurangan dimensionalitas kita hanya menyimpan komponen . "Rotasi faktor" ortogonal dari komponen-komponen ini menyiratkan memilih ortogonal matrix dan menghubungkannya ke dalam dekomposisi: n × d X = U S V ⊤ ≈ U k S k V ⊤ kX n×d k k × k R X ≈ U k S k V ⊤ k = U k R R ⊤ S k V ⊤ k = √
Sekarang kita siap untuk merumuskan masalah dalam istilah matematika: diberikan pembebanan yang tidak diputar , cari matriks rotasi sedemikian rupa sehingga pembebanan yang diputar, , memiliki jumlah kuadrat yang sama di setiap kolom. RLRL=VkSk/n−1−−−−−√ R LR
Mari kita selesaikan. Jumlah kolom kuadrat setelah rotasi sama dengan elemen diagonal Ini masuk akal: rotasi hanya mendistribusikan ulang varian komponen, yang awalnya diberikan oleh , di antara mereka, sesuai dengan rumus ini. Kita perlu mendistribusikannya kembali sehingga semuanya menjadi sama dengan nilai rata-rata mereka .s 2 i /(n-1)μ
Saya tidak berpikir ada solusi bentuk tertutup untuk ini, dan sebenarnya ada banyak solusi berbeda. Tetapi solusi dapat dengan mudah dibangun secara berurutan:
Ini akan mendistribusikan ulang semua varian secara merata dengan urutan rotasi 2D. Mengalikan semua matriks rotasi ini bersama-sama akan menghasilkan keseluruhan .(k−1) R
Contoh
Pertimbangkan matriks :Varians rata-rata adalah . Algoritme saya akan diproses sebagai berikut:S2/(n−1)
Langkah 1: putar PC1 dan PC4 sehingga PC1 mendapat varian . Akibatnya, PC4 mendapat varians .5 1+(10−5)=6
Langkah 2: putar PC2 (varian maksimal baru) dan PC3 sehingga PC2 mendapatkan varian . Akibatnya, PC3 mendapat varians .5 3+(6−5)=4
Langkah 3: putar PC4 (varian maksimal baru) dan PC3 sehingga PC4 mendapatkan varian . Akibatnya, PC3 mendapat varians .4 + ( 6 - 1 ) = 55 4+(6−1)=5
Selesai
Saya menulis skrip Matlab yang mengimplementasikan algoritma ini (lihat di bawah). Untuk matriks input ini, urutan sudut rotasi adalah:
Varians komponen setelah setiap langkah (dalam baris):
Matriks rotasi akhir (produk dari tiga matriks rotasi 2D):
Dan matriks terakhir adalah:(LR)⊤LR
Ini kodenya:
Berikut adalah kode dalam Python yang disediakan oleh @feilong:
Perhatikan bahwa masalah ini benar-benar setara dengan yang berikut: diberikan variabel tidak berkorelasi dengan varians , temukan rotasi (yaitu basis ortogonal baru) yang akan menghasilkan variabel dengan varians yang sama (tetapi tentu saja tidak berkorelasi lagi).σ 2 i kk σ2i k
sumber
mu
.tetapi belum menunjukkan dari mana persamaan ini berasal; mungkin berpikir bahwa itu jelas tanpa penjelasan. Jelas atau tidak, saya percaya itu layak dijelaskan - dengan cara tertentu. Jawaban saya menyajikan satu cara.
sumber
Jika saya menginterpretasikan hal-hal dengan benar, maksud Anda bahwa komponen prinsip pertama (nilai eigen) menjelaskan sebagian besar varian dalam data. Ini dapat terjadi ketika metode kompresi Anda linier. Namun, mungkin ada dependensi non-linear di ruang fitur Anda.
Berikut ini adalah contoh scikit di mana mereka melakukan pencarian grid untuk menemukan jumlah optimal komponen utama yang harus disimpan (hyper-parameter) menggunakan PCA. Akhirnya mereka menerapkan Regresi Logistik di ruang dimensi bawah: http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html#example-plot-digits-pipe-py
Protip: Autoencoder tidak memiliki solusi bentuk tertutup (afaik) jadi jika konteks Anda adalah streaming data, ini berarti Anda dapat terus memperbarui autencoder Anda (representasi terkompresi) dan dengan demikian dapat mengkompensasi hal-hal seperti penyimpangan konsep. Dengan pca, Anda harus melatih kembali mode batch dari waktu ke waktu saat data baru masuk.
Untuk memberi beberapa fitur lebih "berat", lihat regularisasi (saya akan mulai dari norma https://en.wikipedia.org/wiki/Norm_(mathematics) ). Anda mungkin juga terkejut betapa miripnya regresi logistik dengan perceptron.
sumber