It is unfortunate (and strange) that LBFGS didn't converge on your dataset. Can I see the log produced by the solver? Was it a numerical error? I am glad that Fista converged and gave a sensible prediction.
Currently, we do not handle the categorical variables with the "junk" category. It is definitely something we are considering in the future. We will get back to you on that. Right now, you can do that with SFrame operations using group_by. Here is how I would do it: (Let us assume that I have an SFrame with a feature 'X1')
Start by grouping the features by count
sf_grps = sf.groupby('X1', gl.aggregate.COUNT('X1'))
Retain the top 49 categories
goodcategories = sfgrps.topk('Count', k = 49)['X1']
For all those that are not 'good categories', you can filter them out by calling them 'junk'
sf['X1processed'] = sf['X1'].apply(lambda x: x if x in goodcategories else 'junk')
You don't have to worry about doing this during predict time. The model stores the categories that it saw during training time, so it will automatically treat any unseen categories as junk categories which would then result in sensible predictions.