Высокая точность отзыва для данных поезда, но очень плохая для тестовых данных в задаче классификации - PullRequest
2 голосов
/ 09 марта 2020

Я очень новичок в ML и пытаюсь создать классификатор для несбалансированного бинарного класса для реальной жизненной проблемы. Я пробовал различные модели, такие как регрессия Logisti c, Random Forest, ANN и др. c, но каждый раз я получаю очень высокую точность и вспоминаю (около 94%) данные о поездах и очень плохие (около 1%) для проверки или проверки данных. У меня есть 53 функции и 97094 точек данных. Я попытался настроить гиперпараметры, но, насколько я понимаю, с текущей точностью и отзывом для данных тестирования и проверки, это также не поможет значительно. Может кто-нибудь, пожалуйста, помогите мне понять, что могло пойти не так. Спасибо.

rf = RandomForestClassifier(bootstrap=True, class_weight={1:0.80,0:0.20}, criterion='entropy',
                       max_depth=2, max_features=4, 
                       min_impurity_decrease=0.01, min_impurity_split=None,
                       min_weight_fraction_leaf=0.0, n_estimators=10,
                       n_jobs=-1, oob_score=False, random_state=41, verbose=0,
                       warm_start=False)
rf.fit(X_train, y_train)

Result Selected feature correlation with each otherAll feature correlation with target

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Трудно сказать, не видя ваши фактические данные или код, который вы используете, но ваши модели, вероятно, соответствуют вашему учебному набору данных или классу большинства.

Если ваша модель превышает ваш учебный набор данных, он учится запоминать ваш фактический тренировочный набор данных. Он не находит каких-либо общих различий для классификации ваших данных, но он очень близко приспосабливает границы классификации к данным обучения. Вам следует рассмотреть возможность использования менее сложных моделей (например, ограничить количество деревьев в случайном лесу), отбросить некоторые функции (например, начать использовать только 3 из 53 объектов), упорядочить или дополнить данные. См. здесь для получения дополнительной техники против переобучения тренировочных данных и здесь для примера переобучения и недостаточной подгонки.

Если ваша модель просто переходит в класс большинства (например, 99 % ваших данных имеет тот же класс), тогда вы можете попытаться пересмотреть класс меньшинства во время обучения.

0 голосов
/ 09 марта 2020

Вы, вероятно, перегружаете модель из-за хороших тренировочных показателей, но из-за плохих тестовых показателей, это говорит о том, что ваша модель не может достаточно хорошо обобщать и ее следует упростить Как сказал @mrzo - у вас слишком много возможностей, поэтому изучите алгоритмы уменьшения размерности и примените их к вашему набору данных до применения вашей модели. Еще одно хорошее начало - запустить методы «важности функций» классификаторов деревьев, чтобы увидеть, что действительно имеет значение в данном наборе данных. Не глядя на вашу модель и набор данных - это всего лишь предположение.

...