Использование 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, тогда, предполагая, что вы планируете каким-то образом его кодировать (например, горячая кодировка), просто закодируйте этот столбец перед передискретизацией, а затем запустите передискретизацию с новыми закодированными столбцами вместо строки столбец.