Tôi có một ma trận gồm 336x256 số dấu phẩy động (336 bộ gen vi khuẩn (cột) x 256 tần số tetranucleotide được chuẩn hóa (hàng), ví dụ: mỗi cột thêm tối đa 1).
Tôi nhận được kết quả tốt khi tôi chạy phân tích của mình bằng phân tích thành phần nguyên tắc. Đầu tiên tôi tính toán cụm kmeans trên dữ liệu, sau đó chạy PCA và tô màu các điểm dữ liệu dựa trên cụm kmeans ban đầu trong 2D và 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")
# 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)
Nhưng khi tôi cố gắng trao đổi PCA bằng phương pháp t-SNE, kết quả trông rất bất ngờ:
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")
plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)
Câu hỏi của tôi ở đây là tại sao cụm kmeans lại khác với những gì t-SNE tính toán. Tôi đã mong đợi một sự phân tách thậm chí tốt hơn giữa các cụm so với những gì PCA làm nhưng nó có vẻ gần như ngẫu nhiên đối với tôi. Bạn có biết tại sao không? Tôi có thiếu một bước mở rộng hoặc một số loại chuẩn hóa?