У меня есть матрица из 336x256 чисел с плавающей запятой (336 бактериальных геномов (столбцы) x 256 нормализованных частот тетрануклеотидов (ряды), например, каждый столбец добавляет до 1).
Я получаю хорошие результаты, когда выполняю анализ с использованием принципного анализа компонентов. Сначала я вычисляю кластеры kmeans на данных, затем запускаю PCA и раскрашиваю точки данных на основе начальной кластеризации kmeans в 2D и 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)
Но когда я пытаюсь заменить PCA методом t-SNE, результаты выглядят очень неожиданно:
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)
Мой вопрос здесь заключается в том, почему кластеризация kmeans так отличается от того, что вычисляет t-SNE. Я ожидал бы даже лучшего разделения между кластерами, чем то, что делает PCA, но для меня это выглядит почти случайным. Ты знаешь почему это? Я пропускаю шаг масштабирования или какую-то нормализацию?
Ответы:
Вы должны понять, что
TSNE
делает, прежде чем использовать его.Он начинается с построения графа соседства между векторами признаков на основе расстояния.
График соединяет узел (вектор признаков) с его
n
ближайшими узлами (с точки зрения расстояния в пространстве признаков). Этоn
называетсяperplexity
параметром.Цель построения этого графика коренится в том типе выборки, на который опирается TSNE, чтобы построить новое представление ваших векторов признаков.
Последовательность для построения модели TSNE генерируется с использованием графика характеристик
random walk
вашего TSNE.По моему опыту ... некоторые из моих проблем возникли из рассуждений о том, как представление объектов влияет на построение этого графа. Я также работаю с
perplexity
параметром, так как он влияет на то, насколько сфокусирован мой отбор.источник
Трудно сравнить эти подходы.
PCA не содержит параметров. Учитывая данные, вам просто нужно взглянуть на основные компоненты.
С другой стороны, t-SNE опирается на строгие параметры: недоумение, раннее преувеличение, скорость обучения, количество итераций - хотя значения по умолчанию обычно дают хорошие результаты.
Таким образом, вы не можете просто сравнить их, вы должны сравнить PCA с лучшим результатом, которого вы можете достичь с помощью t-SNE (или лучшим результатом, которого вы достигли за несколько попыток t-SNE). В противном случае было бы эквивалентно спросить «почему моя линейная модель работает лучше, чем моя (не настроенная) модель повышения градиента?».
источник
Я запустил t-sne для набора данных, чтобы заменить PCA, и (несмотря на ошибку, замеченную Ромом Вей), получил лучшие результаты. В моем случае грубый pca работал хорошо, в то время как грубый t-sne давал мне случайные результаты. Это произошло из-за шага масштабирования / центрирования, включенного в pca (по умолчанию в большинстве пакетов), но не использованного в t-sne.
Мои точки были областями, и расстояние между ними не имело никакого смысла без предварительного масштабирования, я перешел от «случайного взгляда» к «осмыслению».
Как сказал RUser4512, вы также можете проверить свои параметры. На своем веб-сайте автор рекомендует недоумение от 5 до 50 (ваше кажется довольно маленьким), он также предупреждает, что слишком большое недоумение даст вам почти однородную сферу точек (что полезно знать).
У Distill есть очень хорошая статья с некоторой интерактивной визуализацией, которая действительно помогает понять влияние параметров.
источник
Важное различие между методами, такими как PCA и SVD с tSNE, заключается в том, что tSNE использует нелинейную шкалу. Это часто делает графики более визуально сбалансированными, но будьте осторожны, интерпретируя их так же, как и для PCA. Эта разница, вероятно, объясняет разницу между графиками, показанными выше.
См. Следующую статью для получения более подробной информации о интерпретации нелинейной шкалы tSNE: https://distill.pub/2016/misread-tsne/ (Wattenberg, et al., «Как эффективно использовать t-SNE», Distill, 2016. http://doi.org/10.23915/distill.00002 )
Неудивительно, что данные tSNE будут смешивать «кластеры», поскольку они не столь различны в данных PCA. Некоторые точки в кластерах 2 и 4, например, более отдалены от центроида кластера, чем разница между кластерами. Вы получите совершенно разные результаты кластеризации с другим k-параметром. Если у вас нет конкретного биологического обоснования для использования 5 кластеров, я бы рекомендовал использовать подход иерархической кластеризации на основе графов или без надзора.
источник