Creating kernel-specific classes would increase the number of classes by 4: one for Ridge, RidgeCV, RidgeClassifier and RidgeClassifierCV. This was my main motivation for reusing the same classes, together with the fact that you can grid search the kernel parameter, yet use efficient dedicated solvers for the linear kernel case.

Technically, a kernel induces a feature space in which the model is linear so I'm not too concerned about the name "linear". But we could perhaps create a KernelizableModel base class if it's a concern for others.

If I remember correctly, SVC does have both coef_ and dual_coef_ if the kernel is linear, BTW.

One concern I have is that in the linear case, the current implementation already solves the kernelized problem if it's more efficient (n_samples < n_features). So having kernel-specific classes would be redundant in the case of a linear kernel.

Is _LearntSelectorMixin useful for L2-regularized models such as Ridge or other kernelized models?