I have a dataset in which the target variable has three classes. The approx distribution is as follows:

  • "-1" - 4%
  • "0" - 90%
  • "1" - 6%

I did not find any package in R which can run smote for multilabel classification( Please tell me if there is). So i compromised and did the following

  • Forget about class "-1", apply SMOTE on classes 1 and 0
  • Next, forget about class 0, apply SMOTE on classes 1 and -1
  • Next, forget about class 1, apply SMOTE on classes 0 and -1

Is that the right way to proceed?

Also there is an existing paper on how to do SMOTE for mutliclass classification here . It's called SCUT.

Is there an application of this SCUT algorithm in any R or python package?


2 Answers 2


I would agree with running multiple SMOTE passes across the dataset, but with a slightly different view than already expressed. If you merely run SMOTE for each minority class against the predominant class, you're going to be generating sample that models the difference between each minority class and the predominant class rather than sample that models the class as accurately as possible.

We can fix this (as much as is possible in this case) by SMOTE oversampling each minority class against all data not in that class. For example, the first SMOTE run may be the "1" class against the union of the "-1" and "0" classes and the second might be the "-1" class against the union of the "1" and "0" classes.

Conceptually, this is simply minority oversampling of "1" and "not 1" and the same with "-1".

Alternatively, given enough available sample otherwise, another option would be to massively undersample the "0" class to balance the class distributions.

  • $\begingroup$ Also undersample would not be a good idea in my dataset $\endgroup$ May 23, 2017 at 5:19

As I can see from your question, you are trying to balance "-1" class and "1", but they are seemed to be almost equally. So, it would be more right to 1)apply SMOTE on classes -1 and 0, then 2) apply SMOTE on classes 0 and 1. Then you may get all classes balanced.


Not the answer you're looking for? Browse other questions tagged or ask your own question.