Apakah selalu lebih baik menggunakan seluruh dataset untuk melatih model akhir?

24

Teknik umum setelah pelatihan, memvalidasi dan menguji model Machine Learning preferensi adalah dengan menggunakan dataset lengkap, termasuk subset pengujian, untuk melatih model akhir untuk menyebarkannya , misalnya produk.

Pertanyaan saya adalah: Apakah selalu yang terbaik untuk dilakukan? Bagaimana jika kinerja benar-benar memburuk?

Sebagai contoh, mari kita asumsikan suatu kasus di mana model skor sekitar 65% dalam mengklasifikasikan subset pengujian. Ini bisa berarti bahwa salah satu model dilatih kurang atau ATAU bahwa subset pengujian terdiri dari outlier. Dalam kasus terakhir, melatih model akhir dengan mereka akan menurunkan kinerjanya dan Anda baru tahu setelah menggunakannya.

Mengucapkan ulang pertanyaan awal saya:

Jika Anda memiliki demonstrasi satu kali model , seperti menempatkannya pada elektronik tertanam di atas kapal percobaan roket mahal, akankah Anda mempercayai model yang telah dilatih ulang dengan subset tes pada langkah terakhir tanpa harus mengulangi diuji pada kinerja barunya?

pcko1
sumber

Jawaban:

14

Setelah Anda mendapatkan hyperparamters optimal untuk model Anda, setelah pelatihan dan memvalidasi silang dll., Secara teori tidak masalah untuk melatih model pada seluruh dataset untuk digunakan untuk produksi. Secara teori, ini akan menggeneralisasi dengan lebih baik.

NAMUN, Anda tidak dapat lagi membuat klaim statistik / kinerja pada data uji karena Anda tidak lagi memiliki set data uji.

Jika Anda menggunakan model untuk produksi menggunakan seluruh dataset pelatihan, dan Anda tahu nilai sebenarnya dari variabel target dari data yang masuk baru (yaitu data yang diprediksi oleh model produksi), maka Anda dapat menghitung metrik kinerja waktu nyata sebagai data baru ini seperti data uji (tidak terlihat oleh model selama pelatihan). Dari proses ini Anda dapat memperbarui model hyperparameters untuk mencapai kinerja yang lebih baik.

Tetapi jika Anda tahu nilai target dari data baru, mengapa Anda melatih model di tempat pertama?

Secara umum, saya akan mengatakan jika Anda memiliki data yang cukup dengan variasi yang cukup, kemudian mengocok dan membagi data 80:20 pelatihan: tes harus cukup untuk melatih model yang kuat dan tidak perlu khawatir tentang masalah generalisasi (dengan asumsi tentu saja Anda mengatur model).

PyRsquared
sumber
+1, terima kasih atas jawabannya! Sepertinya pengacakan acak kumpulan data sebelum dipecah menjadi 80/20 mungkin membuat kita merasa "secara statistik" percaya diri (:
pcko1
2
Performa pada set tes yang Anda tahan seharusnya menyamaratakan seluruh populasi, selama Anda melakukannya dengan benar. Meskipun Anda tidak memiliki set tes setelah menerapkan metode Anda ke seluruh dataset, kinerja pada set kereta / tes yang divalidasi silang asli Anda merupakan penaksir yang tidak bias dari kinerja algoritma pelatihan Anda. Itulah inti dari CV - bukan untuk melatih atau parameter suatu model, tetapi untuk memperkirakan kinerja proses pembuatan model. Kinerja Anda pada set tes apa pun sebelum pemodelan data lengkap adalah perkiraan kinerja Anda pada data lengkap.
Nuklir Wang
13

Pertanyaan menarik. Saya pribadi belum melihat bahwa untuk produk masuk ke produksi, tetapi memahami logika.

Secara teoritis, semakin banyak data model yang Anda gunakan, semakin baik generalisasi. Jadi jika Anda melatih model pada set lengkap data yang Anda miliki, itu harus menggeneralisasi lebih baik daripada model yang hanya melihat misalnya set kereta / val (misalnya ~ 90%) dari set data lengkap.

Masalah dengan ini (dan alasan kami membagi data menjadi set kereta / val / tes di tempat pertama!) Adalah bahwa kami ingin dapat membuat klaim statistik tentang keakuratan data yang tidak terlihat. Segera setelah kami melatih kembali model pada semua data, tidak mungkin lagi membuat klaim seperti itu.

[Sunting]

Berikut adalah pertanyaan terkait tentang Cross-Validated , di mana jawaban yang diterima membuat poin yang sama dengan saya dan menyebutkan cara lain dalam melakukan sesuatu.


Kami mengulangi:

  1. melatih seorang model
  2. nilai kinerja pada set validasi jika memuaskan, lanjutkan ke langkah 5
  3. mengubah model
  4. lanjut ke langkah 1
  5. menilai kinerja pada set tes
  6. Model sekarang dengan akurasi tes yang ditemukan di langkah 5

Akhirnya, jika Anda berhasil mendapatkan skor yang bagus pada set tes, Anda dapat mengklaimnya secara umum. Jadi pertanyaan, apakah pelatihan ulang pada dataset lengkap akan meningkatkan kinerja data yang tidak terlihat di masa mendatang bukanlah sesuatu yang dapat Anda uji. Bukti empiris tentang kinerja yang lebih baik di set masalah terkait lainnya akan menjadi satu-satunya sumber atau panduan pada saat Anda harus membuat keputusan.

Pemeriksaan kewarasan akan menguji kembali model yang dilatih ulang akhir pada set tes asli; berharap bahwa skornya lebih tinggi daripada yang pernah terjadi ketika model hanya melihat set kereta / val, karena sebenarnya telah melihat set tes selama pelatihan. Ini tidak akan membuat saya merasa 100% yakin bahwa model akhir ini lebih unggul dalam semua kasus di masa depan, tetapi setidaknya itu sama baiknya dengan data yang diberikan.

Mungkin ada argumen yang lebih keras untuk tidak melakukan apa yang Anda katakan (mungkin secara motovated secara akademis), namun hal itu tampaknya menarik untuk aplikasi praktis!

n1k31t4
sumber
+1, terima kasih atas usaha Anda dan untuk menunjukkan pos itu, saya melewatkannya! Adapun saran Anda untuk menguji model pada seluruh dataset pelatihan pada akhirnya, saya pikir Anda tidak mendapatkan wawasan yang berharga dari hasilnya. Hanya karena pelatihan algoritma biasanya didasarkan pada optimalisasi fungsi biaya, oleh karena itu model yang dilatih optimal diberikan data pelatihan. Akurasi yang rendah pada data kereta tidak berarti itu tidak optimal, itu hanya berarti tidak bisa melakukan lebih baik mengingat dataset itu dan arsitektur algoritma yang dipilih. Anda tidak dapat menyimpulkan apa pun karena validitas eksternalnya.
pcko1
1
Sama-sama! Saya sepenuhnya setuju dengan pernyataan Anda (meskipun saya mengatakan untuk menguji model akhir yang terlatih pada data tes asal , bukan melatih). Bagaimanapun, saya masih ingin melihat bahwa model terakhir tidak melakukan sesuatu yang sama sekali tidak terduga. Teori dan praktik tidak selalu selaras :)
n1k31t4
6

Poin yang perlu ditekankan tentang pembelajaran mesin statistik adalah bahwa tidak ada jaminan . Saat Anda memperkirakan kinerja menggunakan set yang tertunda, itu hanya perkiraan . Perkiraan bisa salah.

Ini membutuhkan waktu untuk membiasakan diri, tetapi Anda harus merasa nyaman dengannya. Ketika Anda mengatakan "Bagaimana jika kinerja benar-benar memburuk?", Jawabannya yakin, itu bisa terjadi. Kinerja aktual bisa lebih buruk dari yang Anda perkirakan / prediksi. Bisa juga lebih baik. Keduanya mungkin. Itu tidak bisa dihindari. Ada beberapa ketidakpastian yang melekat dan tidak dapat direduksi.

Ketika Anda mengevaluasi kinerja menggunakan set uji yang diadakan, Anda menggunakan data dari masa lalu untuk mencoba memprediksi kinerja masa depan. Seperti yang mereka katakan, kinerja masa lalu bukan jaminan hasil di masa depan . Ini adalah fakta kehidupan yang harus kita terima.

Anda tidak bisa membiarkan ini melumpuhkan Anda. Fakta bahwa itu mungkin untuk melakukan lebih buruk dari yang Anda prediksi bukanlah alasan untuk menghindari penyebaran model produksi yang dilatih pada data. Secara khusus, itu juga mungkin dilakukan dengan buruk jika Anda tidak melakukannya. Ada kemungkinan bahwa model yang dilatih pada semua data (kereta + validasi + tes) akan lebih buruk daripada model yang dilatih hanya pada bagian validasi kereta +. Mungkin juga akan lebih baik. Jadi, daripada mencari jaminan, kita harus bertanya pada diri sendiri: Apa yang memberi kita peluang sukses yang terbaik? Apa yang paling mungkin paling efektif?

Dan dalam hal ini, ketika Anda ingin menggunakan untuk produksi, yang terbaik yang dapat Anda lakukan adalah menggunakan semua data yang tersedia untuk Anda. Dalam hal kinerja yang diharapkan, menggunakan semua data tidak lebih buruk daripada menggunakan beberapa data, dan berpotensi lebih baik. Jadi, Anda sebaiknya menggunakan semua data yang tersedia untuk melatih model ketika Anda membangun model produksi. Hal-hal masih bisa berjalan buruk - itu selalu mungkin untuk beruntung, setiap kali Anda menggunakan metode statistik - tetapi ini memberi Anda kesempatan terbaik untuk hal-hal berjalan dengan baik.

Secara khusus, praktik standar adalah sebagai berikut:

  1. Simpan beberapa data Anda ke dalam set tes yang diulurkan. Tidak ada aturan yang keras dan cepat tentang fraksi apa yang akan digunakan, tetapi misalnya, Anda mungkin memesan 20% untuk set tes dan mempertahankan 80% sisanya untuk pelatihan & validasi. Biasanya, semua pemisahan harus dilakukan secara acak.

  2. Selanjutnya, gunakan data pelatihan & validasi untuk mencoba beberapa arsitektur dan hiperparameter, bereksperimen untuk menemukan model terbaik yang Anda bisa. Ambil 80% yang ditahan untuk pelatihan dan validasi, dan pisahkan menjadi set pelatihan dan set validasi, dan latih model menggunakan set pelatihan dan kemudian ukur akurasinya pada set validasi. Jika Anda menggunakan validasi silang, Anda akan melakukan split ini berkali-kali dan rata-rata hasilnya pada set validasi; jika tidak, Anda akan melakukan satu split (misalnya, 70% / 30% dari 80%, atau sesuatu seperti itu) dan mengevaluasi kinerja pada set validasi. Jika Anda memiliki banyak hiperparameter untuk dicoba, lakukan ini satu kali untuk setiap pengaturan calon hiperparameter. Jika Anda memiliki banyak arsitektur untuk dicoba, lakukan ini untuk setiap kandidat arsitektur. Anda dapat mengulangi ini, menggunakan apa yang Anda

  3. Setelah Anda bahagia, Anda membekukan pilihan arsitektur, hiperparameter, dll. Sekarang eksperimen Anda selesai. Setelah Anda mencapai titik ini, Anda tidak akan pernah bisa mencoba opsi lain lagi (tanpa mendapatkan set tes baru) - jadi jangan tekan titik ini sampai Anda yakin Anda siap.

  4. Ketika Anda siap, maka Anda melatih model pada set pelatihan + validasi penuh (yang 80%) menggunakan arsitektur dan hyperparameter yang Anda pilih sebelumnya. Kemudian, ukur keakuratannya pada set tes yang diulurkan. Itulah perkiraan / prediksi Anda untuk seberapa akurat pendekatan pemodelan ini. Anda mendapatkan nomor tunggal di sini. Angka itu adalah apa adanya: jika Anda tidak menyukainya, Anda tidak dapat kembali ke langkah 1 dan 2 dan melakukan lebih banyak eksperimen; itu tidak valid.

  5. Akhirnya, untuk penggunaan produksi, Anda dapat melatih model pada seluruh kumpulan data, pelatihan + validasi + pengujian, dan menggunakannya untuk penggunaan produksi. Perhatikan bahwa Anda tidak pernah mengukur akurasi model produksi ini, karena Anda tidak memiliki data yang tersisa untuk melakukan itu; Anda sudah menggunakan semua data. Jika Anda menginginkan perkiraan seberapa baik kinerjanya, Anda berhak menggunakan perkiraan akurasi dari langkah 4 sebagai prediksi Anda tentang seberapa baik kinerjanya dalam produksi, karena itulah prediksi terbaik yang tersedia untuk kinerja masa depannya. Seperti biasa, tidak ada jaminan - itu hanya perkiraan terbaik, mengingat informasi yang tersedia bagi kami. Mungkin saja hal itu bisa lebih buruk dari yang Anda prediksi, atau lebih baik dari yang Anda prediksi - itu selalu benar.

DW
sumber
Memberi +1 untuk upaya ini, meskipun saya tidak sepenuhnya setuju :) misalnya ketika Anda menyebutkan "Dalam hal kinerja yang diharapkan, menggunakan semua data tidak lebih buruk daripada menggunakan beberapa data, dan berpotensi lebih baik." Saya tidak melihat alasan di baliknya. Di sisi lain, poin ke-2 yang Anda sebutkan tampak sangat penting, validasi silang! jadi pada dasarnya Anda melatih / memvalidasi dengan semua sampel, jadi mungkin Anda menolak pencilan dalam model akhir yang dipilih. Terima kasih atas jawaban anda.
pcko1
@ pcko1, Prinsipnya sederhana. Jika Anda memiliki data, haruskah Anda menggunakan semuanya, atau sebagian? Mengapa? Mungkin ketika kita mendapatkan data, sebelum kita melakukan apa pun, kita harus mengambil 10% saja dan membuangnya dan tidak pernah melihatnya. Faktanya, jika membuang beberapa itu baik, membuang lebih banyak bahkan lebih baik, jadi mungkin kita harus membuang semua data kita. Itu tidak masuk akal, bukan? Mengapa? Lihat apakah Anda dapat mengetahui alasannya, lalu coba menerapkannya pada situasi ini. Semoga ini membuat Anda berpikir!
DW
3

Salah satu alasan memiliki set data adalah untuk menghindari overfitting. Jika Anda menggunakan validasi silang, Anda pada dasarnya mengizinkan seluruh dataset untuk bertindak sebagai set pelatihan, tetapi pelatihan ulang tidak akan membiarkan Anda memvalidasi apakah ada tanda overfitting. Saya kira cara baik itu (validasi silang atau uji ulang dengan seluruh kumpulan data) tidak boleh secara dramatis mengubah hasil Anda (dari tebakan saya yang tidak berpendidikan), tetapi Anda tidak akan dapat melakukan penyetelan hyperparameter atau memvalidasi kinerja model Anda karena Anda tidak melakukannya. memiliki set tes. Apakah akhirnya menjadi lebih baik, sulit untuk mengatakan, tapi saya kira satu-satunya cara untuk mengetahui adalah melakukan A / B dari dua model atas data nyata dari waktu ke waktu.

Lyrist
sumber