Вопрос или проблема
Я работаю с очень несбалансированным набором данных, я использовал SMOTEENN (SMOTE+ENN) для балансировки, следующий тест был проведён с использованием Random Forest Classifier
:
Мои результаты на обучающей и тестовой выборках до использования SMOTEENN
:
print('Train Score: ', rf_clf.score(x_train, y_train))
print('Test Score: ', rf_clf.score(x_test, y_test))
Train Score: 0.92
Test Score: 0.91
После использования SMOTEEN
:
print('Train Score: ', rf_clf.score(x_train, y_train))
print('Test Score: ', rf_clf.score(x_test, y_test))
Train Score: 0.49
Test Score: 0.85
Редактировать
x_train,x_test,y_train,y_test=train_test_split(feats,targ,test_size=0.3,random_state=47)
scaler = MinMaxScaler()
scaler_x_train = scaler.fit_transform(x_train)
scaler_x_test = scaler.transform(x_test)
X = scaler_x_train
y = y_train.values
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import EditedNearestNeighbours
from imblearn.combine import SMOTEENN
oversample = SMOTEENN(random_state=101,smote=SMOTE(),enn=EditedNearestNeighbours(sampling_strategy='majority'))
start = time.time()
X, y = oversample.fit_resample(X, y)
stop = time.time()
print(f"Время тренировки: {stop - start}s")
rf_model = RandomForestClassifier(n_estimators=200, class_weight="balanced", criterion='entropy', random_state= 0, verbose= 1, max_depth=2)
rf_mod = OneVsRestClassifier(rf_model)
rf_mod.fit(X, y)
Вероятно, вы не применяете ту же технику ресэмплинга к тестовому набору данных. Если вы поместите логику в Pipeline библиотеки imbalanced-learn, соответствующий ресэмплинг будет автоматически обработан для вас.
Ответ или решение
Обсуждаемая ситуация, связанная с разницей между оценками качества модели на обучающем и тестовом датасетах, представляет собой ключевую тему в области машинного обучения и анализов. Понимание различий в оценках можно проиллюстрировать с помощью вашего случая, связанного с использованием метода SMOTEENN для работы с несбалансированными данными в модели Random Forest Classifier.
1. Объяснение проблемы:
На исходном этапе, до применения SMOTEENN, ваша модель показывала близкие результаты на обучающем (Train Score: 0.92) и тестовом (Test Score: 0.91) датасетах. После реобучения и применения SMOTEENN результаты резко изменились: оценка на обучающем наборе данных упала до 0.49, в то время как на тестовом наборе она осталась на уровне 0.85. Это изменение вызывает множество вопросов.
2. Причины низких оценок после реобучения:
-
Проблема с переобучением: Это явление может указывать на то, что ваша модель начала переобучаться на обучающем наборе данных. Снижение Train Score до 0.49 говорит о том, что модель не способна адекватно "запомнить" или "изучить" данные, что может быть свойственно слишком узкой модели, недостаточной для более сложных паттернов, которые могут иметь стать в данном контексте.
-
Отсутствие согласованной предобработки: Если вы применяете SMOTEENN только к обучающему набору данных, тестовые данные остаются несбалансированными. Это означает, что ваша модель не подверглась последней проверке на данных, которые соответствуют реальным условиям. Следовательно, необходимо обеспечить однородную предобработку и для тестового набора.
-
Параметры модели: Параметры, указанные при обучении (например, количество деревьев, критерий разделения и другие гиперпараметры), могут оказывать значительное влияние на производительность. Выберите более оптимальные параметры или примените методы настройки гиперпараметров (grid search, random search и т.д.).
3. Оптимизация процесса:
-
Использование Pipeline: Для предотвращения несоответствия в предобработке можно использовать
Pipeline
из библиотеки imbalanced-learn. Включите этапы подготовки данных (скейлинг, реасэмплинг) и обучения модели в единый процесс, чтобы убедиться, что и обучающий, и тестовый наборы проходят через одинаковые налоговые процедуры. -
Изучение других методов реасэмплинга: Возможно, стоит попробовать различные подходы к реасэмплингу, например, использование только SMOTE или ENN отдельно, чтобы определить, какой метод работает лучше для вашей специфической задачи.
4. После рефлексии:
Подводя итог, снижение Train Score при одновременном повышении Test Score не является нормальным и должно вызывать настороженность. Это может скрывать более глубокие проблемы в данных или в том, как вы обрабатываете ваши наборы данных. Понимание этих нюансов позволит вам создать более надежные модели и обеспечить лучшую производительность в реальных условиях. Внимательно пересмотрите процесс предобработки и настройки модели, чтобы добиться согласованности и эффективности.