Akurasi tes lebih tinggi dari pelatihan. Bagaimana cara mengartikannya?

23

Saya memiliki dataset yang berisi paling banyak 150 contoh (dibagi menjadi pelatihan & tes), dengan banyak fitur (lebih dari 1000). Saya perlu membandingkan pengklasifikasi dan metode pemilihan fitur yang berkinerja baik pada data. Jadi, saya menggunakan tiga metode klasifikasi (J48, NB, SVM) dan 2 metode pemilihan fitur (CFS, WrapperSubset) dengan metode pencarian yang berbeda (Serakah, BestFirst).

Saat membandingkan, saya melihat akurasi pelatihan (cross-fold 5 kali lipat) dan akurasi tes.

Ini adalah salah satu hasil dari J48 dan CFS-BestFirst:

{"precisionTraining": 95.83, "akurasiTest": 98.21}

Banyak hasil seperti ini, dan pada SVM ada banyak hasil yang menunjukkan bahwa akurasi tes jauh lebih tinggi daripada pelatihan (pelatihan: 60%, tes: 98%)

Bagaimana saya bisa mengartikan hasil seperti ini secara bermakna? Jika lebih rendah, saya akan mengatakan itu overfitting. Apakah ada yang bisa dikatakan tentang bias dan varians dalam hal ini dengan melihat semua hasilnya? Apa yang dapat saya lakukan untuk membuat klasifikasi ini bermakna, seperti memilih kembali pelatihan dan set tes atau hanya menggunakan validasi silang pada semua data?

Saya memiliki 73 pelatihan & 58 contoh tes. Beberapa jawaban tidak memiliki info ini ketika diposkan.

ercu
sumber

Jawaban:

20

Saya pikir langkah pertama adalah memeriksa apakah pelatihan dan kinerja tes yang dilaporkan sebenarnya benar.

  • Apakah pemisahan selama validasi silang 5 kali lipat dilakukan dengan cara yang menghasilkan perangkat cv train / test yang independen secara statistik? Misalnya jika ada pengukuran berulang dalam data, apakah selalu berakhir di set yang sama?
  • Akurasi 95,83% dalam cv 5 kali lipat dari 150 sampel sesuai dengan 5 salah dari 130 sampel pelatihan untuk 5 model pengganti, atau 25 kasus salah untuk 5 * 130 sampel pelatihan.
  • Keakuratan tes 98,21% lebih sulit untuk dijelaskan: selama satu putaran cv, setiap kasus harus diuji satu kali. Jadi angka yang mungkin dilaporkan harus dalam langkah 100% / 150. 98,21% sesuai dengan 2,68 kasus yang salah (2 dan 3 salah dari 150 kasus uji memberikan akurasi masing-masing 98,67 dan 98,00%).

  • Jika Anda dapat mengekstrak model Anda, hitung akurasi yang dilaporkan secara eksternal.

  • Apa akurasi yang dilaporkan untuk input acak?
  • Lakukan validasi lintas eksternal: pisahkan data Anda, dan serahkan hanya bagian pelatihan ke program. Prediksikan data uji "eksternal" dan hitung akurasi. Apakah ini sesuai dengan output program?
  • Pastikan "akurasi pengujian" yang dilaporkan berasal dari data independen (validasi silang ganda / bersarang): jika program Anda melakukan optimasi yang didorong data (misalnya memilih fitur "terbaik" dengan membandingkan banyak model), ini lebih seperti kesalahan pelatihan (kebaikan) of fit) daripada seperti kesalahan generalisasi.

Saya setuju dengan @mbq bahwa kesalahan pelatihan hampir tidak pernah berguna dalam pembelajaran mesin. Tetapi Anda mungkin berada dalam salah satu dari sedikit situasi di mana itu sebenarnya berguna: Jika program memilih model "terbaik" dengan membandingkan akurasi, tetapi hanya memiliki kesalahan pelatihan untuk dipilih, Anda perlu memeriksa apakah kesalahan pelatihan benar-benar memungkinkan masuk akal pilihan.
@mbq menguraikan skenario kasus terbaik untuk model yang tidak bisa dibedakan. Namun, skenario yang lebih buruk juga terjadi: seperti halnya akurasi tes, akurasi pelatihan juga bervariasi, tetapi memiliki bias optimis dibandingkan dengan akurasi generalisasi yang biasanya menarik. Ini dapat menyebabkan situasi di mana model tidak dapat dibedakan walaupun mereka benar-benar memiliki kinerja yang berbeda. Tetapi akurasi pelatihan (atau internal cv) mereka terlalu dekat untuk membedakan mereka karena bias optimis mereka. Misalnya metode pemilihan fitur berulang dapat mengalami masalah seperti itu yang bahkan dapat bertahan untuk akurasi validasi silang internal (tergantung pada bagaimana validasi silang diimplementasikan).

Jadi jika masalah seperti itu bisa muncul, saya pikir itu ide yang baik untuk memeriksa apakah pilihan yang masuk akal dapat dihasilkan dari akurasi yang digunakan program untuk keputusan tersebut. Ini berarti memeriksa bahwa akurasi cv internal (yang seharusnya digunakan untuk pemilihan model terbaik) tidak atau tidak terlalu bias secara optimis terhadap cv yang dilakukan secara eksternal dengan pemisahan independen secara statistik. Sekali lagi, data sintetis dan / atau acak dapat membantu menemukan apa yang sebenarnya dilakukan oleh program.

Langkah kedua adalah untuk melihat apakah perbedaan yang diamati untuk pemisahan independen statistik bermakna, seperti yang ditunjukkan @mbq.

Saya sarankan Anda menghitung perbedaan dalam akurasi yang perlu Anda amati dengan ukuran sampel yang diberikan untuk memiliki perbedaan yang bermakna secara statistik. Jika variasi yang diamati kurang, Anda tidak dapat memutuskan algoritma mana yang lebih baik dengan kumpulan data yang diberikan: pengoptimalan lebih lanjut tidak masuk akal.

Cbeleites mendukung Monica
sumber
ada info hebat untuk dicerna di sini. pertama, saya sangat menyesal bahwa saya tidak memberikan angka yang tepat karena saya tidak berharap bahwa Anda akan masuk ke angka yang begitu rinci dan saya juga ingin fokus hanya pada satu topik. Lagi pula, saya punya 73 data pelatihan & 58 tes. ini tidak dipisahkan secara statistik, mereka hanya diambil oleh saya di waktu yang berbeda. Sampel pelatihan pertama-tama dimasukkan ke dalam algoritma pemilihan fitur (metode wrapper fs juga memiliki internal 5-lipat cv) dan kemudian 5 kali lipat dan akurasi terbaik diambil dan model disimpan. dan kemudian model itu digunakan untuk menghitung akurasi tes.
ercu
16

Akurasi pada set pelatihan tidak masuk akal dalam pembelajaran mesin. Abaikan itu.


sumber
Terima kasih! saya memiliki banyak hasil dengan akurasi tes terbaik yang sama, jadi saya tidak dapat membandingkan hasil sekarang (saya juga akan melihat akurasi pelatihan untuk membandingkan jika Anda belum mengatakan itu :). Jadi, alih-alih membelah untuk menguji dan pelatihan, apakah menjalankan beberapa validasi silang pada semua dataset lebih tepat untuk kasus saya untuk membandingkan hasilnya? atau apakah saya memerlukan metrik lainnya?
ercu
1
CV tentu saja merupakan ide yang bagus; bagaimanapun, perhatikan bahwa mungkin ada beberapa algoritme atau set parameter "terbaik" (dalam arti bahwa mereka memberikan akurasi yang sama, atau secara statistik tidak dapat dibedakan dari kasus terbaik) - itu juga bukan masalah. Bahkan lebih baik, itu berarti bahwa Anda mendapatkan hasil yang stabil - optimal yang tajam mungkin menyarankan Anda telah melengkapi model dengan parameter memetik ceri.
8
Sangat berguna untuk mengetahui keakuratan pada set pelatihan untuk memperkirakan jumlah overfitting yang telah dilakukan algoritma prediksi Anda (dengan menghitung perbedaan akurasi antara set pelatihan & tes).
Frank Harrell
Bisakah Anda menjelaskan mengapa?
inf
1
Dari definisi, metode ML adalah tentang kinerja pada data yang tidak terlihat, sehingga mereka tidak memberikan jaminan tentang hasil ini (model tidak diharapkan untuk mengimplementasikan kembali mekanisme yang mendasari data seperti dalam pemodelan statistik). Dalam prakteknya banyak metode memberikan prediksi yang terlalu akurat, sehingga hanya menipu.
6

Ada beberapa masalah serius dengan cara Anda melakukan ini. Pertama-tama, pemisahan data tidak dapat diandalkan kecuali ukuran total sampel sangat besar. Anda akan mendapatkan hasil yang berbeda jika Anda membagi lagi. Antara lain, Anda tidak mempertimbangkan interval kepercayaan pada perkiraan akurasi. Kedua, validasi silang 5 kali lipat tidak cukup tepat. Mungkin perlu untuk mengulanginya 100 kali untuk mencapai presisi yang memadai. Ketiga, Anda telah memilih sebagai skor akurasi aturan pemberian skor tidak terputus yang tidak terputus (proporsi diklasifikasikan dengan benar). Aturan penilaian yang tidak tepat seperti itu akan mengarah pada pemilihan model yang salah.

Frank Harrell
sumber
3

Dengan asumsi bahwa tidak ada kesalahan dalam implementasi algoritma, mari kita lihat masalahnya.

Bayangkan mengambil sebagian kecil dari data pelatihan Anda dan menjalankan algoritma pembelajaran Anda di atasnya. Jelas akan melakukannya dengan sangat baik. Itu selalu mungkin untuk mengekstrak subset yang mencapai akurasi hampir 98%.

Sekarang apakah data pengujian Anda sangat mirip dengan subset ini? Jika ya, maka Anda perlu pergi dan mengumpulkan lebih banyak data, semoga sedikit lebih bervariasi. Dari sudut pandang Bias-Variance, saya akan mengatakan bahwa varians Anda tinggi.

shashydhar
sumber
1

Anda memiliki terlalu banyak fitur (1000) untuk jumlah sampel yang Anda miliki (150). Anda perlu menambah sampel Anda atau mengurangi jumlah fitur Anda.

Mereka mengatakan biasanya jumlah fitur ^ 2 = jumlah sampel yang dibutuhkan. Jadi, Anda memerlukan setidaknya juta sampel.

pengguna798719
sumber
0

Itu bisa terjadi menggunakan algoritma ML dan bahkan pengklasifikasi khusus. Coba berbagai skema validasi k-fold lintas yaitu 2 atau 10 kali lipat juga. Dengan k yang lebih tinggi, diharapkan kesalahan pengujian berkurang.

mehrdadorm
sumber