STY Simplify and avoided numpy warnings in imputation
FIX #2924: make lobpcg test pass with reference and ATLAS impl of LAPACK
ENH/TST remove unnecessary sorts and complete testing for sparse median
More stable test problem for eigen_solver='lobpcg'
COSMIT Remove unnecessary assertion
BUG: avoid NaNs throwing off class probabilities

In the case where neigh_dist includes at least one zero and self.weights is 'distance',
some values of `weights` may be infinite.
This is ok, except for when normalizing `proba_k`, when it creates NaN values.
fixing warning ignore type
adding test case
DOC: fixed docstring formatting
Added reference to function
Merge pull request #2928 from ogrisel/fix-linalgerror

[MRG] make lobpcg test pass with reference and ATLAS impl of LAPACK
Merge pull request #2943 from jyu-rmn/patch-1

DOC: fixed docstring formatting
conform to pep8
Added :func: reference
Added :func: reference
Merge pull request #2945 from maheshakya/olivetti

[MRG] Added reference to the function fetch_olivetti_faces in the narrative documentation of olivetti face dataset.
FIX for numpy compatibility, code clarity
ENH: update installation instructions for Ubuntu / Debian
FIX decouple spectral embedding from TransformerMixin

It doesn't have a transform method. Fixes #2887.
ENH - Improve performance of isotonic regression

This supercedes #2940.

PAVA runs in linear time, but the existing algorithm was scaling
approximately quadratically, due to the array pop in the inner loop
being O(N).

I implemented the O(N) version of PAVA using the decreasing subsequences
trick, and the performance is significantly faster in benchmarking.

The benchmarks in this diff (adapted from one of the existing unit
tests) show significant performance improvements - on the order of ~7x
faster for problems of size ~1000, ~30x faster for problems of size
10,000, and ~250x faster for problems of size 100,000.

On correctness - unit tests cover the isotonic regression code fairly
well, and all pass before and after the change. It's a fairly well known
algorithm with a bunch of implementations, so I think this is correct.
In coding up this algorithm I made some mistakes and the unit tests
caught the failures, which makes me more confident in the correctness
now. Still, the performance improvements are surprisingly high.

Added a benchmark script. For an example usage, run:

```
python benchmarks/bench_isotonic.py --iterations 10 --log_min_problem_size 2 --log_max_problem_size 8 --dataset logistic
```