Meningkatnya jumlah fitur menghasilkan penurunan akurasi tetapi peningkatan sebelum / penarikan

15

Saya baru belajar Mesin. Saat ini saya menggunakan classifier Naive Bayes (NB) untuk mengklasifikasikan teks kecil dalam 3 kelas sebagai positif, negatif atau netral, menggunakan NLTK dan python.

Setelah melakukan beberapa tes, dengan dataset yang terdiri dari 300.000 instance (16.924 positif, 7.477 negatif, dan 275.599 netral), saya menemukan bahwa ketika saya menambah jumlah fitur, akurasinya turun tetapi presisi / recall untuk kelas positif dan negatif naik. apakah ini perilaku normal untuk NB classifier? Bisakah kita mengatakan bahwa akan lebih baik menggunakan lebih banyak fitur?

Beberapa data:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Terima kasih sebelumnya...

Edit 2011/11/26

Saya telah menguji 3 strategi pemilihan fitur yang berbeda (MAXFREQ, FREQENT, MAXINFOGAIN) dengan classifier Naif Bayes. Pertama di sini adalah Akurasi, dan Tindakan F1 per kelas:

masukkan deskripsi gambar di sini

Lalu saya telah merencanakan kesalahan kereta dan kesalahan pengujian dengan set pelatihan tambahan, saat menggunakan MAXINFOGAIN dengan 100 fitur teratas dan 1000 teratas:

masukkan deskripsi gambar di sini

Jadi, menurut saya meskipun akurasi tertinggi dicapai dengan FREQENT, pengklasifikasi terbaik adalah yang menggunakan MAXINFOGAIN, apakah ini benar ? Saat menggunakan 100 fitur teratas kami memiliki bias (kesalahan pengujian dekat dengan kesalahan kereta) dan menambahkan lebih banyak contoh pelatihan tidak akan membantu. Untuk meningkatkan ini, kita akan memerlukan lebih banyak fitur. Dengan 1000 fitur, bias berkurang tetapi kesalahan meningkat ... Apakah ini ok? Haruskah saya perlu menambahkan lebih banyak fitur? Saya tidak benar-benar tahu bagaimana menafsirkan ini ...

Terima kasih lagi...

kanzen_master
sumber
1
Itu tergantung pada apa yang Anda maksud dengan "classifier terbaik", jika tugas Anda adalah membangun classifier dengan akurasi yang baik secara keseluruhan, saya akan memilih FREQENT. Di sisi lain, jika, seperti dalam sebagian besar tugas klasifikasi kelas langka, Anda ingin mengklasifikasikan lebih baik kelas langka (yang bisa menjadi kelas "negatif" atau "positif") saya akan memilih MAXINFOGAIN. Saya pikir interpretasi kurva belajar Anda benar: dengan 100 fitur yang Anda miliki bias dan Anda dapat menambahkannya, dengan 1000 Anda memiliki varian dan Anda dapat menghapusnya. Mungkin Anda dapat mencoba trade-off antara 100 dan 1000 fitur untuk mendapatkan hasil yang lebih baik.
Simone
Terima kasih atas bantuan Anda, Simone! Saya mengerti segalanya kecuali bagian terakhir ... Bisakah Anda memberi tahu saya bagaimana Anda melihat varian tinggi dengan 1000 fitur? Karena perbedaan antara kesalahan tes dan kereta tampaknya tidak banyak, itu masih tampak seperti bias bagi saya ...
kanzen_master
Saya memberikan beberapa contoh pada jawaban saya. Ketika kurva tidak begitu dekat masalah diklasifikasikan sebagai varian tinggi . Dalam kasus Anda, mungkin saya katakan kepada Anda bahwa karena dengan lebih sedikit fitur Anda mendapatkan kinerja yang lebih baik, dan dengan 1000 fitur cenderung menjadi masalah varian tinggi. Daripada memplot hasil dari algoritma pemilihan fitur dengan langkah-langkah yang dihitung pada set pelatihan, cobalah untuk membagi data Anda dalam pelatihan (2/3 dari mereka) dan validasi, kemudian melakukan pemilihan fitur pada set pelatihan dan mengevaluasinya pada set tes . Anda harus menemukan maksimum di tengah plot.
Simone
Terima kasih atas jawabannya. Contoh ke-3 dari postingan Anda yang diperbarui (hasil bagus, kereta api, kurva kesalahan pengujian tidak terlalu dekat dan tidak terlalu jauh) terlihat seperti kurva pembelajaran yang saya plot menggunakan 1000 fitur, jadi saya pikir menggunakan sekitar 1000 fitur akan menjadi "hasil yang baik". Namun, dalam hal ini kesalahannya lebih tinggi, yang tidak baik. Tetapi, hanya dengan melihat jarak antara kurva, saya tidak dapat melihat varians tinggi dengan 1000 fitur ... (Omong-omong, saya sudah membagi data dalam 2/3 sebagai set latihan, 1/3 sebagai set tes, fitur pertunjukan seleksi pada set pelatihan, dan mengevaluasi pada set tes ...)
kanzen_master
1
BAIK. Saya cukup baru dalam mempelajari kurva dan contoh-contoh Anda sangat menarik dan membuat saya mendapatkan wawasan tentangnya. Jadi, terima kasih D T. Ya, mungkin ada bias dalam kedua kasus. Menurut saya, Anda memiliki kumpulan data yang sangat miring dan daripada menguji keakuratan, penting untuk melihat ke ukuran-F. Melihat plot Anda, tampaknya semakin banyak fitur yang Anda miliki, semakin baik; pada kenyataannya, ukuran-F membaik. Saya mendengar bahwa dalam klasifikasi teks, jika fitur Anda adalah frekuensi kata dalam teks Anda, adalah umum untuk menggunakan banyak fitur; tapi saya tidak terbiasa dan saya tidak bisa memberi tahu lebih banyak.
Simone

Jawaban:

18

Akurasi vs ukuran-F

Pertama-tama, saat Anda menggunakan metrik, Anda harus tahu cara memainkannya. Akurasi mengukur rasio instance yang diklasifikasikan dengan benar di semua kelas. Itu berarti, bahwa jika satu kelas lebih sering terjadi daripada yang lain, maka akurasi yang dihasilkan jelas didominasi oleh keakuratan kelas yang mendominasi. Dalam kasus Anda jika seseorang membangun Model M yang hanya memprediksi "netral" untuk setiap contoh, akurasi yang dihasilkan akan menjadi

Sebuahcc=nekamutrSebuahl(nekamutrSebuahl+halHaissayatsayave+negSebuahtsayave)=0,9188

Bagus, tapi tidak berguna.

Jadi penambahan fitur jelas meningkatkan kekuatan NB untuk membedakan kelas, tetapi dengan memprediksi "positif" dan "negatif" orang salah mengklasifikasikan netral dan karenanya akurasi turun (diucapkan secara kasar). Perilaku ini tidak tergantung pada NB.

Lebih atau kurang Fitur?

Secara umum tidak lebih baik menggunakan lebih banyak fitur, tetapi menggunakan fitur yang tepat. Lebih banyak fitur yang lebih baik sejauh algoritma pemilihan fitur memiliki lebih banyak pilihan untuk menemukan subset optimal (saya sarankan untuk mengeksplorasi: fitur-pilihan crossvalidated ). Ketika datang ke NB, pendekatan yang cepat dan solid (tetapi kurang optimal) adalah dengan menggunakan InformationGain (Rasio) untuk mengurutkan fitur dalam urutan menurun dan memilih k atas.

Sekali lagi, saran ini (kecuali InformationGain) tidak tergantung pada algoritma klasifikasi.

EDIT 27.11.11

Ada banyak kebingungan mengenai bias dan varians untuk memilih jumlah fitur yang benar. Karena itu saya sarankan untuk membaca halaman pertama tutorial ini: Bias-Variance tradeoff . Esensi kuncinya adalah:

  • High Bias berarti, bahwa modelnya kurang optimal, yaitu test-errornya tinggi (underfitting, seperti yang dikatakan Simone)
  • Varians Tinggi berarti, bahwa model sangat sensitif terhadap sampel yang digunakan untuk membangun model . Itu berarti, bahwa kesalahan sangat tergantung pada set pelatihan yang digunakan dan karenanya varians kesalahan (dievaluasi di berbagai crossvalidation-lipatan) akan sangat berbeda. (overfitting)

Kurva pembelajaran yang diplot memang menunjukkan Bias, karena kesalahannya diplot. Namun, yang tidak bisa Anda lihat adalah Variance, karena interval kepercayaan kesalahan tidak diplot sama sekali.

Contoh: Saat melakukan Crossvalidation 3 kali lipat 6 kali (ya, pengulangan dengan partisi data yang berbeda dianjurkan, Kohavi menyarankan 6 pengulangan), Anda mendapatkan 18 nilai. Saya sekarang berharap bahwa ...

  • Dengan sejumlah kecil fitur, kesalahan rata-rata (bias) akan lebih rendah, namun, varians kesalahan (dari 18 nilai) akan lebih tinggi.
  • dengan jumlah fitur yang tinggi, kesalahan rata-rata (bias) akan lebih tinggi, tetapi varians kesalahan (dari 18 nilai) lebih rendah.

Perilaku kesalahan / bias ini persis seperti yang kami lihat di plot Anda. Kami tidak dapat membuat pernyataan tentang varians. Bahwa kurva dekat satu sama lain dapat menjadi indikasi bahwa set tes cukup besar untuk menunjukkan karakteristik yang sama dengan set pelatihan dan karenanya kesalahan yang diukur mungkin dapat diandalkan, tetapi ini (setidaknya sejauh yang saya mengerti) itu) tidak cukup untuk membuat pernyataan tentang varians (dari kesalahan!).

Ketika menambahkan lebih banyak contoh pelatihan (menjaga ukuran set tes tetap), saya akan berharap bahwa varians kedua pendekatan (jumlah fitur kecil dan tinggi) berkurang.

Oh, dan jangan lupa menghitung infogain untuk pemilihan fitur hanya menggunakan data dalam sampel pelatihan! Seseorang tergoda untuk menggunakan data lengkap untuk pemilihan fitur dan kemudian melakukan partisi data dan menerapkan crossvalidation, tetapi ini akan menyebabkan overfitting. Saya tidak tahu apa yang Anda lakukan, ini hanya peringatan yang tidak boleh dilupakan orang.

steffen
sumber
1
Terima kasih banyak atas balasan Anda, penjelasan yang sangat jelas. Saya menggunakan perolehan informasi maksimum sebagai strategi pemilihan fitur saya, dan pengujian menggunakan validasi silang 5 kali lipat. Saya kira itu untuk mengetahui fitur top k mana yang harus saya ambil, saya perlu untuk menguji algoritma secara berulang meningkatkan jumlah fitur setiap kali, dan mengambil k yang memberikan f_score tertinggi. Namun, saya kira "top k" kemungkinan akan berubah tergantung pada kumpulan data ... kan?
kanzen_master
1
Benar. Tetapi jika dataset baru mirip dengan yang lama (fitur yang sama dengan distribusi yang sama) k tetap sama. Anda dapat menambahkan algoritma genetika untuk mencari ruang solusi yang mungkin lebih cepat atau (bahkan lebih baik) menggunakan algoritma genetika untuk menemukan subset fitur yang optimal terlepas dari InformationGain ... begitu banyak cara untuk dilakukan.
steffen
1
Menurut kuliah Stanford, jika Anda melihat pelatihan yang dipisahkan dengan baik dan kurva uji memvariasikan jumlah contoh pelatihan itu sebenarnya berarti ada perbedaan. Tentu saja pendekatan yang lebih baik adalah memperkirakan interval kepercayaan.
Simone
1
@DT 1. Saya tidak tahu kuliahnya, maka saya tidak bisa menghubungkan penjelasan Andrewg dengan saya, maaf. 2. Tidak. Sejumlah kecil fitur => overfitting => bias rendah, varian tinggi. Banyaknya fitur => underfitting => bias tinggi, varian rendah. Saya benar-benar menyarankan untuk memplot varian dari kesalahan cv-fold untuk berbagai fitur dan contoh pelatihan.
steffen
2
1. steffen, kuliahnya tersedia di sini: ml-class.org/course/video/preview_list (Bagian X, Bagian "Kurva Belajar") 2. Begitu . Saya berpikir bahwa ketika banyak fitur yang dipelajari selama pelatihan => model menjadi kompleks, dan overfits set pelatihan => Varians ...
kanzen_master
5

Untuk mengetahui apakah berguna untuk menggunakan lebih banyak fitur, saya akan memplot kurva belajar. Saya pikir ini dijelaskan dengan jelas di Unit ke-10 kelas Pembelajaran Mesin Stanford, bernama "Nasihat untuk menerapkan pembelajaran mesin", yang dapat Anda temukan di sini: http://www.ml-class.org/course/video/preview_list .

Merencanakan kurva belajar Anda bisa mengerti jika masalah Anda adalah bias tinggi atau varians tinggi. Selama Anda menambah jumlah contoh pelatihan, Anda harus merencanakan kesalahan pelatihan dan kesalahan tes (yaitu 1-akurasi), yang terakhir adalah kesalahan pengelompokan Anda yang diperkirakan pada kumpulan data yang berbeda. Jika kurva ini dekat satu sama lain, Anda memiliki masalah bias tinggi dan mungkin akan bermanfaat untuk memasukkan lebih banyak fitur. Di sisi lain, jika kurva Anda cukup terpisah selama Anda menambah jumlah contoh pelatihan, Anda memiliki masalah varians yang tinggi. Dalam hal ini Anda harus mengurangi jumlah fitur yang Anda gunakan.

Edit

Saya akan menambahkan beberapa contoh kurva belajar. Ini adalah kurva belajar yang diperoleh dengan regresi logistik yang teratur. Petak berbeda terkait dengan berbedaλ untuk menyesuaikan kekuatan regularisasi.

λ

Varians tinggi

λ

Bias tinggi

λ=1

Hasil yang bagus

Simone
sumber
Bagus! Terima kasih banyak! Karena kedua jawaban itu sangat membantu tetapi saya tidak dapat menandai keduanya sebagai balasan, saya akan menandai yang pertama sebagai jawabannya. Tapi ini jelas cara terbaik untuk memeriksa, saya pikir.
kanzen_master
Ngomong-ngomong, saya mencoba memplot kurva pembelajaran dari classifier yang menggunakan 100 fitur teratas dengan skor Gain Information Maksimal. Sambil meningkatkan ukuran data pelatihan, saya ingin merencanakan kesalahan pelatihan dan menguji kesalahan. Yang harus menjadi ukuran untuk set data kereta awal (yang akan ditingkatkan secara bertahap) dan untuk set data uji (statis untuk semua tes)? Terima kasih lagi ...
kanzen_master
2
Pisahkan kumpulan data Anda dalam satu set pelatihan dan satu set tes. Mulai dari catatan pelatihan yang sangat sedikit dan kemudian terus menambahkan catatan. Untuk setiap iterasi hitung kesalahan set pelatihan dengan catatan yang telah Anda gunakan untuk melatih classifier Anda dan kemudian hitung kesalahan set tes selalu dengan semua catatan uji. Saya tahu ini adalah metode standar yang digunakan dalam praktik umum. Akan menarik melihat hasil Anda! Ceria, Simone.
Simone
1
Simone, saya telah memperbarui posting pertama dengan beberapa hasil keakuratan, ukuran f1, dan kurva belajar, dan interpretasi saya di bagian bawah, dapatkah Anda memeriksanya? Terima kasih ...
kanzen_master