Here ``min_n_samples`` could be greater than ``X.shape[0]``. Is it intended?

Just a suggestion, I would probably rewrite it like that

```
       n_samples = X.shape[0]

        if isinstance(self.min_n_samples , (numbers.Integral, np.integer)):
            min_n_samples = self.min_n_samples 
        else:  # float
            min_n_samples = int(self.min_n_samples * n_samples )

        if not (1 < min_n_samples):
            raise ValueError("min_n_samples must be greater than 0")

```