-
-
Save mikelove/74bbf5c41010ae1dc94281cface90d32 to your computer and use it in GitHub Desktop.
n <- 200 | |
m <- 40 | |
set.seed(1) | |
x <- runif(n, -1, 1) | |
library(rafalib) | |
bigpar(2,2,mar=c(3,3,3,1)) | |
library(RColorBrewer) | |
cols <- brewer.pal(11, "Spectral")[as.integer(cut(x, 11))] | |
plot(x, rep(0,n), ylim=c(-1,1), yaxt="n", xlab="", ylab="", | |
col=cols, pch=20, main="underlying data") | |
library(pracma) | |
ortho <- rortho(m) | |
X <- cbind(x, matrix(0,ncol=m-1,nrow=n)) %*% ortho | |
plot(X[,1:2], asp=1, col=cols, pch=20, xlab="", ylab="", main="embed in higher dim") | |
pc <- prcomp(X) | |
plot(pc$x[,1:2], asp=1, col=cols, pch=20, xlab="", ylab="", main="PC1 & PC2") | |
library(tsne) | |
res <- tsne(X) | |
plot(res, col=cols, pch=20, xlab="", ylab="", main="t-SNE") | |
bigpar(2,2,mar=c(3,3,1,1)) | |
for (i in 2:5) { | |
set.seed(i) | |
x <- runif(n, -1, 1) | |
cols <- brewer.pal(11, "Spectral")[as.integer(cut(x, 11))] | |
ortho <- rortho(m) | |
X <- cbind(x, matrix(0,ncol=m-1,nrow=n)) %*% ortho | |
res <- tsne(X) | |
plot(res, col=cols, pch=20, xlab="", ylab="") | |
} |
How about this mixture of Gaussians example.
library(Rtsne)
library(tsne)
library(RColorBrewer)
cols <- brewer.pal(4, "Dark2")
#build 200 samples with 1000 'genes' in 4 distinct clusters
set.seed(1)
dat<-matrix(rnorm(200000,0,1),1000,200)
cen1<-rnorm(1000,0,1)
cen2<-rnorm(1000,0,1)
cen3<-rnorm(1000,0,1)
cen4<-rnorm(1000,0,1)
sim2<-dat
sim2[,1:50]<-dat[,1:50]+cen1
sim2[,51:100]<-dat[,51:100]+cen2
sim2[,101:150]<-dat[,101:150]+cen3
sim2[,151:200]<-dat[,151:200]+cen4
colors <- c(rep(cols[1], 50), rep(cols[2],50), rep(cols[3], 50), rep(cols[4], 50))
par(mfrow=c(1, 2))
#t-SNE
tmp<-tsne(t(sim2))
plot(tmp, col=colors, pch=20, xlab="", ylab="", main="tsne")
#Alternative implementation
tmp<-Rtsne(t(sim2), check_duplicates=FALSE)
plot(tmp$Y,col=colors, pch=20, xlab="", ylab="", main="Rtsne")
Well, there is a bug in the tsne package:
gains = (gains + .2) * abs(sign(grads) != sign(incs))
+ gains * .8 * abs(sign(grads) == sign(incs))
change it to
gains = (gains + .2) * abs(sign(grads) != sign(incs)) + gains * .8 * abs(sign(grads) == sign(incs))
Also, for the MOG case, you need to set the parameter whiten=FALSE. Then you can get the correct results:
Have these changes been committed?
Could any help me interpreting the pattern behind the tsne plots?I have done on a small dataset I have clusters .Which I have hard time interpreting...
The fix proposed by @JerryDing has been incorporated into tsne
package v0.1.3 by @jdonaldson here:
https://github.com/jdonaldson/rtsne
and has been sent to CRAN.
@JerryDing Im sorry but I fail to see any different in your change. What's different?
The change you proposed where change in github but, at least for me, the change is just a copy of what was already there.
I did notice that too but did not explore it systematically.
Thanks to you all for triggering the extra interest with the gist discussion!