Imbalanced data

Resampling technique

alt

Undersampling

Fixed under-sampling

Random Under-sampling

Code

# import library
from imblearn.under_sampling import RandomUnderSampler

rus = RandomUnderSampler(random_state=42, replacement=True)# fit predictor and target variable
x_rus, y_rus = rus.fit_resample(x, y)

print('original dataset shape:', Counter(y))
print('Resample dataset shape', Counter(y_rus))

Dữ liệu ban đầu:

alt

Sau khi randomundersampler:

alt

NearMiss
#import thư viện
from imblearn.under_sampling import NearMiss
nm1 = NearMiss(
    sampling_strategy='auto',  # chỉ undersample lớp đa số
    version=1,
    n_neighbors=3,
    n_jobs=4)  # có 4 core trong máy

X_resampled, y_resampled = nm1.fit_resample(X, y)

Vẽ 2 biến (VarA,VarB) ban đầu:

alt

Sau khi NearMiss:

alt

Instance Hardness

Code

# import library
from imblearn.under_sampling import InstanceHardnessThreshold
from sklearn.ensemble import RandomForestClassifier

tf = RandomForestClassifier(n_estimators=100, random_state=39, max_depth=3, n_jobs=4)

iht = InstanceHardnessThreshold(estimator = tf, sampling_strategy = 'auto',random_state = 0)

x_resampled, y_resampled = iht.fit_resample(x, y)

print('original dataset shape:', Counter(y))
print('Resample dataset shape', Counter(y_rus))

Trước khi InstancerHardness

alt

Sau khi InstancerHardness

alt

Clean under-sampling

alt

Code

# import library
from imblearn.over_sampling import TomekLinks

tl =  TomekLinks(sampling_strategy = "majority")

x_tl,y_tl = tl.fit_resample(X_train,y_train)

print('original dataset shape:', Counter(y_train))
print('Resample dataset shape', Counter(y_tl))

Trước khi tomeklink

alt

Sau khi TomekLink

alt

Oversampling

Một số bài viết rất hay

So sánh các phương pháp Under-sampling

Chúng ta sẽ xác định xem liệu các thuật toán undersampling khác nhau trong phần này có cải thiện chất lượng của Random Forest trong các tập dữ liệu khác nhau với các lớp mất cân bằng không.

Gợi ý [Counter()](https://docs.python.org/3/library/collections.html#collections.Counter)
Gợi ý [RandomForestClassifier()](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)
Gợi ý Sử dụng biến: ```dataset``` và ```undersampler```
Gợi ý [bar()](https://pandas.pydata.org/docs/reference/api/pandas.Series.plot.bar.html) [axhline()](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axhline.html)
Gợi ý [bar()](https://pandas.pydata.org/docs/reference/api/pandas.Series.plot.bar.html) [axhline()](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.axhline.html)

Các kỹ thuật undersampling khác nhau hoạt động tốt nhất với các tập dữ liệu khác nhau.