#python #machine-learning #scikit-learn #imblearn
#python #машинное обучение #scikit-learn #imblearn
Вопрос:
Я имею дело с сильно несбалансированным и большим набором данных. Я пытаюсь imblearn
smote_nc = SMOTENC(categorical_features=[df.dtypes=='category'], random_state=0)
X, y = smote_nc.fit_resample(X,y)
Но попал в ошибку памяти
MemoryError: Unable to allocate 15.2 GiB for an array with shape (190824, 10724) and data type float64
Есть ли какой-либо способ разделить эту операцию и сохранить сбалансированный результат в dataframe?
Ответ №1:
Smote — это метод передискретизации. Он генерирует новые дополнительные обучающие выборки, которые помогут вам преодолеть дисбаланс исходного набора данных. Этот метод создает очень большой набор данных, который не помещается в память. Одна вещь, которую вы могли бы попробовать, это указать ключевое слово стратегии выборки. Например, для двоичной классификации вы можете установить соотношение 0,3. Выходной набор данных должен быть меньше и, следовательно, помещаться в память.
Обратите внимание, что я его не тестировал. Это всего лишь предложение. Если это не вариант для вас, не стесняйтесь вставлять некоторые образцы данных, чтобы мы могли посмотреть.
Комментарии:
1. Спасибо за ответ! К сожалению, коэффициент 0,3 приводит к ошибке указанного соотношения, необходимого для удаления выборок из класса меньшинства при попытке сгенерировать новые выборки. Пожалуйста, увеличьте соотношение. Я добавил некоторый пример фрейма данных