http://distill.pub/2016/misread-tsne/
More efficient implementation for python: https://github.com/scikit-learn/scikit-learn/issues/4619