Bagaimana cara mengontrol biaya kesalahan klasifikasi di Hutan Acak?

21

Apakah mungkin untuk mengontrol biaya kesalahan klasifikasi dalam paket R randomForest ?

Dalam pekerjaan saya sendiri, negatif palsu (mis., Hilang karena kesalahan bahwa seseorang mungkin menderita penyakit) jauh lebih mahal daripada positif palsu. Paket rpart memungkinkan pengguna untuk mengontrol biaya kesalahan klasifikasi dengan menentukan matriks kerugian misclassifications berat badan berbeda. Apakah ada yang serupa untuk randomForest? Haruskah saya, misalnya, menggunakan classwtopsi untuk mengontrol kriteria Gini?

pengguna5944
sumber

Jawaban:

8

Tidak juga, jika tidak secara manual membuat klon RF melakukan bagging rpartmodel.

Beberapa opsi berasal dari kenyataan bahwa output RF sebenarnya adalah skor berkelanjutan daripada keputusan yang tajam, yaitu fraksi pohon yang memberikan suara pada beberapa kelas. Ini dapat diekstraksi dengan predict(rf_model,type="prob")dan digunakan untuk membuat, misalnya, kurva ROC yang akan mengungkapkan ambang batas yang lebih baik dari 0,5 (yang nantinya dapat dimasukkan dalam pelatihan RF dengan cutoffparameter).

classwt Pendekatan ini juga tampaknya valid, tetapi dalam praktiknya tidak bekerja dengan baik - transisi antara prediksi seimbang dan pengecoran sepele dari kelas yang sama terlepas dari atribut yang cenderung terlalu tajam untuk dapat digunakan.


sumber
MBQ. Terimakasih banyak. (i) Kurva ROC: Dalam hal ini saya tidak memerlukan kurva ROC karena saya memiliki prior sendiri tentang berapa bobot biaya yang seharusnya. (ii) classwt: Ya, saya telah menemukan bahwa dalam praktiknya, dan sejalan dengan pengguna lain, hasilnya tidak seperti yang diharapkan. (iii) cutoff: Saya tidak jelas tentang cara memanfaatkan cutoffdalam hal ini dan saya akan menerima saran lebih lanjut.
user5944
3

Ada sejumlah cara termasuk biaya.
(1) Pengambilan sampel secara berlebihan / kurang untuk setiap pohon kantong (stratified sampling) adalah metode yang paling umum untuk memasukkan biaya. Anda sengaja membuat ketidakseimbangan dataset.
(2) Pembobotan. Tidak pernah berhasil. Saya pikir ini ditekankan dalam dokumentasi. Beberapa mengklaim Anda hanya perlu mempertimbangkan semua tahapan, termasuk pemisahan Gini dan pemungutan suara terakhir. Jika ini akan berhasil, itu akan menjadi implementasi yang rumit.
(3) Fungsi metacost di Weka.
(4) Memperlakukan hutan acak sebagai penggolong probabilistik dan mengubah ambang batas. Saya paling suka opsi ini. Mungkin karena kurangnya pengetahuan saya, tetapi meskipun algoritma dapat menampilkan probabilitas tidak masuk akal bagi saya untuk memperlakukan mereka seolah-olah ini adalah model probabilistik.

Tapi saya yakin ada pendekatan tambahan.

charles
sumber
3

Disarankan bahwa jika variabel yang Anda coba prediksi bukan 50% untuk class 1dan 50% untuk class 2(seperti kebanyakan kasus), Anda menyesuaikan cutoffparameter untuk mewakili real OOBdalam ringkasan.

Sebagai contoh,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

Dalam hal ini, probabilitas memiliki nilai satu class 1adalah .96sekaligus memiliki nilai class 2adalah .04.

Kalau tidak, hutan acak menggunakan ambang batas 0.5.

pablo_sci
sumber
1

Satu dapat menggabungkan costMatrixdi randomForesteksplisit melalui parmsparameter:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))
Sergey Bushmanov
sumber
0

Anda dapat memasukkan sensitivitas biaya menggunakan sampsizefungsi dalam randomForestpaket.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Variasikan angka (100,20)berdasarkan data yang Anda miliki dan asumsi / aturan bisnis yang Anda gunakan.

Dibutuhkan sedikit pendekatan coba-coba untuk mendapatkan matriks kebingungan yang mencerminkan biaya kesalahan klasifikasi. Lihatlah Ramalan Ramalan Risiko Richard Berk : Pendekatan Pembelajaran Mesin , hlm. 82.

MH TING
sumber