จะลดจำนวนผลบวกปลอมได้อย่างไร


12

ฉันกำลังพยายามที่จะแก้ปัญหางานที่เรียกว่าการตรวจจับคนเดินเท้าและฉันฝึก clasifer ไบนารีในสองประเภทบวก - คนลบ - พื้นหลัง

ฉันมีชุดข้อมูล:

  • จำนวนบวก = 3752
  • จำนวนลบ = 3800

ฉันใช้ train \ test split 80 \ 20% และRandomForestClassifier form scikit- เรียนรู้ ด้วยพารามิเตอร์:

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

ฉันไม่ใช่ผู้เชี่ยวชาญเมื่อพูดถึงป่าสุ่มฉันอ่านมันเมื่อไม่นานมานี้ แต่จากลักษณะที่ปรากฏให้ฉันเห็นคุณกำลังใส่ฟอเรสต์แบบสุ่มมากเกินไป สิ่งที่ฉันจะทำคือการใช้เทคนิคที่คุณใช้การสังเกตแบบ Out-Of-Bag เพื่อคาดการณ์ คุณสามารถค้นหาขั้นตอนบนสไลด์เหล่านี้: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf

อีกสิ่งหนึ่งที่ฉันอยากจะแนะนำก็กล่าวถึงในสไลด์เหล่านี้ที่เรียกว่าเครื่องไล่ระดับสีไล่ระดับสี (GBM) ที่กล่าวถึงในส่วนนี้ ฉันรู้สึกว่า GBM นั้นใช้งานง่ายกว่าฟอเรสต์แบบสุ่ม

แก้ไข 1 : ฉันตรวจสอบอีกครั้งและดูเหมือนว่า bootstrapping เป็นขั้นตอนแรกของ GBM นอกจากนี้ฉันไม่ได้มีปัญหากับ bootstrapping ต่อ se มันดีและดี ปัญหาเดียวของมันคือมันสามารถใช้งานได้แย่มาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.