First release. imbalanceKit collects the resampling
methods of the former SMOTEWB package (version 1.2.5) and
extends them.
BiSMOTE(): bi-directional SMOTE (Sağlam &
Yamak).
MCSMOTE(): transition matrix driven oversampling
(Sağlam & Cengiz, 2025). Works with more than two classes.
UGO(): uncertainty guided oversampling (Sağlam &
Cengiz, 2026), with "RWO", "SMOTE",
"ROS" and "MCSMOTE" as base methods. UGO is
not a resampler by itself but a procedure that uses a base method and a
classifier. The classifier is chosen with the classifier
argument: one of the seven built-in classifiers ("CART",
"RF", "LogReg", "KNN",
"NaiveBayes", "LDA", "NNET") or
any function that returns class probabilities. The old names
"rpart" and "randomForest" still
work.
DatRel() (Sağlam, 2025) is a post-processing method:
DatRel(x, y, x_syn, y_syn) moves synthetic samples from any
source that fall outside their class region back into it (pure and
proper class cover; works with more than two classes). The cover
algorithm of the rcccd package is included, so
rcccd is not needed. oversampleDatRel()
generates the samples with a base method first.
EBSMOTE(), GQEO(), LEAO()
and SyMProD(): further oversamplers that need no deep
learning libraries. The first, third and fourth are defined for two
classes; with more classes every class is oversampled against the union
of the others. LEAO() estimates class probabilities with
bagged rpart trees, logistic regression, k-nearest
neighbours or naive Bayes (prob_type).
EBSMOTE(),
GQEO(), LEAO() and SyMProD()
(also in citation()).evaluate() calculates ACC,
BACC, F1, GMEAN,
MCC, ROCAUC, PRAUC,
Brier, PBrier (penalized), BBrier
(balanced), ECE, BECE (balanced),
P4 and IAM plus PRECISION,
RECALL, SPECIFICITY, KAPPA and
LOGLOSS, or the selected ones. Each metric is also a
function of its own.average argument ("binary",
"macro", "micro",
"weighted").ADASYN(), BLSMOTE(), GSMOTE(),
ROS(), ROSE(), RSLSMOTE(),
RUS(), RWO(), SLSMOTE(),
SMOTE() and SMOTEWB().
generate_<METHOD>() function (one class at a time)
and a shared driver. Generation is vectorised, so the methods are
several times faster on large data. Because the random numbers are now
drawn in bulk, a seed no longer reproduces the output of SMOTEWB 1.2.5
(ROS() and ROSE() still do); the distribution
of the synthetic samples is unchanged.ovRate: the number of synthetic samples is
ovRate * (n_max - n_j) rounded half up for every method
(before: round() for most, ceiling() for
BiSMOTE and UGO). ovRate may also be a vector with one
value per class and is validated.RUS() keeps the original row order and validates
n_neededToRemove.SMOTE(k = 1) and ADASYN(k = 1) no longer
fail; k larger than the class size is reduced. Classes with
a single sample are duplicated with a warning.ADASYN() returns exactly the required number of samples
(it was off by a few because of rounding) and its C is
reported for every class.RSLSMOTE() used the neighbours of the first sample
instead of those of the current sample when relocating; fixed.BLSMOTE() no longer modifies k2 across
classes and no longer loops forever when too few borderline samples
exist.GSMOTE() now returns y_syn as
documented.