Saya punya aplikasi di mana akan berguna untuk mengelompokkan dataset yang berisik sebelum mencari efek subkelompok di dalam kluster. Saya pertama kali melihat PCA, tetapi dibutuhkan ~ 30 komponen untuk mencapai 90% dari variabilitas, jadi pengelompokan hanya pada beberapa PC akan membuang banyak informasi.
Saya kemudian mencoba t-SNE (untuk pertama kalinya), yang memberi saya bentuk aneh dalam dua dimensi yang sangat cocok untuk pengelompokan melalui k-means. Terlebih lagi, menjalankan hutan acak pada data dengan tugas cluster sebagai hasilnya menunjukkan bahwa cluster memiliki interpretasi yang cukup masuk akal mengingat konteks masalah, dalam hal variabel yang membentuk data mentah.
Tetapi jika saya akan melaporkan kluster ini, bagaimana saya menggambarkannya? K-means cluster pada komponen utama mengungkapkan individu yang berdekatan satu sama lain dalam hal variabel turunan yang terdiri dari X% dari varians dalam dataset. Pernyataan setara apa yang dapat dibuat tentang klaster t-SNE?
Mungkin sesuatu dengan efek:
t-SNE mengungkapkan perkiraan kedekatan dalam manifold dimensi tinggi yang mendasarinya, jadi klaster pada representasi dimensi rendah dari ruang dimensi tinggi memaksimalkan "kemungkinan" bahwa individu yang berdekatan tidak akan berada dalam kelompok yang sama
Adakah yang bisa mengusulkan uraian yang lebih baik dari itu?
sumber
Jawaban:
Masalah dengan t-SNE adalah bahwa ia tidak menjaga jarak atau kepadatan. Hanya sampai batas tertentu mempertahankan tetangga terdekat. Perbedaannya halus, tetapi memengaruhi algoritme berbasis kepadatan atau jarak.
Untuk melihat efek ini, cukup buat distribusi Gaussian multivarian. Jika Anda memvisualisasikan ini, Anda akan memiliki bola yang padat dan jauh lebih sedikit padat, dengan beberapa outlier yang bisa sangat jauh.
Sekarang jalankan t-SNE pada data ini. Anda biasanya akan mendapatkan lingkaran dengan kepadatan yang agak seragam. Jika Anda menggunakan kebingungan rendah, mungkin ada beberapa pola aneh di sana. Tapi Anda tidak bisa membedakan outlier lagi.
Sekarang mari kita buat lebih rumit. Mari kita gunakan 250 poin dalam distribusi normal pada (-2,0), dan 750 poin dalam distribusi normal pada (+2,0).
Ini seharusnya merupakan kumpulan data yang mudah, misalnya dengan EM:
Jika kita menjalankan t-SNE dengan kebingungan standar 40, kita mendapatkan pola berbentuk aneh:
Tidak buruk, tetapi juga tidak mudah untuk dikelompokkan, bukan? Anda akan kesulitan menemukan algoritma pengelompokan yang bekerja di sini persis seperti yang diinginkan. Dan bahkan jika Anda akan meminta manusia untuk mengelompokkan data ini, kemungkinan besar mereka akan menemukan lebih dari 2 cluster di sini.
Jika kita menjalankan t-SNE dengan kebingungan yang terlalu kecil seperti 20, kita mendapatkan lebih dari pola-pola ini yang tidak ada:
Ini akan mengelompok mis dengan DBSCAN, tetapi akan menghasilkan empat cluster. Jadi berhati-hatilah, t-SNE dapat menghasilkan pola "palsu"!
Kesulitan optimal tampaknya sekitar 80 untuk set data ini; tapi saya tidak berpikir parameter ini akan bekerja untuk setiap kumpulan data lainnya.
Sekarang ini secara visual menyenangkan, tetapi tidak lebih baik untuk analisis . Seorang annotator manusia kemungkinan bisa memilih potongan dan mendapatkan hasil yang layak; Namun k-means akan gagal bahkan dalam skenario yang sangat sangat mudah ini ! Anda sudah dapat melihat bahwa informasi kepadatan hilang , semua data tampaknya hidup di daerah dengan kepadatan yang hampir sama. Jika kita lebih lanjut akan meningkatkan kebingungan, keseragaman akan meningkat, dan pemisahan akan berkurang lagi.
Dalam kesimpulan, gunakan t-SNE untuk visualisasi (dan coba berbagai parameter untuk mendapatkan sesuatu yang menyenangkan secara visual!), Tetapi jangan menjalankan pengelompokan setelah itu , khususnya jangan gunakan algoritme berbasis jarak atau kepadatan, karena informasi ini sengaja dibuat (!) kalah. Pendekatan berbasis-lingkungan mungkin baik-baik saja, tetapi kemudian Anda tidak perlu menjalankan t-SNE terlebih dahulu, cukup gunakan tetangga segera (karena t-SNE berusaha menjaga nn-grafik ini sebagian besar tetap utuh).
Lebih banyak contoh
Contoh-contoh ini disiapkan untuk presentasi makalah (tetapi belum dapat ditemukan di makalah, seperti yang saya lakukan percobaan ini nanti)
Pertama, kami memiliki data input ini:
Seperti yang Anda tebak, ini berasal dari gambar "warna saya" untuk anak-anak.
Jika kita menjalankan ini melalui SNE ( BUKAN t-SNE , tapi pendahulunya):
Wow, ikan kita sudah menjadi monster laut! Karena ukuran kernel dipilih secara lokal, kami kehilangan banyak informasi kepadatan.
Tetapi Anda akan sangat terkejut dengan output dari t-SNE:
Saya sebenarnya telah mencoba dua implementasi (ELKI, dan implementasi sklearn), dan keduanya menghasilkan hasil seperti itu. Beberapa fragmen terputus, tetapi masing-masing terlihat agak konsisten dengan data asli.
Dua poin penting untuk menjelaskan ini:
SGD bergantung pada prosedur perbaikan berulang, dan mungkin terjebak dalam optima lokal. Secara khusus, ini menyulitkan algoritma untuk "membalik" bagian dari data yang telah dicerminkannya, karena ini akan memerlukan titik bergerak melalui yang lain yang seharusnya terpisah. Jadi, jika beberapa bagian ikan dicerminkan, dan bagian lainnya tidak dicerminkan, mungkin tidak dapat memperbaikinya.
t-SNE menggunakan distribusi-t di ruang yang diproyeksikan. Berbeda dengan distribusi Gaussian yang digunakan oleh SNE biasa, ini berarti sebagian besar poin akan saling tolak , karena mereka memiliki 0 afinitas dalam domain input (Gaussian mendapatkan nol dengan cepat), tetapi afinitas> 0 dalam domain output. Terkadang (seperti pada MNIST) ini membuat visualisasi yang lebih bagus. Secara khusus, ini dapat membantu "memecah" suatu set data sedikit lebih banyak dari pada domain input. Penolakan tambahan ini juga sering menyebabkan poin untuk lebih merata menggunakan area, yang juga bisa diinginkan. Tapi di sini dalam contoh ini, efek memukul mundur sebenarnya menyebabkan fragmen ikan terpisah.
Kami dapat membantu (pada kumpulan data mainan ini ) masalah pertama dengan menggunakan koordinat asli sebagai penempatan awal, daripada koordinat acak (seperti biasanya digunakan dengan t-SNE). Kali ini, gambar sklearn bukan ELKI, karena versi sklearn sudah memiliki parameter untuk melewati koordinat awal:
Seperti yang Anda lihat, bahkan dengan penempatan awal "sempurna", t-SNE akan "memecah" ikan di sejumlah tempat yang semula terhubung karena tolakan Student-t dalam domain keluaran lebih kuat daripada afinitas Gaussian dalam input ruang.
Seperti yang Anda lihat, t-SNE (dan SNE juga!) Adalah teknik visualisasi yang menarik , tetapi mereka perlu ditangani dengan hati-hati. Saya lebih suka tidak menerapkan k-means pada hasilnya! karena hasilnya akan sangat terdistorsi, dan tidak ada jarak atau kepadatan yang terpelihara dengan baik. Sebaliknya, lebih baik menggunakannya untuk visualisasi.
sumber
Saya ingin memberikan pendapat yang agak berbeda dengan yang diperdebatkan dengan baik (+1) dan jawaban yang sangat terangkat oleh @ErichSchubert. Erich tidak merekomendasikan pengelompokan pada output t-SNE, dan menunjukkan beberapa contoh mainan yang bisa menyesatkan. Sarannya adalah menerapkan pengelompokan ke data asli sebagai gantinya.
Saya menyadari cara-cara di mana output t-SNE mungkin menyesatkan (lihat https://distill.pub/2016/misread-tsne/ ) dan saya setuju bahwa itu dapat menghasilkan hasil yang aneh dalam beberapa situasi.
Tetapi mari kita perhatikan beberapa data dimensi tinggi nyata.
Ambil data MNIST : 70000 gambar satu digit. Kita tahu bahwa ada 10 kelas dalam data. Kelas-kelas ini tampak terpisah dengan baik bagi pengamat manusia. Namun, pengelompokan data MNIST ke 10 cluster adalah masalah yang sangat sulit. Saya tidak mengetahui adanya algoritma pengelompokan yang akan dengan benar mengelompokkan data menjadi 10 kelompok; lebih penting lagi, saya tidak mengetahui adanya heuristik pengelompokan yang akan menunjukkan bahwa ada 10 (tidak lebih dan tidak kurang) cluster dalam data. Saya yakin bahwa pendekatan yang paling umum tidak akan dapat menunjukkan itu.
Tapi mari kita lakukan t-SNE sebagai gantinya. (Seseorang dapat menemukan banyak angka t-SNE yang diterapkan pada MNIST online, tetapi mereka sering tidak optimal. Dalam pengalaman saya, perlu menjalankan pembesaran awal untuk beberapa waktu untuk mendapatkan hasil yang baik. Di bawah ini saya menggunakan
perplexity=50, max_iter=2000, early_exag_coeff=12, stop_lying_iter=1000
). Inilah yang saya dapatkan, di sebelah kiri tidak berlabel, dan di sebelah kanan diwarnai sesuai dengan kebenaran dasar:Saya berpendapat bahwa representasi t-SNE yang tidak berlabel memang menyarankan 10 kluster. Menerapkan algoritma pengelompokan berbasis kepadatan yang baik seperti HDBSCAN dengan parameter yang dipilih dengan hati-hati akan memungkinkan untuk mengelompokkan data 2D ini menjadi 10 cluster.
Jika seseorang akan ragu bahwa plot kiri di atas memang menunjukkan 10 klaster, inilah yang saya dapatkan dengan trik "keterlambatan berlebihan" di mana saya juga menjalankan
max_iter=200
iterasiexaggeration=4
(trik ini disarankan dalam makalah hebat ini: https://arxiv.org /abs/1712.09005 ):Sekarang harus sangat jelas bahwa ada 10 cluster.
Saya mendorong semua orang yang berpikir mengelompokkan setelah t-SNE adalah ide yang buruk untuk menunjukkan algoritma pengelompokan yang akan mencapai hasil yang relatif baik.
Dan sekarang bahkan lebih banyak data nyata.
Dalam kasus MNIST kita tahu kebenaran dasar. Pertimbangkan sekarang beberapa data dengan kebenaran dasar yang tidak diketahui. Clustering dan t-SNE secara rutin digunakan untuk menggambarkan variabilitas sel dalam data RNA-seq sel tunggal. Misalnya Shekhar et al. 2016 mencoba mengidentifikasi kelompok di antara 27000 sel retina (ada sekitar 20 ribu gen dalam genom tikus sehingga dimensi data pada prinsipnya sekitar 20 ribu; namun orang biasanya memulai dengan mengurangi dimensi dengan PCA menjadi 50 atau lebih). Mereka melakukan t-SNE dan mereka secara terpisah melakukan pengelompokan (pipa pengelompokan yang rumit diikuti oleh beberapa penggabungan kluster dll). Hasil akhir terlihat menyenangkan:
Alasannya terlihat begitu menyenangkan adalah bahwa t-SNE menghasilkan cluster yang jelas berbeda dan algoritma cluster menghasilkan cluster yang persis sama. Bagus.
Namun, jika Anda melihat dalam suplemen Anda akan melihat bahwa penulis mencoba berbagai pendekatan pengelompokan. Banyak dari mereka terlihat buruk pada plot t-SNE karena misalnya, klaster pusat besar akan terpecah menjadi banyak sub-klaster:
Jadi, apa yang Anda yakini: output dari algoritma pengelompokan favorit Anda bersama dengan heuristik favorit Anda untuk mengidentifikasi jumlah cluster, atau apa yang Anda lihat pada plot t-SNE? Sejujurnya, terlepas dari semua kekurangan t-SNE, saya cenderung lebih percaya t-SNE. Atau dalam hal apa pun, saya tidak mengerti mengapa saya harus kurang percaya .
sumber
Saya pikir dengan kebingungan besar t-SNE dapat merekonstruksi topologi global, seperti yang ditunjukkan dalam https://distill.pub/2016/misread-tsne/ .
Dari gambar ikan, saya mencicipi 4000 poin untuk t-SNE. Dengan kebingungan besar (2000), gambar ikan hampir direkonstruksi.
Ini gambar aslinya.
Berikut adalah gambar yang direkonstruksi oleh t-SNE dengan kebingungan = 2000.
sumber
Berdasarkan bukti matematika yang kami miliki, metode ini secara teknis dapat menjaga jarak! mengapa Anda semua mengabaikan fitur ini! t -SNE mengubah jarak Euclidean dimensi tinggi antara sampel menjadi probabilitas bersyarat yang mewakili kesamaan. Saya telah mencoba t -SNE dengan lebih dari 11.000 sampel (dalam konteks genomik) secara paralel dengan berbagai algoritma pengelompokan konsensus termasuk pengelompokan spektral, Afinitas dan yang terpenting dengan pengelompokan GMM (yang merupakan algoritma pengelompokan berbasis kepadatan!). Sebagai hasilnya, saya menemukan hasil yang sangat sesuai antara dua pendekatan ( t-SNE vs. algoritma pengelompokan konsensus). Saya percaya mengintegrasikan t-SNE dengan algoritma clustering konsensus dapat memberikan bukti terbaik dari struktur data lokal dan global yang ada.
sumber
Anda dapat mencoba algoritma pengelompokan DBSCAN. Juga, kebingungan tsne harus kira-kira seukuran dengan kelompok terkecil yang diharapkan.
sumber
Secara pribadi, saya pernah mengalami ini sekali, tetapi tidak dengan t-SNE atau PCA. Data asli saya dalam ruang 15 dimensi. Menggunakan UMAP untuk menguranginya menjadi embeddings 2D dan 3D, saya mendapat 2 cluster yang dapat dipisahkan secara visual dan sempurna pada plot 2D dan 3D. Terlalu bagus untuk menjadi kenyataan. Tetapi ketika saya "melihat" pada data asli dari diagram kegigihan, saya menyadari bahwa ada lebih banyak kluster "signifikan", bukan hanya 2.
Pengelompokan pada output dari teknik reduksi dimensi harus dilakukan dengan sangat hati-hati, jika tidak interpretasi dapat sangat menyesatkan atau salah karena pengurangan dimensi pasti akan mengakibatkan kehilangan fitur (mungkin fitur yang berisik atau benar, tetapi fitur yang priori, kami tidak tidak tahu yang mana). Menurut pendapat saya, Anda dapat mempercayai / menafsirkan cluster, jika:
Cluster dalam data yang diproyeksikan sesuai / mengkonfirmasi ke beberapa klasifikasi mendefinisikan apriori (pikirkan dataset MNIST, di mana cluster data yang diproyeksikan sangat cocok dengan klasifikasi digit), dan / atau,
Anda dapat mengonfirmasi keberadaan kluster ini dalam data asli menggunakan metode lain, seperti diagram kegigihan. Hanya menghitung jumlah komponen yang terhubung dapat dilakukan dalam jumlah waktu yang cukup masuk akal.
sumber