Bagaimana memilih kernel untuk PCA kernel?


12

Apa cara untuk memilih kernel apa yang akan menghasilkan pemisahan data yang baik dalam output data akhir oleh kernel PCA (analisis komponen utama), dan apa saja cara untuk mengoptimalkan parameter kernel?

Istilah awam jika memungkinkan akan sangat dihargai, dan tautan ke makalah yang menjelaskan metode seperti itu juga akan menyenangkan.


1
Ketika Anda mengatakan "pemisahan data yang baik", apa sebenarnya yang Anda maksud? Aplikasi kernel PCA apa yang Anda pikirkan? Jika ada hubungannya dengan "pemisahan data", maka apakah Anda mungkin menggunakan beberapa teknik klasifikasi (seperti mesin vektor dukungan kernel) daripada kPCA? Terlepas dari semua itu, pertanyaan bagus, +1. Saya tidak memiliki pengalaman dengan pilihan kernel, jadi tidak dapat membantu Anda di sini.
Amuba kata Reinstate Monica

@amoeba Ini akan digunakan untuk Pengurangan Dimensi Nonlinear. Pengetahuan saya tentang vektor dukungan agak terbatas karena saya tidak pernah mengikuti kursus CS; Saya seorang mahasiswa dan telah belajar melalui makalah online. Yang dimaksud dengan "pemisahan data yang baik" adalah apa yang ditunjukkan oleh contoh-contoh yang diplot dalam makalah ini . Saya bekerja dengan Matlab dan kode PCA kernel saya sudah berjalan dan berjalan untuk kernel sederhana, poli, radial, dan sigmoid, tetapi akan sangat membantu untuk mengetahui kapan harus menggunakan mana untuk hasil terbaik.
Chives

Saya pikir cara terbaik (hanya?) Untuk memilih kernel adalah dengan menggunakan cross-validation, lihat di sini: Bagaimana memilih kernel untuk SVM? Anda hanya perlu memiliki ukuran kinerja untuk kPCA Anda untuk menggunakan validasi silang. Pemisahan kelas bisa menjadi ukuran yang layak jika itu adalah apa yang Anda setelah, tetapi catatan bahwa PCA / kPCA tidak dirancang sama sekali untuk menghasilkan pemisahan kelas yang baik; itu hanya memaksimalkan varian yang ditangkap.
Amuba kata Reinstate Monica

Saya sudah membaca dan mungkin bisa menjawab pertanyaan Anda. Tapi mungkin butuh beberapa waktu (hari).
Amoeba berkata Reinstate Monica

@amoeba Memaksimalkan varian tidak masuk akal bagi saya sekarang setelah Anda menyebutkannya. Saya akan memeriksa validasi silang sendiri, tetapi akan lebih bagus jika Anda bisa melihatnya sedikit juga jika Anda dapat menemukan waktu! Terima kasih.
Chives

Jawaban:


7

Pendekatan umum untuk memilih kernel optimal (baik tipe kernel, atau parameter kernel) dalam metode berbasis kernel apa pun adalah cross-validation. Lihat di sini untuk pembahasan pemilihan kernel untuk mesin-mesin vektor pendukung: Bagaimana memilih kernel untuk SVM?

Gagasan di balik cross-validation adalah bahwa kita meninggalkan beberapa data "tes", jalankan algoritma kami agar sesuai dengan model pada data "pelatihan" yang tersisa, dan kemudian periksa seberapa baik model yang dihasilkan menggambarkan data uji (dan seberapa besar kesalahannya) adalah). Ini diulangi untuk data kiri-keluar yang berbeda, kesalahan dirata-rata untuk membentuk kesalahan lintas-rata-rata yang divalidasi, dan kemudian algoritma yang berbeda dapat dibandingkan untuk memilih satu yang menghasilkan kesalahan terendah. Dalam SVM kita dapat menggunakan misalnya akurasi klasifikasi (atau ukuran terkait) sebagai ukuran kinerja model. Maka orang akan memilih kernel yang menghasilkan klasifikasi terbaik dari data uji.

Pertanyaannya kemudian menjadi: ukuran kinerja model apa yang dapat digunakan seseorang di kPCA? Jika Anda ingin mencapai "pemisahan data yang baik" (mungkin pemisahan kelas yang baik), maka Anda dapat mengukurnya pada data pelatihan dan menggunakannya untuk menemukan kernel terbaik. Perhatikan, bagaimanapun, bahwa PCA / kPCA tidak dirancang untuk menghasilkan pemisahan data yang baik (mereka tidak memperhitungkan label kelas sama sekali ). Jadi secara umum, yang satu ingin ukuran kinerja model yang lain, tidak terkait kelas.

Dalam PCA standar seseorang dapat menggunakan kesalahan rekonstruksi sebagai ukuran kinerja pada set tes. Dalam kernel PCA kita juga dapat menghitung kesalahan rekonstruksi, tetapi masalahnya adalah bahwa itu tidak dapat dibandingkan antara kernel yang berbeda: kesalahan rekonstruksi adalah jarak yang diukur dalam ruang fitur target; dan kernel yang berbeda sesuai dengan ruang target yang berbeda ... Jadi kita punya masalah.

Salah satu cara untuk mengatasi masalah ini adalah entah bagaimana menghitung kesalahan rekonstruksi di ruang asli, bukan di ruang target. Jelas titik data uji yang ditinggalkan tinggal di ruang asli. Tetapi rekonstruksi kPCA-nya tinggal di [subruang dimensi rendah] ruang target. Apa yang bisa dilakukan seseorang adalah menemukan titik ("pra-gambar") di ruang asli yang akan dipetakan sedekat mungkin ke titik rekonstruksi ini, dan kemudian mengukur jarak antara titik uji dan gambar awal ini sebagai kesalahan rekonstruksi.

Saya tidak akan memberikan semua rumus di sini, tetapi merujuk Anda ke beberapa makalah dan hanya memasukkan beberapa angka di sini.

Gagasan "pra-gambar" di kPCA tampaknya diperkenalkan dalam makalah ini:

Mika et al. tidak melakukan cross-validation, tetapi mereka membutuhkan pra-gambar untuk tujuan de-noising, lihat gambar ini:

kPCA de-noising dari Mika et al.

Poin denoised (tebal) adalah pra-gambar proyeksi kPCA (tidak ada tes dan pelatihan di sini). Ini bukan tugas sepele untuk menemukan pra-gambar ini: seseorang perlu menggunakan gradient descent, dan fungsi loss akan bergantung pada kernel.

Dan di sini adalah makalah yang sangat baru yang menggunakan pra-gambar untuk keperluan validasi silang dan pemilihan kernel / hyperparameter:

Ini adalah algoritme mereka:

Alam dan Fukumizu

Dan inilah beberapa hasil (yang menurut saya cukup jelas):

Alam dan Fukumizu


1
(+1) Mungkin berguna untuk mencatat bahwa pra-gambar ini adalah himpunan sarana Fréchet / Karcher dari titik-titik yang ditetapkan untuk kluster yang diberikan, bukan yang selalu membantu dengan apa pun.
Dougal

xxyyzz

Setelah dipikir-pikir, saya kira saya tidak cukup memperhatikan sebelumnya; komentar saya berlaku untuk kernel k-means, bukan kPCA. Preimage pasti terkait dengan konsep itu, tetapi tidak sama sekali. Maaf atas kebisingannya. :)
Dougal
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.