Apakah implementasi hutan acak di scikit-belajar menggunakan akurasi rata-rata sebagai metode penilaian untuk memperkirakan kesalahan generalisasi dengan sampel out-of-bag? Ini tidak disebutkan dalam dokumentasi, tetapi metode skor () melaporkan akurasi rata-rata.
Saya memiliki dataset yang sangat tidak seimbang, dan saya menggunakan AUC ROC sebagai metrik penilaian saya dalam pencarian kisi. Apakah ada cara untuk memberitahu classifier untuk menggunakan metode penilaian yang sama pada sampel OOB juga?
random-forest
scikit-learn
darXider
sumber
sumber
oob_score
laporkan keakuratannya. Saya perlu melihat kode sumber lagi.Jawaban:
Secara umum, kinerja pengklasifikasi dibandingkan dengan menggunakan akurasi, ini adalah ukuran dari jumlah instance yang diklasifikasikan dengan benar dibagi dengan jumlah total instance. Namun, dari data pelatihan kita bisa mendapatkan perkiraan yang lebih baik dari kesalahan yang diharapkan dari pengklasifikasi kita ketika kita menggunakan teknik ensemble learning atau bagging.
Kesalahan out-of-bag
Metrik ini adalah akurasi dari contoh menggunakan semua pohon dalam ensemble hutan acak yang dihilangkan selama pelatihan. Jadi itu semacam bertindak sebagai contoh semi-pengujian. Anda bisa mengetahui seberapa baik klasifikasi Anda dapat digeneralisasi menggunakan metrik ini.xi
Untuk mengimplementasikan oob di sklearn, Anda perlu menentukannya saat membuat objek Random Forests Anda
Lalu kita bisa melatih modelnya
Seperti yang diharapkan, keakuratan model ketika mengevaluasi set pelatihan sangat tinggi. Namun, ini tidak ada artinya karena Anda bisa sangat cocok dengan data Anda dan dengan demikian model Anda adalah sampah. Namun, kita dapat menggunakan skor out-of-bag sebagai
Ini adalah akurasi saat mengevaluasi contoh kami dalam set pelatihan hanya menggunakan pohon yang dihilangkan. Sekarang mari kita hitung skor pada set pengujian sebagai
Kami melihat bahwa akurasi yang diukur oleh oob sangat mirip dengan yang diperoleh dengan set pengujian. Dengan demikian mengikuti melalui teori bahwa akurasi oob adalah metrik yang lebih baik untuk mengevaluasi kinerja model Anda daripada hanya skor. Ini adalah konsekuensi dari model pengemasan dan tidak dapat dilakukan dengan jenis pengklasifikasi lain.
Menghitung oob menggunakan metrik yang berbeda
Ya, Anda bisa melakukan ini! Namun, tergantung bagaimana tepatnya kode Anda disusun. Saya tidak yakin bagaimana Anda bisa memasukkan oob dan AUC bersama-sama dengan
cross_val_score
fungsinya. Namun, jika Anda melakukan lipatan validasi silang secara manual, Anda dapat melakukan yang berikut, algoritma hutan acak di sklearn memberi Anda fungsi keputusan oob sebagaiKelas kemudian dapat diperoleh dengan menggunakan
Kemudian kita dapat menghitung AUC dengan menggunakan yang berikut ini
sumber
RandomForestClassifier
dapat mengembalikan skor OOB yang BUKAN keakuratan, dan bagian kedua dari jawaban Anda memberikan petunjuk yang sangat baik tentang bagaimana mendekati masalah ini. Namun, saya harus menekankan bahwa seseorang tidak boleh menggunakan label kelas untuk menghitung AUC dari kurva ROC; melainkan, probabilitas kelas harus digunakan secara langsung. Jadi, definisi yang benar adalahpred_train = forest.oob_decision_function_[:, 1]
.