Hum, `X = check_arrays(X, sparse_format='dense', dtype=np.int)[0]` doesn't do an implicit dense conversion, it raises an exception. So my idea doesn't work unless I make an explicit toarray() before calling _fit_transform / _transform.

This also means that the validation is not wasteful.