Я пытаюсь решить проблему несбалансированной классификации, все входные функции являются категориальными. Вот количество значений каждой функции:
for i in X_train.columns:
print(i+':',X_train[i].value_counts().shape[0])
Pclass: 3
Sex: 2
IsAlone: 2
Title: 5
IsCabin: 2
AgeBin: 4
FareBin: 4
Применение SMOTE к данным тренировки после train_test_split. Созданы новые значения, которых нет в наборе данных X_train.
from imblearn.over_sampling import SMOTE
from collections import Counter
#removing the random_state dosent help
sm = SMOTE(random_state=0)
X_res, y_res = sm.fit_resample(X_train, y_train)
print('Resampled dataset shape %s' % Counter(y_res))
Resampled dataset shape Counter({1: 381, 0: 381})
Количество значений в наборе данных с передискретизацией:
Pclass: 16
Sex: 7
IsAlone: 2
Title: 12
IsCabin: 2
AgeBin: 4
FareBin: 4
Существуют новые значения, созданные с помощью SMOTE, это также было в случае с under_sampling, были созданы новые значения. Эти новые значения отсутствуют в наборе тестовых данных.
Пример:
X_train-Pclass 1-20,2-15,3-40
X_res-Pclass 1-20,0.999999-3,2-11,1.9999999-4,3-34,2.9999999-6
Мой вопрос:
Почему создаются и создаются эти значения они имеют какое-то значение?
Как с ними бороться? Должен ли я просто округлить их или удалить их
Есть ли способ выполнить выборку выше или ниже, не создавая эти новые значения?