Membuat “skor kepastian” dari suara di hutan acak?

36

Saya mencari untuk melatih classifier yang akan membedakan antara Type Adan Type Bobjek dengan set pelatihan yang cukup besar sekitar 10.000 objek, sekitar setengah dari yang ada Type Adan setengahnya adalah Type B. Dataset terdiri dari 100 fitur kontinu yang merinci sifat fisik sel (ukuran, radius rata-rata, dll). Memvisualisasikan data dalam scatterplots berpasangan dan plot kepadatan memberitahu kita bahwa ada tumpang tindih yang signifikan dalam distribusi sel kanker dan normal dalam banyak fitur.

Saat ini saya sedang mengeksplorasi hutan acak sebagai metode klasifikasi untuk dataset ini, dan saya telah melihat beberapa hasil yang baik. Menggunakan R, hutan acak dapat mengklasifikasikan dengan benar sekitar 90% dari objek.

Salah satu hal yang ingin kita coba dan lakukan adalah menciptakan semacam "skor kepastian" yang akan mengukur seberapa yakin kita terhadap klasifikasi objek. Kami tahu bahwa pengklasifikasi kami tidak akan pernah 100% akurat, dan bahkan jika akurasi prediksi yang tinggi tercapai, kami ingin teknisi yang terlatih untuk mengidentifikasi objek mana yang benar-benar Type Adan Type B. Jadi, alih-alih memberikan prediksi tanpa kompromi tentang Type Aatau Type B, kami ingin menyajikan skor untuk setiap objek yang akan menggambarkan bagaimana Aatau Bsuatu objek. Misalnya, jika kita menyusun skor yang berkisar dari 0 hingga 10, skor 0 dapat mengindikasikan objek sangat mirip dengan Type Aobjek, sedangkan skor 10 akan menunjukkan objek sangat mirip Type B.

Saya berpikir bahwa saya bisa menggunakan suara di dalam hutan acak untuk menyusun skor seperti itu. Karena klasifikasi di hutan acak dilakukan dengan suara terbanyak di dalam hutan pohon yang dihasilkan, saya akan berasumsi bahwa objek yang dipilih oleh 100% dari pohon yang Type Aakan berbeda dari objek yang dipilih oleh, katakanlah, 51% dari pohon untuk menjadi Type A.

Saat ini, saya telah mencoba menetapkan ambang batas sewenang-wenang untuk proporsi suara yang harus diterima oleh suatu objek untuk diklasifikasikan sebagai Type Aatau Type B, dan jika ambang tersebut tidak dilewatinya akan diklasifikasikan sebagai Uncertain. Sebagai contoh, jika saya memaksakan kondisi bahwa 80% atau lebih dari pohon harus menyetujui keputusan untuk lulus klasifikasi, saya menemukan bahwa 99% dari prediksi kelas adalah benar, tetapi sekitar 40% dari objek-objek tersebut bined sebagai Uncertain.

Maka, apakah masuk akal untuk memanfaatkan informasi pemungutan suara untuk menilai kepastian prediksi? Atau apakah saya menuju ke arah yang salah dengan pikiran saya?

ialm
sumber
Pastikan Anda memiliki pelatihan dan pengujian data yang terpisah. Pastikan Anda menggunakan set pengujian sesedikit mungkin (idealnya hanya sekali).
Boris Gorelik
@ bbg Saya menggunakan skema pelatihan / validasi / ujian, dalam pembagian 70/20/10. Saya melatih model dengan 70% data dan menyetel parameter berdasarkan hasil pada set validasi 20%. Setelah saya menyetel parameter pada dua set ini, saya menilai model pada set tes 10%. Meskipun Breiman mengklaim bahwa tingkat kesalahan OOB bawaan membuat tes terpisah ditetapkan berlebihan, saya khawatir dengan klaimnya.
ialm

Jawaban:

19

Masuk akal, dan semua implementasi hutan acak yang telah saya kerjakan (seperti MATLAB) memberikan keluaran probabilistik juga untuk melakukan hal itu.

Saya tidak bekerja dengan implementasi R, tetapi saya akan terkejut jika tidak ada cara sederhana untuk mendapatkan output lunak dari suara serta keputusan sulit.

Sunting: Baru saja melirik R, dan predict.randomForest melakukan probabilitas output juga.

Benhamner
sumber
1
Terimakasih atas balasan anda. Anda benar, saya telah membuat skrip yang akan menampilkan proporsi suara yang diterima setiap objek. Saya bertanya-tanya, seberapa bermanfaatkah suara-suara ini? Apakah ada langkah selanjutnya yang Anda rekomendasikan? Haruskah saya melihat variabilitas proporsi pemungutan suara melalui penambahan frekuensi RF? Saya mengerti bahwa RF memiliki elemen stokastik untuk itu. Apakah ada diagnosa yang harus saya lihat?
ialm
3
@Jonathan Anda dapat mencoba melihat plot yang menampilkan sebagian kecil objek nyata dari beberapa kelas sebagai fungsi dari sebagian kecil suara untuk kelas ini dari hutan. Saya sedang mengerjakan satu masalah yang membutuhkan skor kepercayaan diri dan ternyata saya berhasil mendapatkan kurva logistik yang sangat bagus.
@ MBQ Maaf, bisakah Anda menjelaskan apa yang Anda maksud dengan itu? Saya tertarik dengan saran Anda dan akan menindaklanjutinya besok!
ialm
1
Juga, variabilitas dalam RF datang pada tahap pelatihan, jadi menjalankan sampel uji beberapa kali melalui RF tidak akan mengubah hasil. Saya akan melihat AUC vs. jumlah pohon dalam RF, untuk memastikan Anda memiliki cukup pohon, dan kemudian mengoptimalkan parameter daun minimum menurut AUC.
benhamner
2
@ Jonathan Saya pikir mbq merujuk ke sesuatu yang bernama kalibrasi (walaupun mungkin ada nama lain). Lihat misalnya pertanyaan ini: Mengkalibrasi multi-class boosted classifier , Apa yang dimaksud dengan "nilai nyata" merujuk pada klasifikasi terawasi?
steffen
17

Jika Anda menggunakan R, paket caret akan menyelamatkan Anda dari menciptakan kembali roda. Sebagai contoh, kode berikut ini menggunakan validasi silang untuk memilih parameter tuning untuk model hutan acak, dan kemudian mengeluarkan rata-rata dan standar deviasi akurasi untuk setiap lipatan validasi silang. Akhirnya, ini menghitung probabilitas kelas untuk model.

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

Yang menyenangkan tentang caret adalah membuatnya sangat mudah untuk membandingkan model prediksi yang berbeda. Misalnya, jika Anda ingin mencoba SVM, Anda dapat mengganti teks method='rf'dengan method='svmLinear'atau method='svmRadial'. Anda juga dapat memilih parameter tuning berdasarkan AUC daripada akurasi dengan menambahkan baris untuk parameter trainControl: summaryFunction=twoClassSummary.

Secara Finlandia, ada sedikit kode di sana dari paket PerformanceAnalytics chart.Correlation(Dataset[-5], col= Dataset$Class),, yang tidak diperlukan untuk membangun model, tetapi memberikan visualisasi yang bagus dari dataset Anda.

Zach
sumber
Anda membuat saya penggemar paket caret. Saya pikir saya akan membuat thread R kedua terbuka hanya untuk mencoba metode klasifikasi yang berbeda dan meminta caret melakukan CV dan parameter tuning dengan sendirinya dan melihat apakah saya mendapatkan hasil yang sebanding.
ialm
@ Jonathan senang mendengarnya! Ini paket yang luar biasa. Coba modelLookup()perintah untuk daftar apa yang mungkin.
Zach
The probjenis predictjuga tersedia dengan menggunakan randomForestuntuk melatih model Anda (dengan atau tanpa menggunakan paket lain seperti caretatau PerformanceAnalytics).
Hack-R
2

The randomForest paket di R adalah paket yang cukup layak untuk masuk ke rincian yang lebih besar tentang analisis Anda. Ini memberi Anda suara (baik sebagai pecahan atau jumlah mentah) dan menawarkan kapasitas bawaan untuk penyetelan dan validasi silang dan bahkan dapat memberi Anda lebih banyak informasi tentang fitur-fitur Anda (jika Anda ingin tahu yang mana dari 100 yang Anda miliki) yang paling penting dalam analisis).

Jika Anda sudah menggunakan paket itu, maka mungkin Anda ingin melihatnya lebih dekat dan jika tidak maka mungkin memeriksanya.

pengguna4673
sumber