Использование imbalanced-learn с Pandas DataFrame

Мой набор данных довольно несбалансирован. Каждый из двух классов меньшинства содержит половину выборки в классе большинства. Моя модель RNN ничего не может узнать о наименее населенном классе.

Я пытаюсь использовать imbalanced-learnбиблиотека. Например:

sm = SMOTE(random_state=42, n_jobs=-1, k_neighbors=10)
X_train, y_train = sm.fit_resample(train.drop(['label], axis=1), train['label'])

работает если train.drop(['label]содержит только значения используемых функций. Проблема в том, что мой DataFrame содержит один дополнительный столбец, содержащий строки в качестве значений: я не могу его отбросить, поскольку эти строки являются входными данными для моего RNN. И если я его уроню, я не смогу сказать, к какой строке набора данных с передискретизацией относятся эти строки.

Есть ли способ сохранить все столбцы и указать функции, какие столбцы использовать для передискретизации?

2 ответа

Решение

Для тех, кому нужно сделать что-то подобное, соавтор библиотеки предложил мне использовать SMOTENC, который может обрабатывать также категориальные переменные (например, строки).

Если строковый столбец является входом для вашего RNN, тогда, предполагая, что вы планируете каким-то образом его кодировать (например, горячая кодировка), просто закодируйте этот столбец перед передискретизацией, а затем запустите передискретизацию с новыми закодированными столбцами вместо строки столбец.

Другие вопросы по тегам