Maybe this is why @larsmans singled out the data validation: it's not part of LibLinear.

Even so, the current design is unfortunate in storing attributes that are irrelevant (epsilon, class_weight, multi_class, perhaps loss). One solution to this -- cutting back `BaseLibLinear`'s __init__ parameters to precisely the base parameters -- might involve the call to `train` looking more like:
```python
train(X, y, eps=self.tol, bias=self._get_bias(), C=self.C,
        random_seed=rnd.randint(np.iinfo('i').max),
        **self._get_train_kwargs())
```
but I'm not convinced that's especially neat, and the real mess is in `_get_solver_type`.