Saya mencoba untuk menyelesaikan tugas yang disebut deteksi pejalan kaki dan saya melatih clasifer biner pada dua kategori positif - orang, negatif - latar belakang.
Saya punya dataset:
- jumlah positif = 3752
- jumlah negatif = 3800
Saya menggunakan train \ test split 80 \ 20% dan bentuk RandomForestClassifier scikit-pelajari dengan parameter:
RandomForestClassifier(n_estimators=100, max_depth=50, n_jobs= -1)
Saya mendapat skor: 95.896757%
tes pada data pelatihan (bekerja dengan sempurna):
true positive: 3005
false positive: 0
false negative: 0
true negative: 3036
tes pada data pengujian:
true positive: 742
false positive: 57
false negative: 5
true negative: 707
Pertanyaan saya adalah bagaimana cara mengurangi jumlah positif palsu (latar belakang diklasifikasikan sebagai orang)? Juga mengapa saya memiliki lebih banyak kesalahan positif palsu daripada negatif palsu?
Saya mencoba menggunakan class_weight
parameter, tetapi pada beberapa titik kinerja menurun (seperti yang Anda lihat di 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 %
Juga patut dicatat bahwa RandomForest tampaknya tidak mengalami dataset yang tidak seimbang:
pos = 3752 neg = 10100
class_weight = {0: 1,1: 1} benar positif: 3007 positif palsu: 0 negatif negatif: 0 benar negatif: 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 %
Jawaban:
Saya bukan ahli dalam hal hutan acak, saya membacanya baru-baru ini. Tapi dari tampilannya bagiku kau terlalu cocok dengan hutan acak. Apa yang akan saya lakukan adalah menggunakan teknik di mana Anda menggunakan pengamatan Out-Of-Bag untuk membuat prediksi. Anda dapat menemukan prosedur pada slide ini: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf
Satu hal lain yang saya sarankan juga disebutkan dalam slide ini yang disebut gradient boosting machine (GBM) yang juga disebutkan di bagian ini. Saya merasa bahwa GBM lebih intuitif daripada hutan acak.
Sunting1 : Saya memeriksanya lagi dan sepertinya bootstrap adalah langkah pertama dari GBM. Juga, saya tidak punya masalah dengan bootstrap, itu bagus dan bagus. Satu-satunya masalah dengan itu adalah bahwa itu dapat digunakan dengan sangat buruk.
sumber