Bagaimana cara memprediksi hasil dengan hanya kasus positif sebagai pelatihan?

21

Demi kesederhanaan, katakanlah saya sedang mengerjakan contoh klasik dari email spam / bukan-spam.

Saya memiliki 20000 email. Dari jumlah tersebut, saya tahu bahwa 2000 adalah spam tetapi saya tidak memiliki contoh email bukan-spam. Saya ingin memprediksi apakah 18.000 sisanya adalah spam atau tidak. Idealnya, hasil yang saya cari adalah probabilitas (atau nilai-p) bahwa email tersebut adalah spam.

Algoritma apa yang dapat saya gunakan untuk membuat prediksi yang masuk akal dalam situasi ini?

Saat ini, saya sedang memikirkan metode berbasis jarak yang akan memberi tahu saya seberapa mirip email saya dengan email spam yang dikenal. Opsi apa yang saya miliki?

Secara lebih umum, dapatkah saya menggunakan metode pembelajaran yang diawasi, atau apakah saya perlu memiliki kasus-kasus negatif dalam pelatihan saya untuk melakukannya? Apakah saya terbatas pada pendekatan pembelajaran tanpa pengawasan? Bagaimana dengan metode semi-diawasi?

enricoferrero
sumber
1
Algoritma pembelajaran yang akan Anda gunakan akan memprediksi semua mail spam. Anda harus memiliki contoh dari dua kategori untuk setiap pembelajaran yang masuk akal.
JohnRos
OK, itu akan mengesampingkan pendekatan pembelajaran klasik yang diawasi. Tetapi apakah ada algoritma yang mengembalikan semacam metrik kesamaan? Misalnya: email ini sangat mirip dengan email spam, yang ini tidak.
enricoferrero
6
@ JohnRos tidak benar, belajar dari data positif dan tidak berlabel adalah topik besar dalam pembelajaran semi-diawasi dan tidak seperti yang Anda gambarkan.
Marc Claesen
5
@MarcClaesen: Saya tidak terbiasa dengan garis penelitian (sangat keren) ini. Saya melihat bahwa keajaiban itu dengan asumsi bahwa data yang tidak berlabel adalah campuran dari spam dan non-spam, yang membuat masalah dapat dipecahkan.
JohnRos
2
@ JohnRos persis, dan saya setuju dengan faktor kesejukan. Apa yang saya temukan sangat keren adalah kenyataan bahwa kami baru-baru ini dapat menunjukkan cara menghitung metrik kinerja tradisional berdasarkan tabel kontingensi (mis. Akurasi, presisi, penarikan, ...) tanpa diketahui negatif !
Marc Claesen

Jawaban:

19

Ini disebut belajar dari data positif dan tidak berlabel, atau PU learning, atau ceruk aktif pembelajaran semi-diawasi.

Secara singkat, penting untuk menggunakan data yang tidak berlabel dalam proses pembelajaran karena menghasilkan model yang meningkat secara signifikan di atas apa yang disebut pengklasifikasi kelas tunggal yang dilatih secara eksklusif pada hal-hal positif yang diketahui. Data yang tidak berlabel dapat digabungkan dalam beberapa cara, pendekatan utama adalah sebagai berikut:

  • entah bagaimana menyimpulkan serangkaian kemungkinan negatif dari data yang tidak berlabel dan kemudian melatih model yang diawasi untuk membedakan positif yang diketahui dari negatif yang disimpulkan ini.
  • memperlakukan set berlabel sebagai negatif dan entah bagaimana memperhitungkan kebisingan label yang diketahui ada.

Saya aktif di bidang ini, dan daripada meringkasnya di sini untuk Anda, saya sarankan membaca dua makalah saya dan referensi di dalamnya untuk mendapatkan gambaran umum domain:

Marc Claesen
sumber
1
Luar biasa! Terima kasih banyak untuk referensi. RESVM dan SVM yang dikantongi tampaknya memiliki kinerja yang sama dalam pengaturan pembelajaran PU. Bisakah Anda merekomendasikan implementasi (lebih disukai dalam R) dari kedua algoritma? Sayangnya, keduanya tidak dimasukkan dalam caret.
enricoferrero
1
@ enricoferrero Ya, mereka melakukan hal yang sama kecuali ada positif palsu (diketahui), dalam hal ini RESVM secara signifikan mengungguli SVM mengantongi (saya merancang RESVM untuk tujuan itu, karena aplikasi yang saya kerjakan memiliki false positive). Saya tidak berpikir ada implementasi R yang tersedia, tetapi Anda dapat mengimplementasikan keduanya dengan mudah dengan membungkus implementasi SVM seperti kernlabatau e1071. Perhatikan bahwa baik bagging SVM dan RESVM memiliki sejumlah hiperparameter yang harus Anda optimalkan, untuk itu saya merekomendasikan perpustakaan Optunity (memiliki antarmuka R).
Marc Claesen
1
@ enricoferrero Saya memiliki implementasi perintah-baris RESVM yang tersedia di github.com/claesenm/resvm , meskipun kode itu tidak dipoles dengan baik. Repo spesifik itu ditulis dengan Python dan digunakan sebagai driver untuk paket EnsembleSVM .
Marc Claesen
Sepertinya pilihan lain yang baik untuk algoritma SVM yang dikantongi bisa menggunakan paket mlr di R dengan pembungkus bagging di sekitar pembelajar SVM .
enricoferrero
7

Saya berasumsi tidak ada banyak kasus spam dalam 18.000 kasus Anda. Untuk menggunakan pendekatan pembelajaran terawasi untuk ini, Anda harus memiliki lebih dari 1 kategori / kelas dalam data Anda. Karena Anda tahu 2.000 kasus adalah spam, Anda dapat memberi label 18.000 kasus lainnya sebagai 'kategori tidak dikenal' dan melatih setiap model pembelajaran yang diawasi untuk memprediksi jika suatu kasus ada dalam spam atau kategori tidak dikenal. Kemudian periksa ketepatan model sampel Anda untuk melihat seberapa baik kinerja model untuk membedakan antara 2 kategori. Jika berkinerja baik, maka asumsi saya tentang beberapa kasus spam dalam kategori 'tidak dikenal' dijamin. Jika itu tidak berkinerja baik, maka Anda harus menggunakan pelajar tanpa pengawasan (seperti kmeans, dll) untuk mengelompokkan dan mengidentifikasi kelompok-kelompok homogen yang terpisah dalam data Anda. Kemudian mengidentifikasi cluster mana yang paling banyak berisi 2000 spam email, dan mana yang tidak, dan beri label masing-masing sebagai spam dan bukan spam. Selanjutnya, Anda dapat melanjutkan dengan pemodelan menggunakan pelajar yang dilindungi seperti yang saya jelaskan sebelumnya.

FelixNNelson
sumber
2

Apa yang OP berbicara tentang adalah klasifikasi tugas satu kelas, yang merupakan salah satu yang sangat menantang.

Ada banyak makalah tentang tugas ini di bidang penelitian yang berbeda. Saya juga menulis satu Sebuah Efisien intrinsik Karangan Verifikasi Skema Berdasarkan Ensemble Learning . Hal ini sangat mudah untuk beradaptasi itu dalam rangka untuk spam yang mengklasifikasikan / bukan spam, bukan penulis. Mencobanya dan beritahu saya jika Anda membutuhkan informasi lebih lanjut ...

pengecualian tertangani
sumber
Saya mendapatkan kesalahan 404 saat mengikuti tautan Anda.
enricoferrero
Ada kesalahan ketik. Maaf untuk itu, harus bekerja sekarang ;-)
Pengecualian tidak tertangani