Haruskah kita selalu melakukan CV?

9

Pertanyaan saya: apakah saya harus melakukan CV bahkan untuk kumpulan data yang relatif besar?

Saya memiliki satu set data yang relatif besar dan saya akan menerapkan algoritma pembelajaran mesin pada set data.

Karena PC saya tidak cepat, CV (dan pencarian grid) terkadang memakan waktu terlalu lama. Secara khusus SVM tidak pernah berakhir karena banyak parameter penyetelan. Jadi jika saya melakukan CV, maka saya perlu memilih data yang relatif kecil.

Di sisi lain set validasi juga harus besar, jadi saya pikir itu adalah ide yang baik untuk menggunakan set validasi yang memiliki ukuran yang sama (atau lebih besar) dengan set pelatihan. (Yaitu alih-alih CV, saya menggunakan set validasi besar untuk penyetelan parameter.)

Jadi saya sekarang memiliki setidaknya dua opsi.

  1. lakukan CV pada set data kecil.
  2. menggunakan set pelatihan yang relatif besar dan set validasi tanpa CV.
  3. ide lain.

Apa ide terbaik? Pendapat teoritis atau praktis keduanya diterima.

H. Shindoh
sumber
1
Pertanyaan ini jelas merupakan CW.
H. Shindoh
1
Apa yang besar Berapa pengamatan? Berapa banyak fitur / variabel / regresi?
Jim
1
Itu tergantung pada PC. Yaitu saya tidak memikirkan "big data", yang membutuhkan beberapa komputer.
H. Shindoh

Jawaban:

3

Secara umum, Anda tidak harus menggunakan validasi silang setiap saat. Poin dari CV adalah untuk mendapatkan estimasi yang lebih stabil dari generalisasi classifier Anda bahwa Anda hanya akan menggunakan satu set tes. Anda tidak harus menggunakan CV jika kumpulan data Anda sangat besar, jadi menambahkan data ke rangkaian pelatihan Anda tidak akan banyak meningkatkan model Anda, dan beberapa klasifikasi kesalahan dalam set pengujian Anda hanya secara kebetulan, tidak akan benar-benar mengubah metrik kinerja Anda .

Dengan memiliki satu set pelatihan kecil dan satu set tes besar, estimasi Anda akan menjadi bias. Jadi mungkin akan lebih buruk daripada apa yang akan Anda dapatkan dengan menggunakan lebih banyak data pelatihan dan hiperparameter optimal yang Anda temukan mungkin berbeda untuk dataset yang lebih besar, hanya karena lebih banyak data akan membutuhkan lebih sedikit regularisasi.

Namun, mendapatkan hyperparamters yang optimal bukanlah bagian yang penting dan itu tidak akan meningkatkan kinerja secara dramatis. Anda harus memfokuskan energi Anda untuk memahami masalah, menciptakan fitur yang baik, dan mendapatkan data ke bentuk yang baik.

Berikut adalah beberapa hal yang dapat Anda pertimbangkan untuk mempercepat:

  1. Latih dengan lebih sedikit fitur. Gunakan pemilihan fitur dan / atau pengurangan dimensi untuk mengurangi ukuran masalah Anda
  2. Gunakan kernel precached untuk SVM
  3. Gunakan algoritma yang tidak perlu memilih parameter hiper dalam kisi. Terutama yang linier seperti regresi logistik dengan pinalti bersih ridge / laso / elastis atau bahkan SVM linier. Bergantung pada implementasinya, pengklasifikasi tersebut dapat memenuhi model untuk semua hiperparameter di jalur yang dipilih dengan biaya pemasangan hanya satu
  4. gunakan implementasi yang lebih cepat untuk jenis masalah Anda (Anda harus mencarinya di Google)

dan bahkan dengan komputer yang lebih lambat, Anda dapat:

  1. Gunakan lebih banyak core
  2. Gunakan GPU
rep_ho
sumber
2

Validasi silang adalah alat untuk memperkirakan varians metrik kinerja Anda karena keacakan dalam data (dan mungkin dalam algoritma pembelajaran jika tidak deterministik).

Jadi, jika Anda hanya menggunakan satu split, mis. 80% kereta + 20% tes dan laporkan metrik kinerja Anda dari percobaan tunggal ini, ada peluang bagus bahwa siapa pun yang mencoba mereproduksi eksperimen Anda menggunakan parameter yang persis sama akan menemukan angka kinerja yang berbeda (kadang-kadang sangat berbeda). Kecuali tentu saja Anda memberikan pemisahan yang sama persis yang tidak berarti.

Untuk kembali ke pertanyaan Anda, saya pikir Anda harus menggunakan CV untuk melaporkan kinerja Anda (mis. Lakukan CV 10 kali lipat dan melaporkan rata-rata dan standar deviasi dari metrik kinerja). Sekarang untuk menyetel algoritma Anda, Anda dapat menggunakan set validasi yang jauh lebih kecil yang diambil dari set pelatihan (pastikan itu tidak termasuk dalam set tes).

Jika Anda takut bahwa Anda tidak akan menemukan hyperparameters terbaik menggunakan set kecil maka Anda mungkin overfitting algoritma Anda ke spesifikasi dataset. Jika Anda tidak dapat menemukan konfigurasi menggunakan sampel kecil yang memberikan kinerja yang wajar di antara semua lipatan maka algoritme mungkin tidak terlalu berguna dalam praktiknya.

Juga perlu diingat bahwa beberapa algoritma terlalu lambat / tidak skala dengan baik dalam beberapa konfigurasi. Ini juga merupakan bagian dari pemilihan model praktis.

Karena Anda menyebutkan SVM, tentu saja sebagian besar implementasi akan lambat ketika mencoba menemukan parameter untuk kernel non-linear dengan pencarian kisi. Pencarian grid memiliki kompleksitas eksponensial, jadi gunakan dengan parameter yang sangat sedikit. Juga perlu diingat bahwa sebagian besar pustaka menyediakan parameter default yang masuk akal (atau setidaknya Anda menetapkan satu parameter dan ada heuristik untuk mengatur yang lain).

oDDsKooL
sumber