The purpose of the `classes` parameter is not clear from the comment. Is it merely so that you needn't `fit` if you already know the class labels? Or is it to define an ordering of the labels? What happens if an excess label is given? What happens if a label is absent but found in the `y` passed to `fit`, or in `transform`?

Are there cases where finding an absent class means we should raise an error, but others where it makes sense to remove the entry, or substitute a different class? Should we have a `handle_unknown` parameter selecting among these, or is that excessively flexible? Certainly, the behaviour is implicit at the moment, and that's a bad thing.

There is really no reason the same functionality shouldn't apply to `LabelEncoder`, and I think they should inherit from a common class (as in https://github.com/jnothman/scikit-learn/commit/8669605df0d20278933469822739b9988bcff347).