Я пытаюсь решить проблему несбалансированной классификации, все входные функции категоричны. Вот количество значений каждой функции:
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
Мой вопрос:
Почему создаются эти ценности и имеют ли они какое-то значение?
Как с ними бороться? Должен ли я просто округлить их или удалить их
Есть ли способ выполнить избыточную или недостаточную выборку без создания этих новых значений?