Belajar bersama saya: Aljabar Linier untuk Ilmu Data — Bagian 4: Tunggal… – Menuju AI

Belajar bersama saya: Aljabar Linier untuk Ilmu Data — Bagian 4: Tunggal… – Menuju AI

Pengarang: Matthew Macias

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

Pelajari bersama saya: Aljabar Linier untuk Ilmu Data — Bagian 4: Dekomposisi Nilai Singular

Selamat datang di bagian selanjutnya dari deret aljabar linier! Kami akan membahas Dekomposisi Nilai Singular dan perannya yang sangat besar dalam Ilmu Data. Artikel ini akan lebih teknis dari sebelumnya, tapi itu hanya karena kita mencapai beberapa topik yang lebih maju setelah meletakkan dasar kita. Jangan khawatir, semua yang telah Anda pelajari sebelumnya telah mempersiapkan Anda untuk saat ini!

Pengantar SVD

Hanya namanya terdengar menakutkan dan luar biasa, saya tahu.

Setiap kali seseorang menyebutkan SVD. Foto oleh Michelle Tresemer di Unsplash

Tetapi saya meyakinkan Anda bahwa pada saat artikel ini selesai, Anda akan memiliki pemahaman yang baik tentang SVD dan aplikasinya dalam Ilmu Data. Mari kita mulai dengan contoh matriks A:

Sumber: Gambar yang dihasilkan oleh penulis.

Apa yang memungkinkan SVD untuk kita lakukan, adalah merepresentasikan matriks A sebagai produk dari tiga matriks lainnya. Diberikan oleh:

Sumber: Gambar yang dihasilkan oleh penulis.

Jika kami memperluas representasi kami di atas, itu akan terlihat seperti ini:

Sumber: Gambar yang dihasilkan oleh penulis.

Oke, jadi itu banyak yang harus diambil. Tapi kita akan segera menemukan apa arti semua ini dan mengembangkan intuisi untuk apa yang diwakilinya. Sampai saat itu, mari kita bahas beberapa dasar-dasarnya.

Matriks masukan A adalah matriks M x N. Kita dapat melihat bahwa U berbentuk M x M , (Sigma) berbentuk M x N dan V berbentuk N x N . Itu mungkin tampak agak aneh pada awalnya, tetapi di bagian selanjutnya, kita akan menemukan bagaimana bentuk matriks ini muncul. Untuk saat ini, perhatikan saja mereka. Mungkin yang paling penting untuk dibahas adalah jenis matriks yang U, , dan V.

U dan V adalah apa yang disebut matriks ortonormal (bagi yang sudah membaca Bagian 1 dari deret ini, Anda akan tahu apa artinya ortogonal). Matriks ortonormal hanyalah matriks yang kolomnya saling ortogonal, dan setiap vektor kolom memiliki panjang satu. Properti paling menarik yang dihasilkan dari matriks ortonormal adalah kenyataan bahwa transposnya adalah kebalikannya. Artinya:

Sumber: Gambar yang dihasilkan oleh penulis.

Meskipun ini mungkin tampak tidak penting sekarang, fakta bahwa matriks-matriks ini berperilaku seperti ini memungkinkan SVD menjadi sangat berguna. Akhirnya, adalah matriks diagonal yang berisi apa yang dikenal sebagai ‘nilai tunggal’ sepanjang sumbu diagonal, semua entri lainnya adalah nol. Menjadi diagonal, tidak terpengaruh oleh operasi transpos, ini akan berguna nanti juga.

Bagian pengantar terakhir adalah pemahaman bahwa semua matriks ini dipesan dalam hal signifikansi. Artinya, nilai singular pertama dalam lebih penting daripada yang kedua, yang lebih penting daripada yang ketiga, dst. Hal ini juga berlaku untuk U dan V, di mana vektor-vektor pertama adalah yang paling penting karena mereka berkorespondensi dengan nilai tunggal tertinggi.

Jadi, apa yang sebenarnya diwakili oleh U, , dan V?

Bagaimana jika saya memberi tahu Anda bahwa teman-teman kita, vektor eigen dan nilai eigen, akan kembali ke pesta?

Menunggu eigenfriends kembali. Foto oleh Diana di Pexels

Ini akan mulai sedikit abstrak tapi percayalah padaku! Mari kita mulai dengan matriks korelasi kolom yang dapat dibuat di bawah ini:

Sumber: Gambar yang dihasilkan oleh penulis.

Sekarang, kita telah menguraikan sebelumnya bahwa kita dapat menguraikan matriks apa pun menjadi produk dari tiga matriks U, dan V. Jadi, untuk memulai, mari kita ganti semua kemunculan matriks asli kita dengan matriks terdekomposisinya. Ini akan memberi kita di bawah ini:

Sumber: Gambar yang dihasilkan oleh penulis.

Mengingat bahwa matriks U ortonormal, maka U^TU hanya membatalkan ke matriks identitas, sehingga tersisa di bawah ini:

Sumber: Gambar yang dihasilkan oleh penulis

Di atas sebenarnya adalah bentuk untuk eigendecomposition. Dimana V berisi vektor eigen dan berisi nilai eigen. Jadi apa poin terbesar yang saya dapatkan di sini?

V sebenarnya menangkap vektor eigen dari matriks korelasi kolom ini, dan menangkap nilai eigen dari matriks korelasi tersebut. Ini masuk akal karena V mengambil bentuk jumlah kolom di kedua dimensi. Jadi jika matriks input A memiliki 10 kolom, V akan menjadi matriks 10 kali 10.

Jadi kita telah membahas V dan , bagaimana dengan U?

Kita dapat melalui logika yang sama persis seperti di atas untuk mengungkap apa isi matriks U. Karena V adalah vektor eigen dari matriks korelasi kolom, U adalah vektor eigen dari matriks korelasi baris, dilambangkan dengan:

Sumber: Gambar yang dihasilkan oleh penulis.

Sekali lagi, V adalah matriks ortonormal, sehingga dikalikan dengan transposnya membatalkan matriks identitas, dan kita mendapatkan:

Sumber: Gambar yang dihasilkan oleh penulis.

Dimana U berisi vektor eigen dan berisi nilai eigen (nilai eigen yang sama yang kita temukan sebelumnya, keren, kan?). Semua ini agar Anda dapat membangun intuisi tentang matriks U, , dan V dalam SVD. Untuk meringkas semuanya menjadi satu kalimat, U berisi vektor eigen dari matriks korelasi baris, berisi nilai eigen, dan V berisi vektor eigen dari matriks korelasi kolom.

Secara umum, Anda tidak akan pernah menghitung SVD dengan melakukan dekomposisi eigen dari matriks korelasi. Matriks korelasi bisa menjadi cukup besar, terutama U, sehingga dibutuhkan banyak komputasi untuk menurunkannya. Metode populer untuk menghitung SVD dikenal sebagai faktorisasi QR, yang menjadi dasar implementasi NumPy.

Pendekatan Matriks

Cara lain agar kita dapat mulai berpikir tentang SVD adalah dengan menguraikan matriks asli menjadi jumlah matriks peringkat 1 (ada alasan mengapa kami menghabiskan waktu lama untuk memahami peringkat matriks, lihat Bagian 2 untuk info lebih lanjut). Mari kita lihat contoh asli kita:

Sumber: Gambar yang dihasilkan oleh penulis.

Jika kita mengalikan matriks U, , dan V di ruas kanan, kita akan mendapatkan hasil sebagai berikut:

Sumber: Gambar yang dihasilkan oleh penulis.

Vektor kolom pertama dari U dikalikan dengan nilai singular pertama di bersama dengan vektor baris pertama di V. Anda dapat melanjutkan ini untuk semua kombinasi U, , dan V.

Ingat bahwa elemen di U, , dan V diurutkan berdasarkan kepentingan, sehingga elemen pertama lebih penting daripada elemen kedua, dll. dari matriks untuk membuat peringkat r pendekatan terbaik dari matriks asli kami. Hal ini mengakibatkan U menjadi mxr, menjadi rxr, dan V menjadi rx n.

Matriks setelah menghapus entri dari r+1 dan seterusnya. Sumber: Gambar yang dihasilkan oleh penulis.

Dengan melakukan ini, kita mendapatkan matriks yang jauh lebih kecil yang masih dapat menggambarkan matriks asli A dengan presisi relatif. Anda dapat mulai melihat bagaimana SVD akan berguna dalam teknik pengurangan dimensi!

Pembalikan Semu

Mungkin aplikasi SVD yang paling berguna untuk Ilmu Data adalah kemampuannya untuk membalikkan matriks nonkuadrat. Pada titik ini, kita sudah familiar dengan representasi sistem persamaan linear di bawah ini:

Sumber: Gambar yang dihasilkan oleh penulis.

Dan kita tahu bahwa untuk menyelesaikan sistem ini, di mana A adalah matriks data yang diketahui dan b adalah vektor label yang diketahui, kita harus membalikkan matriks A. Sampai sekarang, kita hanya berasumsi bahwa ini mungkin dengan menggunakan metode konvensional metode. Namun, jika matriksnya non-persegi (yang kemungkinan besar akan selalu demikian) maka ini tidak akan berhasil. SVD memperkenalkan metodologi yang memungkinkan kita untuk membalikkan matriks non-kuadrat ini dan menyelesaikan sistem linier.

Anda mungkin memperhatikan sedikit tren di sini, tetapi sekali lagi kami akan mengganti matriks A dengan SVD-nya.

Sumber: Gambar yang dihasilkan oleh penulis.

Sekarang, ada beberapa hal yang perlu kita lakukan untuk dapat menyelesaikan x. Mereka bergantung pada pemahaman kita tentang komposisi U, , dan V. Kita dapat mengisolasi x dengan melakukan hal berikut:

Sumber: Gambar yang dihasilkan oleh penulis.

Karena U dan V ortonormal, kita dapat mengalikannya dengan transposnya untuk menghilangkannya. Untuk kita masih perlu mengalikannya dengan invers tradisionalnya. Anda dapat melihat bahwa semuanya kecuali x akan dibatalkan di sisi kiri. Yang tersisa dari kita adalah:

Sumber: Gambar yang dihasilkan oleh penulis.

Anda akan melihat bahwa kami telah membalikkan semua komponen SVD. Inilah yang dikenal sebagai invers semu, dan ini memberi kekuatan pada semua inversi matriks non-persegi! Ini lebih formal dilambangkan sebagai:

Sumber: Gambar yang dihasilkan oleh penulis.

Sejauh ini, kami telah membahas kasus penggunaan teratas untuk SVD dalam Ilmu Data tetapi akhirnya mari kita ke bagian yang baik…

Bagaimana cara menghitung SVD dengan Python?

Untuk memulai, mari kita buat matriks acak untuk bereksperimen dengan:

impor numpy sebagai np A = np.random.rand(80,40)

Ini baru saja membuat matriks dengan 80 baris dan 40 kolom. Untuk menguraikan matriks ini menggunakan SVD, kita perlu menjalankan:

U, S, V = np.linalg.svd(A, full_matrices=True)

Itu dia. Pekerjaan selesai. Mari kita selidiki lebih jauh untuk memastikan bahwa teori yang kita bahas sebelumnya benar. Kami menetapkan bahwa U didasarkan pada matriks korelasi baris dan oleh karena itu harus berbentuk jumlah baris x jumlah baris. Saat kita menjalankan:

>>> U.shape
(80,80)

Anda akan melihat bahwa ia mengembalikan bahwa bentuknya adalah (80,80) , yang persis seperti yang kita harapkan. Mari kita ulangi untuk dan V.

>>> S.bentuk
(40,) >>> V.shape
(40,40)

Jadi V memeriksa, tapi apa yang terjadi dengan ? Apakah saya berbohong kepada Anda? Yah tidak, NumPy mengembalikan nilai tunggal sebagai vektor. Kita dapat membuat ulang dalam bentuk yang lebih tradisional tetapi sedikit lebih terlibat.

>>> sigma = np.zeros(A.shape, S.dtype)
>>> sigma.shape
(80,40) >>> np.fill_diagonal(sigma, S)

Pada dasarnya apa yang terjadi adalah bahwa sebuah matriks dengan bentuk yang sama dengan matriks input telah dibuat, dan kami menambahkan nilai singular di sepanjang diagonal. Akhirnya, mari kita merekonstruksi matriks A asli kita menggunakan U, , dan V.

>>> A_baru = np.dot(U[:, :40] * S, V)

Anda akan melihat bahwa kita harus mengurangi ukuran U untuk menyelesaikan rekonstruksi, tetapi ini dapat dihindari dengan menyetel full_matrices=False dalam fungsi SVD asli.

Kesimpulan

Itu adalah bagian lain dari aljabar linier untuk seri Ilmu Data. Mudah-mudahan, semua bagian mulai cocok, dan Anda dapat melihat seberapa kuat pemahaman baru Anda tentang aljabar linier dalam perjalanan Ilmu Data Anda. Selanjutnya, kami akhirnya akan meliput PCA (saya tahu Anda semua gemetar karena kegembiraan). Seperti biasa, saya sarankan Anda memeriksa bagian lain dari seri ini (Bagian 1, Bagian 2, Bagian 3) jika Anda belum mendapatkan pemahaman yang kuat tentang aljabar linier untuk Ilmu Data.

Belajar bersama saya: Aljabar Linier untuk Ilmu Data — Bagian 4: Dekomposisi Nilai Singular awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Scott Anderson