Generate a random start using expected proportions, alpha.
        These are used to parameterise a random draw from a Dirichlet
        distribution.
        An example, to split a dataset of 20 items into 3 groups of [10,
        6, 4] items:
         - alpha = [10, 6, 4],
         - alpha = [100, 60, 40],
         - alpha = [5, 3, 2],
        would all work. Variance is inversely related to sum(alpha)

def random(cls, alpha, size):
        """
        Generate a random start using expected proportions, alpha.
        These are used to parameterise a random draw from a Dirichlet
        distribution.
        An example, to split a dataset of 20 items into 3 groups of [10,
        6, 4] items:
         - alpha = [10, 6, 4],
         - alpha = [100, 60, 40],
         - alpha = [5, 3, 2],
        would all work. Variance is inversely related to sum(alpha)
        """
        props = np.concatenate([[0], (scipy.stats.dirichlet.rvs(alpha) * size).cumsum().round().astype(int)])
        indices = np.array(list(range(size)))
        random.shuffle(indices)
        x = []
        for i in range(len(props)-1):
            ix = indices[props[i]:props[i+1]]
            x.append(ix)
        return cls.from_membership(x)