Saya mendapat skrip R dari seseorang untuk menjalankan model hutan acak. Saya memodifikasi dan menjalankannya dengan beberapa data karyawan. Kami mencoba memprediksi pemisahan sukarela.
Berikut adalah beberapa info tambahan: ini adalah model klasifikasi yang 0 = karyawan tetap, 1 = karyawan diberhentikan, saat ini kami hanya melihat selusin variabel prediktor, data "tidak seimbang" di mana catatan term'd membuat sekitar 7 % dari total catatan yang ditetapkan.
Saya menjalankan model dengan berbagai pilihan mtry dan ntree tetapi diselesaikan di bawah ini. OOB adalah 6,8% yang menurut saya baik tetapi matriks kebingungan tampaknya menceritakan kisah yang berbeda untuk memprediksi istilah karena tingkat kesalahan cukup tinggi pada 92,79% Apakah saya benar dalam berasumsi bahwa saya tidak dapat mengandalkan dan menggunakan model ini karena tingkat kesalahan tinggi untuk memprediksi istilah? atau ada sesuatu yang juga bisa saya lakukan untuk menggunakan RF dan mendapatkan tingkat kesalahan yang lebih kecil untuk memprediksi istilah?
FOREST_model <- randomForest(theFormula, data=trainset, mtry=3, ntree=500, importance=TRUE, do.trace=100)
ntree OOB 1 2
100: 6.97% 0.47% 92.79%
200: 6.87% 0.36% 92.79%
300: 6.82% 0.33% 92.55%
400: 6.80% 0.29% 92.79%
500: 6.80% 0.29% 92.79%
> print(FOREST_model)
Call:
randomForest(formula = theFormula, data = trainset, mtry = 3, ntree = 500, importance = TRUE, do.trace = 100)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 3
OOB estimate of error rate: 6.8%
Confusion matrix:
0 1 class.error
0 5476 16 0.002913328
1 386 30 0.927884615
> nrow(trainset)
[1] 5908
sumber
Set Anda sangat tidak seimbang - RF biasanya gagal dalam skenario ini (yaitu hanya memprediksi kelas yang lebih besar).
Anda harus mencoba menyeimbangkan set Anda dengan mengambil sampel kelas "0" hanya untuk memiliki ukuran yang sama dengan kelas "1" atau dengan bermain dengan
classwt
parameter.sumber
classwt
parameter, saya pikir ini belum diimplementasikan dalamrandomForest()
fungsirandomForest
paket di R. Per Link . Sudahkah Anda menggunakannya sebelumnya? Saya mencobanya dengan nilai yang berbeda tetapi mendapat hasil yang identik dengan defaultclasswt=NULL
.Berdasarkan matriks kebingungan Anda, Anda memiliki 5.908 titik data dan sebagian besar, sebagian besar dari mereka adalah tipe 0 ('karyawan tetap'). Pengklasifikasi karena itu bisa lolos dengan menjadi "malas" dan memilih kelas mayoritas kecuali jika benar-benar yakin bahwa contoh milik kelas lain. Perhatikan bahwa tingkat kesalahan keseluruhan Anda adalah ~ 7%, yang cukup dekat dengan persentase contoh Class1!
Anda punya beberapa opsi:
Buang contoh Class0 sampai Anda memiliki kelas yang kurang lebih seimbang. Saya tidak tahu apakah ada literatur tentang cara memilih subset representatif yang optimal (mungkin orang lain dapat mempertimbangkan?), Tetapi Anda bisa mulai dengan memberikan contoh secara acak. Anda bisa meneruskan
subset
argumen ke randomForest, yang seharusnya membuat ini sepele untuk diuji.Sesuaikan fungsi kerugian / bobot kelas Anda untuk mengimbangi jumlah Kelas0 yang tidak proporsional. Anda pada dasarnya ingin membuatnya jauh lebih mahal bagi classifier untuk melakukan kesalahan klasifikasi contoh Class1 daripada Class0 satu. Mungkin masuk akal untuk mencoba Kelas 0 = 1 / 0,07 ~ = 14x Kelas1 untuk memulai, tetapi Anda mungkin ingin menyesuaikan ini berdasarkan permintaan bisnis Anda (seberapa parah salah satu jenis kesalahan). Saya pikir
classwt
parameternya adalah apa yang Anda cari di sini.Gunakan pengambilan sampel bertingkat untuk memastikan bahwa Anda mendapatkan contoh dari kedua kelas dalam data pelatihan pohon. Ada kemungkinan bahwa beberapa pohon Anda dilatih hanya pada data Class0, yang jelas akan menjadi pertanda buruk untuk kinerja generalisasi mereka. Lihat
strata
argumennya.sumber