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
from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators = 100, oob_score = True)
Lalu kita bisa melatih modelnya
forest.fit(X_train, y_train)
print('Score: ', forest.score(X_train, y_train))
Nilai: 0,979921928817
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
print(forest.oob_score_)
0.86453272101
Ini adalah akurasi saat mengevaluasi contoh kami dalam set pelatihan hanya menggunakan pohon yang dihilangkan. Sekarang mari kita hitung skor pada set pengujian sebagai
print('Score: ', forest.score(X_test, y_test))
Nilai: 0,86517733935
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 sebagai
print(forest.oob_decision_function_)
Kelas kemudian dapat diperoleh dengan menggunakan
from sklearn import metrics
pred_train = np.argmax(forest.oob_decision_function_,axis=1)
Kemudian kita dapat menghitung AUC dengan menggunakan yang berikut ini
metrics.roc_auc_score(y_train, pred_train)
0.86217157846471204