Как уменьшить количество ложных срабатываний?


12

Я пытаюсь решить задачу, которая называется « Обнаружение пешеходов», и я тренирую двоичный класс по двум категориям: позитивные - люди, негативные - фон.

У меня есть набор данных:

  • количество позитивов = 3752
  • число отрицательных = 3800

Я использую train \ test split 80 \ 20% и форму scikit-learn RandomForestClassifier с параметрами:

RandomForestClassifier(n_estimators=100, max_depth=50, n_jobs= -1)

Я получаю оценку: 95,896757%

тест по тренировочным данным (работает отлично):

true positive:  3005
false positive:  0
false negative:  0
true negative:  3036

тест по данным тестирования:

true positive:  742
false positive:  57
false negative:  5
true negative:  707

Мой вопрос, как уменьшить количество ложных срабатываний (фон классифицируется как люди)? Кроме того, почему у меня больше ложных положительных ошибок, чем ложных отрицательных?

Я пытался использовать class_weightпараметр, но в какой-то момент производительность снижается (как вы можете видеть в class_weight = {0: 1,1: 4}).

class_weight= {0:1,1:1}
true positive:  3005
false positive:  0
false negative:  0
true negative:  3036

true positive:  742
false positive:  55
false negative:  5
true negative:  709
score: 96.029120 %

class_weight= {0:1,1:2}
true positive:  3005
false positive:  0
false negative:  0
true negative:  3036

true positive:  741
false positive:  45
false negative:  6
true negative:  719
score: 96.624752 %

class_weight= {0:1,1:3}
true positive:  3005
false positive:  0
false negative:  0
true negative:  3036

true positive:  738
false positive:  44
false negative:  9
true negative:  720
score: 96.492389 %

class_weight= {0:1,1:4}
true positive:  3005
false positive:  13
false negative:  0
true negative:  3023

true positive:  735
false positive:  46
false negative:  12
true negative:  718
score: 96.161482 %

class_weight= {0:1,1:5}
true positive:  3005
false positive:  31
false negative:  0
true negative:  3005

true positive:  737
false positive:  48
false negative:  10
true negative:  716
score: 96.161482 %

class_weight= {0:1,1:6}
true positive:  3005
false positive:  56
false negative:  0
true negative:  2980

true positive:  736
false positive:  51
false negative:  11
true negative:  713
score: 95.896757 %

class_weight= {0:1,1:7}
true positive:  3005
false positive:  87
false negative:  0
true negative:  2949

true positive:  734
false positive:  59
false negative:  13
true negative:  705
score: 95.234944 %

Также стоит отметить, что RandomForest, похоже, не страдает от несбалансированного набора данных:

pos = 3752 neg = 10100

class_weight = {0: 1,1: 1} истинно положительно: 3007 ложно положительно: 0 ложно отрицательно: 0 истинно отрицательно: 8074

true positive:  729
false positive:  71
false negative:  16
true negative:  1955
score: 96.860339 %

class_weight= {0:1,1:2}
true positive:  3007
false positive:  0
false negative:  0
true negative:  8074

true positive:  728
false positive:  59
false negative:  17
true negative:  1967
score: 97.257308 %

class_weight= {0:1,1:3}
true positive:  3007
false positive:  0
false negative:  0
true negative:  8074

true positive:  727
false positive:  58
false negative:  18
true negative:  1968
score: 97.257308 %

Ответы:


7

Я не специалист по случайным лесам, я читаю их совсем недавно. Но из того, как это выглядит для меня, вы перегружаете случайный лес. То, что я хотел бы сделать, - это использовать технику, в которой вы используете наблюдения «из сумки», чтобы делать прогнозы. Вы можете найти процедуру на этих слайдах: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf

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

Edit1 : я проверил это снова, и кажется, начальная загрузка это самый первый шаг GBM. Кроме того, у меня нет проблем с начальной загрузкой как таковой, это хорошо и хорошо. Единственная проблема в том, что его можно использовать очень плохо.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.