The duplication could be avoided with something like `clf.fit(*fit_args, **fit_params)` where `fit_args` is set differently for the `y is None` and `y is not None` cases. (In some PR related to grid search somewhere I have implemented it this way, but the remainder of the PR was too controversial to merge as yet.)