Distribusi Kumpulan Tes dan Pelatihan yang Berbeda


14

Saya sedang mengerjakan kompetisi sains data di mana distribusi set tes saya berbeda dari set pelatihan. Saya ingin mengambil sampel pengamatan dari set pelatihan yang sangat mirip dengan set tes.

Bagaimana saya bisa melakukan ini?


Random Under-Sampling, Random Over-Sampling, Berbasis Cluster-Over Sampling, Informed Over Sampling: Teknik Over-Sampling Minoritas Sintetis, Teknik oversampling minoritas sintetis termodifikasi (MSMOTE) dll.
Aditya

Anda sebaiknya menandai salah satu jawaban sebagai "Jawaban yang Diterima" jika Anda senang dengan salah satu dari mereka.
TwinPenguins

Jawaban:


16

Pertanyaan besar, ini adalah apa yang dikenal dalam paradigma Pembelajaran Mesin sebagai "Kovariate Shift", atau "Model Drift" atau "Nonstationarity" dan seterusnya.

Salah satu asumsi kritis yang akan dibuat seseorang untuk membangun model pembelajaran mesin untuk prediksi di masa depan adalah bahwa data yang tidak terlihat (tes) berasal dari distribusi yang sama dengan data pelatihan! Namun, dalam kenyataannya, asumsi yang agak sederhana ini mudah dipatahkan dan data yang akan datang (distribusinya) berubah seiring waktu karena berbagai alasan. Bagi mereka yang mungkin tidak terbiasa dengan masalah yang sangat penting ini, saya sarankan mencari di sini atau mengirim !

Bagi saya, pertanyaan Anda termasuk dalam kategori yang sama. Meskipun saya tidak memiliki solusi yang sempurna (implementasi untuk menawarkan), tetapi saya pikir Anda mungkin melihat:

  • Posting blog ini memberi Anda cara sederhana untuk menangani subsampling data pelatihan dengan kode yang disediakan dengan Python!
  • Periksa makalah penelitian ini . Mereka mengusulkan untuk menyelesaikan masalah dengan menyusun ulang data pelatihan sehingga distribusi pelatihan lebih dekat dengan distribusi tes menggunakan Prosedur Estimasi Estimasi Kullback-Leibler berdasarkan pada teorema " Kullback-Leibler divergence ". Saya tidak tahu apakah mereka menyediakan implementasi atau dapat diimplementasikan dengan mudah, tapi saya pikir mungkin perlu menggali karena kedengarannya cara profesional untuk menangani ketidakcocokan distribusi.

Pembaruan CEPAT (solusi yang baik) : Saya menemukan implementasi Python dari algoritma KLIEP dari makalah penelitian (poin terakhir) untuk menemukan bobot tersebut. Agaknya mudah digunakan! Pada dasarnya, pelatihan ini memberi contoh pelatihan dengan meletakkan beban (melalui algoritma KLIEP) sehingga asumsi memiliki distribusi kereta dan tes yang sama berlaku sebanyak mungkin.


5

Saya ingin mengambil sampel pengamatan dari set pelatihan yang sangat mirip dengan set tes.

Saya tidak yakin Anda ingin melakukan itu. Seluruh tujuannya bukan untuk melatih algoritma Anda sehingga generalisasi dengan baik untuk data yang tak terlihat.

Biasanya, seseorang harus menyesuaikan data pengujiannya dengan data kereta api (mis. Standarisasi data uji menurut data kereta ) dan bukan sebaliknya. Dalam praktiknya, Anda tidak tahu data pengujian Anda.


3

Subsampling set kereta mungkin bukan solusi terbaik!

Perbedaan antara set tes / pelaksanaan dan distribusi / fitur set pelatihan sangat umum dalam tugas pembelajaran yang diawasi (ini adalah salah satu alasan mengapa kompetisi seperti Kaggle menantang). Itu sebabnya kami mengatakan kinerja masa lalu mungkin (hanya) digunakan sebagai panduan untuk memperkirakan kinerja masa depan tetapi tidak menunjukkan / menjamin itu . Oleh karena itu, model yang dapat digeneralisasi selalu lebih disukai daripada model yang disetel dengan baik yang dapat berkinerja sangat baik pada set (sub) kereta tetapi berkinerja buruk pada data yang tidak terlihat.

Sementara perbedaan seperti itu normal, kesenjangan terlalu besar antara sampel masa lalu dan masa depan dapat disebut sebagai contoh drift konsep yang merupakan bidang penelitian aktif dengan sendirinya. Dengan pertanyaan Anda, saya tidak dapat menilai bahwa kasus Anda adalah kasus ML normal atau penyimpangan konsep benar-benar terjadi.

Ini saran saya:

  1. Latih sejumlah model dengan kemampuan generalisasi tinggi. Menggunakan bootstrap pengambilan sampel dari dataset kereta Anda, Anda dapat dengan mudah menghitung Bias dan varians komponen kesalahan. Ingatlah bahwa Anda mencari model varians rendah (di mana perubahan data akan memiliki efek marjinal pada kinerjanya) daripada model bias rendah tetapi varians tinggi (yang mungkin cocok dengan set pelatihan (sub) Anda). Sekarang, Anda dapat memilih algoritma terbaik dan mengevaluasinya terhadap set tes. Perhatikan bahwa dalam waktu pelatihan kita seharusnya tidak melihat set tes!

  2. Alih-alih beberapa downsampling acak, cari standardisasi / normalisasi dan pemilihan fitur / teknik. Teknik-teknik ini mungkin praktis dalam mempelajari model yang lebih umum. Misalnya, kadang-kadang rentang domain fitur dapat berubah dari waktu ke waktu sementara bentuk distribusi (apa pun itu) tetap hampir sama (misalnya distribusi yang sama yang bergeser ke kiri atau kanan). Dalam kasus seperti itu, standarisasi sederhana (yaitu memetakan kereta dan menguji sampel ke ruang yang telah ditentukan seperti [0,1] menggunakan fungsi pemetaan yang berbeda) dapat mengurangi gejala.

  3. Downsampling sistematis hanya bisa menjadi solusi yang tepat jika Anda melakukannya berdasarkan beberapa pengetahuan tentang masalah (tidak hanya untuk tujuan mendapatkan akurasi yang lebih baik pada dataset uji). Misalnya, Anda mungkin tahu bahwa beberapa catatan dalam data kereta diambil sampelnya sejak lama, dari lapangan jauh, atau dipengaruhi oleh faktor-faktor tertentu yang tidak akan terjadi di masa depan (dalam pengumpulan data uji). Dalam kasus seperti itu, Anda dapat menghapus sampel yang mungkin tidak relevan karena Anda yakin bahwa Anda tidak akan melihat pola seperti itu di masa mendatang (maksud saya Anda harus memiliki alasan di balik pemilihan subset pelatihan daripada melihat ke set tes yang pada kenyataannya, Anda tidak memiliki akses ke sana). Dalam hal demikian, saya menyebutnya penghapusan outlier daripada downsampling.


1
Pergeseran Dataset dalam Pembelajaran Mesin adalah gambaran lapangan yang bagus dan ketat. " Pergeseran kovariat (input) berarti bahwa hanya distribusi input yang berubah, sedangkan distribusi bersyarat dari output yang diberi input tetap tidak berubah." p(y|x)
ijoseph

-1

Ada paket yang bagus dalam python (scikit belajar)

http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

Anda dapat melakukan subsampel pengamatan Anda dari set pelatihan menggunakan paket ini.


1
Sejauh yang saya mengerti pertanyaannya, distribusi kereta / tes berbeda yang jika tidak diperhitungkan akan mengarah pada apa yang dikenal sebagai "Pergeseran Kovariat". Subsampel sederhana menggunakan implementasi "train_test_split" di scikit belajar yang disebutkan di sini tidak akan memperhitungkan distribusi akun selama pemisahan! Dengan demikian jawabannya tidak relevan.
TwinPenguins
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.