#t-SNE embedding of tau -> 3 mu 

# The readr library is the best way to read and write CSV files in R
library(readr)
library(caret)
library(ggplot2)
require(Rtsne)

# Read competition data files:
traini <- read_csv("../input/training.csv")
testi <- read_csv("../input/test.csv")
agreei <- read_csv("../input/check_agreement.csv")

#Select features

feat=2:47

tr=traini[,feat]
te=testi[,feat]
ag=agreei[,feat]

tr$orig="Train"
tr$signal=traini$signal
tr$weight=1

te$orig="Test"
te$signal=-1
te$weight=.1

ag$orig="Agreement"
ag$signal=agreei$signal
ag$weight=agreei$weight

miw=min(ag$weight[ag$signal==0])
maw=max(ag$weight[ag$signal==0])

ag$weight[ag$signal==0]=(ag$weight[ag$signal==0]-miw)/(maw-miw)

#Bind all datasets

tot=rbind(tr,te,ag)
tot$Class=paste0(tot$orig,"_",tot$signal)

#select a 5% sample stratified on Origen and Signal 

set.seed(3456)
tsample <- createDataPartition(tot$Class, p = .03,list = FALSE,times = 1)

tots=tot[tsample,1:46]

# Do embedding

tsne = Rtsne(as.matrix(tots), check_duplicates=FALSE, pca=TRUE, 
             perplexity=30, theta=0.5, dims=2, max_iter=1000,verbose=T)

embedding = as.data.frame(tsne$Y)
embedding$Class = tot$Class[tsample]
embedding$weight=tot$weight[tsample]
embedding$orig=tot$orig[tsample]
embedding$signal=tot$signal[tsample]

plottsne<-function(mask,title){
  embedding1=embedding[mask,]
  g = ggplot(embedding1, aes(x=V1, y=V2, color=as.factor(Class))) +
    geom_point(aes(size=weight,alpha=.3)) +
    scale_colour_brewer(palette = "Set1")+
    xlab("") + ylab("") +
    ggtitle(title) +
    theme_light(base_size=20) 
  print(g)
}

mask=T
plottsne(mask,"t-SNE tau ->3mu embedding")

mask=embedding$orig=='Train'
plottsne(mask,"Train")

mask=embedding$orig=='Agreement'
plottsne(mask,"Agreement")

mask=embedding$orig=='Test'
plottsne(mask,"Test")


mask=embedding$signal==0
plottsne(mask,"Real Data")

mask=embedding$signal==1
plottsne(mask,"Monte Carlo")
