[MRG] Incremental PCA

An implementation of Incremental PCA. See [Incremental Learning for Visual Tracking, J. Lim, D. Ross, R. Lin, M. Yang, 2004](http://www.cs.toronto.edu/~dross/ivt/LimRossLinYang_nips04.pdf) for more details.

The key idea behind this PR is to have an out-of-core PCA that gives roughly equivalent results while using constant memory (on the order of the ```batch_size``` rather than ```n_samples```).
Just saw this... you might be right. Seems weird to me

On Tue, Sep 9, 2014 at 8:18 PM, Olivier Grisel <notifications@github.com>
wrote:

> In sklearn/decomposition/tests/test_incremental_pca.py:
>
> > +
> > +iris = datasets.load_iris()
> > +
> > +
> > +def test_incremental_pca():
> > +    """Incremental PCA on dense arrays."""
> > +    X = iris.data
> > +    batch_size = X.shape[0] // 3
> > +    ipca = IncrementalPCA(n_components=2, batch_size=batch_size)
> > +
> > +    X_transformed = ipca.fit_transform(X)
> > +    np.testing.assert_equal(X_transformed.shape, (X.shape[0], 2))
> > +
> > +    ipca = IncrementalPCA(batch_size=batch_size)
> > +    ipca.fit(X)
> > +    assert_almost_equal(ipca.explained_variance_ratio_.sum(), 1.0, 2)
>
> Actually:
>
> >>> PCA(2).fit(iris.data).explained_variance_ratio_.sum()
> 0.97763177502480336
>
> There might be a bug here, no?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/scikit-learn/scikit-learn/pull/3285/files#r17336754>.
>