Apa yang salah dengan t-SNE vs PCA untuk pengurangan dimensi menggunakan R?

27

Saya memiliki matriks 336x256 angka titik apung (336 genom bakteri (kolom) x 256 frekuensi tetranukleotida yang dinormalisasi (baris), misalnya setiap kolom menambahkan hingga 1).

Saya mendapatkan hasil yang bagus ketika saya menjalankan analisis saya menggunakan analisis komponen utama. Pertama-tama saya menghitung kluster kmeans pada data, kemudian menjalankan PCA dan mewarnai titik data berdasarkan kluster kmeans awal dalam 2D ​​dan 3D:

library(tsne)
library(rgl)
library(FactoMineR)
library(vegan)
# read input data
mydata <-t(read.csv("freq.out", header = T, stringsAsFactors = F, sep = "\t", row.names = 1))
# Kmeans Cluster with 5 centers and iterations =10000
km <- kmeans(mydata,5,10000)
# run principle component analysis
pc<-prcomp(mydata)
# plot dots
plot(pc$x[,1], pc$x[,2],col=km$cluster,pch=16)
# plot spiderweb and connect outliners with dotted line
pc<-cbind(pc$x[,1], pc$x[,2])
ordispider(pc, factor(km$cluster), label = TRUE)
ordihull(pc, factor(km$cluster), lty = "dotted")

masukkan deskripsi gambar di sini

# plot the third dimension
pc3d<-cbind(pc$x[,1], pc$x[,2], pc$x[,3])
plot3d(pc3d, col = km$cluster,type="s",size=1,scale=0.2)

masukkan deskripsi gambar di sini

Tetapi ketika saya mencoba menukar PCA dengan metode t-SNE, hasilnya terlihat sangat tidak terduga:

tsne_data <- tsne(mydata, k=3, max_iter=500, epoch=500)
plot(tsne_data[,1], tsne_data[,2], col=km$cluster, pch=16)
ordispider(tsne_data, factor(km$cluster), label = TRUE)
ordihull(tsne_data, factor(km$cluster), lty = "dotted")

masukkan deskripsi gambar di sini

plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)

masukkan deskripsi gambar di sini

Pertanyaan saya di sini adalah mengapa pengelompokan kmeans sangat berbeda dari yang dihitung oleh t-SNE. Saya akan mengharapkan pemisahan yang lebih baik antara cluster daripada apa yang dilakukan PCA tetapi tampak hampir acak bagi saya. Apakah Anda tahu mengapa ini terjadi? Apakah saya melewatkan langkah penskalaan atau semacam normalisasi?

Loddi
sumber
4
Harap perhatikan bahwa dengan PCA, Anda sering kali tidak akan mendapatkan hasil "sebagus" seperti yang Anda inginkan. Mengelompokkan pada banyak fitur dan kemudian memproyeksikan cluster di subruang hanya beberapa PC pertama mungkin menunjukkan gambar seperti yang Anda peroleh di sini untuk t-SNE, - kecuali jika PCS itu mengambil hampir semua variabilitas. Apakah Anda membandingkan - bagian variabilitas mana yang ditangkap oleh 3 PC pertama Anda dan 3 dimensi T-SNE pertama Anda?
ttnphns
2
Lebih sepele, sudahkah Anda mencoba lebih banyak iterasi?
jubo
2
Saya telah bermain dengan iterasi hingga 2000 dan juga bermain dengan berbagai pengaturan kebingungan, tetapi tidak pernah melihat sesuatu yang mendekati kinerja PCA.
Loddi
1
Sudahkah Anda mencoba mengubah kebingungan?
1
tSNE memiliki kebingungan optimal teoretis yang meminimalkan perbedaan KL antara data Anda dalam dimensi aslinya dan yang diproyeksikan. Pernahkah Anda mencoba melakukan pencarian grid untuk kebingungan? Misalnya 10,20,30,40, dll
Alex R.

Jawaban:

10

Anda harus memahami apa yang TSNEdilakukan sebelum menggunakannya.

Dimulai dengan membuat grafik lingkungan antara vektor fitur berdasarkan jarak.

Grafik menghubungkan sebuah simpul (vektor fitur) ke nsimpul terdekatnya (dalam hal jarak dalam ruang fitur). Ini ndisebut perplexityparameter.

Tujuan pembuatan grafik ini berakar pada jenis pengambilan sampel yang diandalkan TSNE untuk membangun representasi baru vektor-vektor fitur Anda.

Urutan untuk pembuatan model TSNE dibuat menggunakan random walkgrafik fitur TSNE Anda.

Dalam pengalaman saya ... beberapa masalah saya berasal dari alasan tentang bagaimana representasi fitur mempengaruhi pembangunan grafik ini. Saya juga bermain-main dengan perplexityparameter, karena memiliki efek pada seberapa fokus pengambilan sampel saya.

Berbentuk kerucut
sumber
9

Sulit untuk membandingkan pendekatan-pendekatan ini.

PCA adalah parameter bebas. Mengingat data, Anda hanya perlu melihat komponen utama.

Di sisi lain, t-SNE bergantung pada parameter yang parah: kebingungan, melebih-lebihkan awal, tingkat pembelajaran, jumlah iterasi - meskipun nilai default biasanya memberikan hasil yang baik.

Jadi Anda tidak bisa membandingkannya, Anda harus membandingkan PCA dengan hasil terbaik yang dapat Anda capai dengan t-SNE (atau hasil terbaik yang Anda raih dari beberapa percobaan t-SNE). Jika tidak, akan sama dengan bertanya "mengapa model linear saya berkinerja lebih baik daripada model meningkatkan gradien saya (tidak disetel)?".

RUser4512
sumber
3

Saya berlari t-sne pada dataset untuk menggantikan PCA dan (meskipun bug yang diperhatikan Rum Wei) mendapat hasil yang lebih baik. Dalam kasus aplikasi saya, pca kasar bekerja dengan baik sementara t-sne kasar memberi saya hasil yang terlihat acak. Itu karena langkah penskalaan / pemusatan yang termasuk dalam pca (secara default di sebagian besar paket) tetapi tidak digunakan dalam t-sne.
Poin saya adalah area dan jarak di antara mereka tidak masuk akal tanpa penskalaan sebelumnya, itu membuat saya dari "tampak acak" menjadi "masuk akal".

Seperti yang dikatakan RUser4512, Anda mungkin juga ingin menguji parameter Anda. Di situs webnya , penulis merekomendasikan kebingungan antara 5 dan 50 (milik Anda tampaknya sangat kecil), ia juga memperingatkan bahwa kebingungan yang terlalu besar akan memberi Anda lingkup poin yang hampir homogen (yang baik untuk diketahui).

Distill memiliki artikel yang sangat bagus dengan beberapa visualisasi interaktif yang sangat membantu untuk memahami dampak dari parameter.

Nestor Demeure
sumber
0

Perbedaan penting antara metode seperti PCA dan SVD dengan tSNE adalah bahwa tSNE menggunakan skala non-linear. Ini sering membuat plot yang lebih seimbang secara visual tetapi hati-hati menafsirkannya dengan cara yang sama seperti yang Anda lakukan untuk PCA. Perbedaan ini kemungkinan merupakan perbedaan antara plot yang ditunjukkan di atas.

Lihat artikel berikut untuk detail lebih lanjut tentang menafsirkan skala non-linear dari tSNE: https://distill.pub/2016/misread-tsne/ (Wattenberg, et al., "Cara Menggunakan t-SNE Secara Efektif", Distill, 2016. http://doi.org/10.23915/distill.00002 )

Bukan tidak terduga bahwa data tSNE akan mencampur "cluster" karena mereka tidak begitu berbeda dalam data PCA. Beberapa titik di dalam cluster 2 dan 4 lebih jauh dari cluster centroid daripada perbedaan antara cluster misalnya. Anda akan mendapatkan hasil pengelompokan yang sangat berbeda dengan parameter-k yang berbeda. Kecuali jika Anda memiliki alasan biologis spesifik untuk menggunakan 5 klaster, saya akan merekomendasikan menggunakan pendekatan hierarki hirarki berbasis grafik atau tidak diawasi.

Tom Kelly
sumber