Discriminative versus generative algorithms