Создание метрики для истинных позитивов с помощью make_scorer - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать метрику для оптимизации точности истинных положительных значений положительного класса в классификаторе дерева решений:

metrica = make_scorer(precision_score, pos_label=1, greater_is_better=True, 
                      average="binary")

А затем с помощью RandomizedSearchCV для настройки гиперпараметров:

random_search = RandomizedSearchCV(clf, scoring= metrica, 
                                   param_distributions=param_dist, 
                                   n_iter=n_iter_search)

Я получаю следующий результат:

RandomSearchCV results

При настройке дерева с этими параметрами я получаю ноль процентов истинных позитивов ...

Zero percent

Просто меняя splitter='random' на 'best', я поправляюсь с точностью 82% в положительном классе.

Что не получается в моей метрике или RandomSearchCV?

1 Ответ

0 голосов
/ 19 сентября 2018

В вашем RandomizedSearchCV или вашем оценщике нет ничего плохого, хотя вы могли бы просто использовать precision_score в качестве оценщика вместо make_scorer, потому что по умолчанию precision_score имеет параметры, которые вы установилиэто как:

Точка поиска по сетке (или рандомизированного поиска) состоит в том, чтобы найти лучшие значения гиперпараметра для модели, которую вы используете.В этом случае вы решили использовать классическое дерево решений.Имейте в виду, что эта модель довольно проста.По сути, вы строите одно дерево, поэтому важными гиперпараметрами являются те, которые влияют на глубину дерева и критерии разделения.

Вы упоминаете, что когда стратегия splitter была изменена на «лучшую», вы получилилучшая оценка точности.Что ж, splitter также является гиперпараметром модели, поэтому его можно указать в качестве дополнительного параметра в пространстве поиска в сетке.

Еще одна потенциальная причина, по которой вы могли получить оценку низкой точности после выполнениярандомизированный поиск состоит в том, что вы, возможно, не дали ему достаточно итераций, чтобы найти правильные комбинации гиперпараметров.

В конечном счете, вот мои указатели:

  1. Дерево решений - очень базовая модель,Это склонно к переоснащению.Вместо этого я бы порекомендовал модель ансамбля, такую ​​как случайный лес, состоящий из нескольких деревьев решений.
  2. Подумайте, какие гиперпараметры вы хотите настроить, и насколько исчерпывающим вы хотите искать в этом пространстве гиперпараметров, чтобы получить лучшую модель.Вы должны начать с пары гиперпараметров для поиска, начиная с таких важных, как max_depth или min_samples_split, а затем увеличивая масштаб.Это будет экспериментальным на вашей стороне.Здесь нет правильного или неправильного, но следите за лучшими найденными параметрами.
  3. Вы должны подумать, насколько хорошо сбалансированы ваши классы.Модели, как правило, довольно предвзяты, если слишком много одного класса над другим.Если существует дисбаланс классов, вы можете контролировать дисбаланс с помощью аргумента class_weight.
...