From a usability point of view, specify kwargs of sub-functionality like this is not optimal: the user doesn't actually know what he can pass, and has to dig in further documentation to figure it out.

It would be good if we could identify what options actually need to be passed and expose them. I suspect that not every argument of KMeans is critically needed.

With regards to the SVD, I think that the only one that needs to be exposed is the number of vectors to be used (n_oversamples for randomized_svd and ncv for svds). We could collide these in an 'n_svd_vecs' that would be dispatched accordingly.

For KMeans, I suspect that you want control of n_jobs, n_init and init.