Pertama-tama, pengurangan dimensi digunakan ketika Anda memiliki banyak dimensi covariated dan ingin mengurangi ukuran masalah dengan memutar titik data menjadi basis ortogonal baru dan hanya mengambil sumbu dengan varian terbesar. Dengan 8 variabel (kolom), ruang Anda sudah berdimensi rendah, mengurangi jumlah variabel lebih lanjut tidak mungkin menyelesaikan masalah teknis dengan ukuran memori, tetapi mungkin banyak mempengaruhi kualitas dataset. Dalam kasus nyata Anda, lebih menjanjikan untuk melihat pembelajaran onlinemetode. Secara kasar, alih-alih bekerja dengan seluruh dataset, metode ini mengambil sebagian kecil dari mereka (sering disebut sebagai "mini-batch") sekaligus dan membangun model secara bertahap. (Saya pribadi suka mengartikan kata "online" sebagai referensi ke beberapa sumber data yang sangat panjang dari Internet seperti umpan Twitter, di mana Anda tidak dapat memuat seluruh dataset sekaligus).
Tetapi bagaimana jika Anda benar-benar ingin menerapkan teknik pengurangan dimensionalitas seperti PCA ke dataset yang tidak sesuai dengan memori? Biasanya dataset disajikan sebagai matriks data X ukuran n x m , di mana n adalah jumlah pengamatan (baris) dan m adalah sejumlah variabel (kolom). Biasanya masalah dengan memori hanya berasal dari salah satu dari dua angka ini.
Terlalu banyak pengamatan (n >> m)
Ketika Anda memiliki terlalu banyak pengamatan , tetapi jumlah variabel dari kecil hingga sedang, Anda dapat membuat matriks kovarians secara bertahap . Memang, PCA khas terdiri dari membangun matriks kovarians ukuran m x m dan menerapkan dekomposisi nilai singular untuk itu. Dengan m = 1000 variabel tipe float64, matriks kovarians memiliki ukuran 1000 * 1000 * 8 ~ 8Mb, yang mudah masuk ke dalam memori dan dapat digunakan dengan SVD. Jadi, Anda hanya perlu membangun matriks kovarians tanpa memuat seluruh dataset ke dalam memori - tugas yang cukup mudah dikerjakan .
Atau, Anda dapat memilih sampel representatif kecil dari dataset Anda dan memperkirakan matriks kovarians . Matriks ini akan memiliki semua properti yang sama seperti normal, hanya sedikit kurang akurat.
Terlalu banyak variabel (n << m)
Di sisi lain, kadang-kadang, ketika Anda memiliki terlalu banyak variabel , matriks kovarians itu sendiri tidak akan masuk ke dalam memori. Misalnya jika Anda bekerja dengan gambar 640x480, setiap pengamatan memiliki 640 * 480 = 307200 variabel, yang menghasilkan matriks kovarians 703Gb! Jelas bukan itu yang ingin Anda simpan di memori komputer Anda, atau bahkan di memori cluster Anda. Jadi kita perlu mengurangi dimensi tanpa membangun matriks kovarians sama sekali.
Metode favorit saya untuk melakukannya adalah Proyeksi Acak . Singkatnya, jika Anda memiliki dataset X ukuran n x m , Anda dapat mengalikannya dengan beberapa matriks acak R yang jarang berukuran m x k (dengan k << m ) dan mendapatkan matriks X baru dari ukuran yang jauh lebih kecil n x k dengan kira-kira properti yang sama seperti yang asli. Mengapa ini berhasil? Nah, Anda harus tahu bahwa PCA bertujuan untuk menemukan set sumbu ortogonal (komponen utama) dan memproyeksikan data Anda ke pertama kdari mereka. Ternyata vektor acak jarang hampir ortogonal dan dengan demikian juga dapat digunakan sebagai dasar baru.
Dan, tentu saja, Anda tidak perlu melipatgandakan seluruh dataset X dengan R - Anda dapat menerjemahkan setiap observasi x menjadi basis baru secara terpisah atau dalam mini-batch.
Ada juga algoritma yang agak mirip disebut Random SVD . Saya tidak punya pengalaman nyata dengan itu, tetapi Anda dapat menemukan kode contoh dengan penjelasan di sini .
Sebagai garis bawah, inilah daftar periksa singkat untuk pengurangan dimensionalitas dataset besar:
- Jika Anda belum memiliki banyak dimensi (variabel), cukup gunakan algoritma pembelajaran online.
- Jika ada banyak pengamatan, tetapi sejumlah moderat variabel (matriks kovarians cocok dengan memori), buat matriks secara bertahap dan gunakan SVD normal.
- Jika jumlah variabel terlalu tinggi, gunakan algoritma tambahan.