Bagaimana cara membandingkan dua algoritma secara statistik pada tiga dataset dalam pemilihan dan klasifikasi fitur?


8

Latar belakang masalah: Sebagai bagian dari penelitian saya, saya telah menulis dua algoritma yang dapat memilih satu set fitur dari set data (data ekspresi gen dari pasien kanker). Fitur-fitur ini kemudian diuji untuk melihat seberapa baik mereka dapat mengklasifikasikan sampel yang tidak terlihat sebagai kanker atau non-kanker. Untuk setiap rangkaian algoritma, solusi (serangkaian fitur) dihasilkan dan diuji pada sampel Z yang tidak terlihat. Akurasi persentase dari solusi dihitung seperti ini: (correct classifications / Z) * 100.

Saya memiliki dua algoritma: algoritma X & algoritma Y

Saya memiliki tiga set data yang berbeda (kanker berbeda): set data A, set data B & set data C. Set data ini sangat berbeda satu sama lain. Mereka tidak memiliki jumlah sampel yang sama atau jumlah pengukuran (fitur) yang sama per sampel.

Saya telah menjalankan setiap algoritma 10 kali pada setiap set data. Jadi, algoritma X memiliki 10 hasil dari kumpulan data A, 10 dari kumpulan data B dan 10 dari kumpulan data C. Secara keseluruhan, algoritma X memiliki 30 hasil.

Masalah saya: Saya ingin melihat apakah kinerja gabungan algoritma X di ketiga set data berbeda secara statistik dari kinerja gabungan algoritma Y.

Apakah mungkin bagi saya untuk menggabungkan hasil untuk algoritma X dari setiap set data menjadi satu set hasil tunggal? Dengan cara ini, saya akan memiliki 30 hasil standar untuk algoritma X dan 30 hasil standar untuk algoritma Y. Saya kemudian dapat menggunakan uji-t untuk melihat apakah ada perbedaan yang signifikan antara kedua metode.

Sunting - Ini adalah Algoritma Evolusi, sehingga mereka mengembalikan solusi yang sedikit berbeda setiap kali dijalankan. Namun, jika ada fitur dalam sampel yang ketika ada dapat dengan kuat mengklasifikasikan sampel sebagai kanker atau non-kanker, maka fitur tersebut akan dipilih hampir setiap kali algoritma dijalankan.

Saya mendapatkan hasil yang sedikit berbeda untuk masing-masing 10 run karena alasan berikut:

  • Algoritma ini diunggulkan secara acak.
  • Saya menggunakan validasi sub-sampling acak berulang (10 repeats).
  • Kumpulan data yang saya gunakan (DNA microarray dan Proteomics) sangat sulit untuk dikerjakan dalam arti bahwa ada banyak optima lokal yang bisa terjebak oleh algoritma.
  • Ada banyak interaksi antar fitur dan antar subset yang ingin saya deteksi.
  • Saya melatih 50 kromosom dan tidak terbatas pada panjang tertentu. Mereka bebas untuk tumbuh dan menyusut (meskipun tekanan seleksi memandu mereka menuju panjang yang lebih pendek). Ini juga memperkenalkan beberapa variasi pada hasil akhir.

Karena itu, algoritma hampir selalu memilih subset fitur tertentu!

Berikut adalah contoh hasil saya (hanya 4 yang kehabisan 10 untuk setiap algoritma ditunjukkan di sini):

Set data / jalankan Algoritma X Algoritma Y
A 1 90,91 90,91
A 2 90,91 95,45
A 3 90,91 90,91
A 4 90,91 90,91

B 1 100 100
B 2 100 100
B 3 95.65 100
B 4 95.65 86.96

C 1 90.32 87.10
C 2 70.97 80.65
C 3 96.77 83.87
C 4 80.65 83.87

Seperti yang Anda lihat, saya telah mengumpulkan hasil untuk dua algoritma dari tiga dataset. Saya bisa melakukan tes Kruskal-Wallis pada data ini tetapi apakah itu valid? Saya menanyakan ini karena:

  • Saya tidak yakin akurasi dalam set data yang berbeda sepadan. Jika tidak, maka menggabungkannya seperti yang telah saya lakukan akan menjadi tidak berarti dan setiap uji statistik yang dilakukan pada mereka juga tidak akan berarti.
  • Ketika Anda menempatkan akurasi bersama-sama seperti ini, hasil keseluruhan rentan terhadap pencilan. Kinerja satu algoritma yang sangat baik pada satu dataset dapat menutupi kinerja rata-rata pada dataset lain.

Saya juga tidak bisa menggunakan uji-t, karena:

  • Keterbandingan - uji-t hanya masuk akal ketika perbedaan atas set data sepadan.
  • t-test mensyaratkan bahwa perbedaan antara kedua algoritma yang dibandingkan didistribusikan secara normal, tidak ada cara (setidaknya yang saya ketahui) untuk menjamin kondisi ini dalam kasus saya.
  • uji-t dipengaruhi oleh pencilan yang memiringkan statistik uji dan mengurangi daya uji dengan meningkatkan perkiraan kesalahan standar.

Bagaimana menurut anda? Bagaimana saya bisa melakukan perbandingan antara algoritma X & Y dalam hal ini?


Apakah algoritma Anda melibatkan beberapa jenis keacakan, atau mengapa Anda menjalankannya 10 kali masing-masing pada setiap dataset?
Stephan Kolassa

Iya! Mereka adalah Algoritma Evolusi (algoritma stokastik). Jadi, setiap kali mereka menghasilkan hasil yang berbeda. Namun, jika ada fitur kuat (gen / nilai tunggal dari sampel), maka mereka dipilih lebih sering daripada tidak. Tujuan dari algoritma ini adalah untuk memilih gen-gen yang sangat berkorelasi dengan kelas tertentu (misalnya kanker ovarium) sehingga mereka dapat digunakan dalam diagnosis / prediksi dini kanker di masa depan.
Revolusi

Jawaban:


8

Kecuali jika algoritme Anda memiliki perbedaan besar dalam kinerja dan Anda memiliki banyak kasus uji, Anda tidak akan dapat mendeteksi perbedaan hanya dengan melihat kinerjanya.

Namun, Anda dapat menggunakan desain apaired:

  • jalankan ketiga algoritme tersebut pada train / test split yang sama dari kumpulan data, dan
  • jangan menjumlahkan hasil tes menjadi% benar, tetapi pertahankan hasilnya pada tingkat kasus uji tunggal sebagai benar atau salah.

Untuk perbandingan, lihat tes McNemar . Gagasan di balik mengeksploitasi desain berpasangan di sini adalah bahwa semua kasus yang kedua algoritma benar dan yang keduanya salah tidak membantu Anda membedakan algoritma. Tetapi jika satu algoritma lebih baik dari yang lain, harus ada banyak kasus algoritma yang lebih baik benar tetapi tidak lebih buruk, dan beberapa yang diprediksi dengan benar oleh metode yang lebih buruk tetapi salah dengan yang lebih baik.

Juga, Cawley dan Talbot: On Over-fitting dalam Pemilihan Model dan Bias Seleksi Selanjutnya dalam Evaluasi Kinerja, JMLR, 2010, 1, 2079-2107. sangat relevan.

Karena aspek acak dari algoritma Anda, Anda juga ingin memeriksa pemisahan yang sama dari kumpulan data yang sama beberapa kali. Dari sana Anda dapat memperkirakan variasi antara berbagai proses yang berbeda. Mungkin sulit untuk menilai seberapa berbeda set variabel yang dipilih. Tetapi jika tujuan akhir Anda adalah kinerja prediktif, maka Anda juga dapat menggunakan variasi antara prediksi kasus uji yang sama selama proses berbeda untuk mengukur stabilitas model yang dihasilkan.

Anda juga akan ingin memeriksa variasi (seperti yang ditunjukkan di atas) karena perbedaan dari kumpulan data dan menghubungkannya dengan varian pertama.

Pecahan (seperti% sampel yang dikenali dengan benar) biasanya diasumsikan didistribusikan secara biner , dalam kasus-kasus tertentu perkiraan normal dimungkinkan, tetapi cetakan kecil untuk ini hampir tidak pernah bertemu di bidang dengan matriks data yang lebar. Ini memiliki konsekuensi bahwa interval kepercayaan sangat besar untuk sejumlah kecil kasus uji. Dalam R, binom::binom.confinthitung interval kepercayaan untuk proporsi sebenarnya yang diberikan no. tes dan tidak. kesuksesan.

Akhirnya, pengalaman saya dengan optimasi genetika untuk data spektroskopi (tesis Diplom saya dalam bahasa Jerman) menunjukkan bahwa Anda harus memeriksa juga kesalahan pelatihan. GAS cenderung untuk berpakaian sangat cepat, sampai pada kesalahan pelatihan yang sangat rendah. Kesalahan pelatihan yang rendah tidak hanya terlalu optimistis, tetapi mereka juga memiliki konsekuensi bahwa GA tidak dapat membedakan antara banyak model yang tampaknya sama-sama sempurna. (Anda mungkin memiliki sedikit masalah dengan itu jika GA secara internal juga secara acak berlangganan kereta dan set tes internal).

Makalah dalam bahasa Inggris:


Terima kasih atas analisisnya! Saya akan mencoba desain berpasangan. Anda tepat tentang terlalu pas. Tahap selanjutnya dari penelitian saya akan berkonsentrasi pada menghindari pas saat pelatihan. Ini sangat penting karena tujuan akhir saya adalah menghasilkan algoritma yang sepenuhnya otomatis sehingga ahli onkologi dapat digunakan untuk diagnosis dini kanker. Saya benar-benar tertarik membaca makalah Anda tetapi saya khawatir saya tidak bisa membaca bahasa Jerman. Tolong beri tahu saya jika ada versi bahasa Inggris. Sekali lagi terima kasih atas masukan terperinci Anda.
Revolusi

@revolusions: Informasi sedikit tersebar di beberapa kertas. Tapi saya menambahkan daftar dengan 2 tentang pemilihan variabel GA, dan satu tentang ketidakpastian dalam mengukur tingkat kesalahan klasifikasi. Jika Anda memiliki pertanyaan (atau tidak memiliki akses ke surat kabar), kirimkan saya email.
cbeleites tidak senang dengan SX

Terima kasih! Saya berhasil mengunduh makalah terakhir tetapi sepertinya tidak bisa mendapatkan dua yang pertama. Saya akan mencoba dari komputer universitas saya besok dan akan memberi tahu Anda jika saya berhasil mengunduhnya.
Revolusi

1

Anda menjalankan seleksi yang lebih sederhana dengan GA 10 kali dan setiap kali Anda mendapatkan output yang berbeda !!

Pertama, Jika Anda memulai dengan seed yang sama, Anda harus selalu mendapatkan subset featuer yang sama. Namun, Jika Anda menggunakan seed acak, juga, kemungkinan besar, Anda harus mendapatkan fitur yang dipilih hampir sama. Salah satu alasan untuk mendapatkan fitur yang sama terpilih dinyatakan dalam posting Anda. Selain itu, untuk perbandingan yang adil, Anda dapat menggunakan benih yang sama dalam rangkaian A untuk percobaan B.

Kedua, Anda dapat menggunakan validasi silang atau bootstraping untuk perbandingan. Dengan cara ini Anda mendapatkan perbandingan yang lebih representatif. Dalam hal ini, ada sumber variasi yaitu sampel pelatihan acak yang tampaknya lebih kuat daripada benih acak. Dengan demikian, perbandingan dapat mengungkapkan algorthim yang benar-benar lebih baik.

Akhirnya, Anda dapat menggunakan uji-t seperti yang Anda usulkan atau langsung menggunakan beberapa tes non-parametrik seperti tes Kruskal-Wallis.


Terima kasih banyak atas jawaban Anda! Saya ingin mengklarifikasi beberapa hal dan mungkin mendapatkan pendapat Anda setelah itu lagi karena saya masih bingung tentang perbandingan, harap Anda dapat membantu! Anda berkata: <blockquote> Juga, untuk perbandingan yang adil, Anda dapat menggunakan benih yang sama dalam rangkaian A untuk percobaan B </blockquote> Ini adalah poin yang sangat bagus, terima kasih. Saya telah mengedit pertanyaan saya untuk membahas poin-poin yang Anda angkat. Ini akan sangat bagus jika Anda dapat melihat dan biarkan saya tahu apa yang Anda pikirkan.
Revolusi

Anda dapat melakukan perbandingan terpisah antara pengklasifikasi untuk setiap dataset. Awalnya, periksa mean dan standar deviasi. Jika untuk semua dataset, satu classifier mengalahkan yang lainnya. Kemudian, kita selesai. Jika tidak, Anda dapat menggunakan ide "ensemble". Periksa sampel baru, jika itu milik dataset A, gunakan pengklasifikasi yang lebih baik dan seterusnya. Namun, mungkin ada beberapa uji statistik berdasarkan tampilan berpasangan yang saya tidak tahu tentang kasus ini.
soufanom

Sekali lagi terima kasih atas masukan Anda. Saya telah melakukan apa yang Anda sarankan dan tidak ada pemenang yang jelas. Inilah sebabnya saya memutuskan untuk menyatukan semuanya dan melihat apakah akan ada pemenang. Gagasan "ansambel" ini terdengar menarik. Apakah ada tempat di mana saya dapat membaca lebih lanjut tentang ini? Terima kasih atas bantuan Anda.
Revolusi

Satu hal lagi, pertimbangkan untuk membandingkan sensitivitas dan spesifisitas. Untuk sumber ansambel, periksa buku yang terlampir di postingan saya stats.stackexchange.com/questions/47075/…
soufanom
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.