Я пытаюсь решить задачу, которая называется « Обнаружение пешеходов», и я тренирую двоичный класс по двум категориям: позитивные - люди, негативные - фон.
У меня есть набор данных:
- количество позитивов = 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 %
Ответы:
Я не специалист по случайным лесам, я читаю их совсем недавно. Но из того, как это выглядит для меня, вы перегружаете случайный лес. То, что я хотел бы сделать, - это использовать технику, в которой вы используете наблюдения «из сумки», чтобы делать прогнозы. Вы можете найти процедуру на этих слайдах: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf
В этих слайдах также упоминается еще одна вещь, которая называется машиной повышения градиента (GBM), также упомянутой в этом разделе. Я чувствую, что GBM более интуитивен, чем случайный лес.
Edit1 : я проверил это снова, и кажется, начальная загрузка это самый первый шаг GBM. Кроме того, у меня нет проблем с начальной загрузкой как таковой, это хорошо и хорошо. Единственная проблема в том, что его можно использовать очень плохо.
источник