On assiging weights for unbalanced classes
What is the proper way to assign weights? Should I assign weights on the full dataset and then split into train and test?


No, your test set doesn't have to be weighted and shouldn't be, because it should reflect the real distribution of the data. So you should split first and weight only the instances in the training set, since this is during the training stage that these weights are taken into account.