[MRG+1] t-SNE

This is an implementation of (non-parametric) t-SNE for visualization.

See [Laurens van der Maaten's paper](http://jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf) or [his website about t-SNE](http://homepage.tudelft.nl/19j49/t-SNE.html) for details. In comparison to other implementations and the original paper this version has these features:

* it is designed and optimized for Python
* the degrees of freedom of the Student's t-distribution are determined with a heuristic
* it has only a few parameters to control the optimization: `learning_rate`, `n_iter` and `early_exaggeration`, the momentum etc. are fixed and work well for most datasets

TODO
----

- [x] Implement real `transform` (and maybe even `inverse_transform`)
- [x] integrate in sklearn (relative imports, build with cython, etc.)
- [x] remove Python function calls from binary search
- [x] reference for the trustworthiness score
- [x] more parameters for gradient descent (`n_iter`, `learning_rate`, `early_exaggeration`)
- [x] find a robust learning schedule
- [x] refactor t-SNE so that it is possible for the user to implement parametric t-SNE
- [x] distances should be called affinities
- [x] tests
- [x] example (documentation, comparisons)
- [x] t-SNE should expose the attributes `embedding_`, `nbrs_`, `training_data_`, `embedding_nbrs_` (similar to `Isomap`)
- [x] Remove generalization
- [x] Narrative documentation in `doc/modules/manifold.rst`
- [x] Integrate PCA initialization (merge + docstring)
- [x] Mention papers about Barnes-Hut-SNE etc. in comment in `t_sne.py`

Learning Schedules
------------------

In the literature:

* original paper: initialization with standard deviation 1e-4, 1000 episodes, learning rate 100, momentum 0.5 for 250 episodes, 0.8 for the rest, early exaggeration with 4 for 50 episodes
* matlab implementation: learning rate 500, early exaggeration for 100 episodes
* python implementation: initialization with standard deviation 1, learning rate 500, early exaggeration for 100 episodes, momentum 0.5 for 20 episodes
* [divvy](https://github.com/jmlewis/divvy/blob/master/Plugins/Reducers/TSNE/tsne.c): initialization with standard deviation 1e-4, 1000 episodes, learning rate 1000, momentum 0.5 for 100 episodes, 0.8 for the rest, early exaggeration with 4 for 100 episodes
* parametric t-sne (not comparable): conjugate gradient
* barnes-hut t-sne: initialization with standard deviation 1e-4, 1000 episodes, learning rate 200, momentum 0.5 for 250 episodes, 0.8 for the rest, early exaggeration with 12 for 250 episodes

My experiences:

* the learning rate has to be set manually for optimal performance, something between 100 and 1000
* a high momentum (0.8) during early exaggeration improves the result

This implementation uses the following schedule:

* initialization with standard deviation 1e-4, 1000 episodes, learning rate 1000, momentum 0.5 for 50 episodes, 0.8 for the rest, early exaggeration with 4 for 100 episodes

Observations
-------------

* early compression (L2 penalty at the beginning of the optimization) did not give significant advantage in my experiments
* L-BFGS is faster for smaller datasets and creates larger gaps between natural clusters than gradient descent in larger datasets
* usually visualizations look better with gradient descent even though L-BFGS finds better local minima
* binary search requires 2.3 seconds in Cython and 3.9 seconds in Python on the digits dataset

Tips
----

* reducing the dimensionality of data to its first 50 principal components often results in better t-SNE visualizations
* if the cost function increases during initial optimization, the early exaggeration factor or the learning rate might be too high
* if the cost function gets stuck in a bad local minimum increasing the learning rate helps sometimes

Examples
-------

Visualizations of some datasets can be found [here](http://www.informatik.uni-bremen.de/~afabisch/files/tsne/), e.g.

![Digits dataset](http://www.informatik.uni-bremen.de/~afabisch/files/tsne/tsne_digits.png)


Work for other pull requests
-----------------------------

* [Barnes-Hut-SNE](http://arxiv.org/abs/1301.3342)
* [fast optimization for t-SNE](http://cseweb.ucsd.edu/~lvdmaaten/workshops/nips2010/papers/vandermaaten.pdf)