Pembelajaran Mesin Praktik Terbaik untuk Big Dataset

9

Saya akan lulus dari Master saya dan telah belajar tentang pembelajaran mesin serta melakukan proyek penelitian dengannya. Saya bertanya-tanya tentang praktik terbaik di industri saat melakukan tugas pembelajaran mesin dengan Kumpulan Data Besar (seperti 100-an GB atau TB). Menghargai jika sesama ilmuwan data dapat berbagi pengalaman mereka. Ini pertanyaan saya:

  1. Tentunya, dataset yang sangat besar membutuhkan waktu lebih lama untuk dilatih (bisa berhari-hari atau berminggu-minggu). Sering kali kita perlu melatih berbagai model (SVM, Neural Network, dll.) Untuk membandingkan dan menemukan model kinerja yang lebih baik. Saya curiga, dalam proyek industri, kami ingin hasilnya secepat mungkin tetapi menghasilkan kinerja terbaik. Apakah ada tips untuk mengurangi waktu pelatihan & pengujian? Jika Anda merekomendasikan untuk menyetel ulang dataset, saya akan tertarik untuk mempelajari cara terbaik untuk mengatur ulang dataset untuk mencakup semua atau sebagian besar skenario dari dataset.
  2. Kami tahu bahwa melakukan validasi silang lebih baik karena dapat mengurangi pemasangan berlebihan. Namun, validasi silang juga membutuhkan waktu untuk melatih dan model yang dilatih dengan validasi silang tidak dapat diimplementasikan secara langsung (berbicara dari pengalaman python sklearn: Saya perlu melatih model dengan dataset lagi setelah pengujian validasi silang untuk diterapkan). Apakah Anda biasanya melakukan validasi silang dalam proyek big data Anda atau bertahan dengan uji kereta api?

Hargai umpan baliknya.

iLoeng
sumber

Jawaban:

8

Saya akan mencantumkan beberapa praktik yang menurut saya bermanfaat, semoga ini membantu:

  1. Terlepas dari apakah data itu besar atau tidak, validasi silang adalah suatu keharusan ketika membangun model apa pun. Jika ini membutuhkan waktu lebih lama daripada yang menunggu konsumen akhir, Anda mungkin perlu mengatur ulang harapan mereka, atau mendapatkan perangkat keras / lunak yang lebih cepat untuk membangun model; tetapi jangan melewati validasi silang. Merencanakan kurva belajar dan validasi silang adalah langkah efektif untuk membantu membimbing kita sehingga kita mengenali dan memperbaiki kesalahan sebelumnya dalam proses. Saya telah mengalami contoh ketika rangkaian uji kereta sederhana tidak mengungkapkan masalah sampai saya menjalankan validasi lintas-lipat dan menemukan perbedaan besar dalam kinerja algoritma pada lipatan yang berbeda.

  2. Sebelum mengukur dataset, hilangkan catatan dengan nilai variabel dan outlier yang hilang, kolom variabel yang sangat berkorelasi, dan variabel varians mendekati nol. Ini akan memberi Anda perkiraan yang jauh lebih baik dari dataset nyata yang dapat digunakan. Kadang-kadang Anda mungkin berakhir dengan hanya sebagian kecil dari dataset yang tersedia yang benar-benar dapat digunakan untuk membangun model.

  3. Ketika mengukur dataset untuk membangun model, lebih mudah untuk memperkirakan sumber daya komputasi jika Anda menghitung dataset dalam baris dan kolom dan ukuran memori dari matriks numerik akhir. Karena setiap algoritma pembelajaran mesin pada akhirnya akan mengubah dataset menjadi matriks numerik, menghitung ukuran dataset dalam hal GB / TB data input mentah (yang mungkin sebagian besar string / variabel nominal tekstual / dll.) Sering menyesatkan dan Dataset mungkin tampak lebih menakutkan dan raksasa untuk dikerjakan.

  4. Setelah Anda mengetahui (atau memperkirakan) ukuran akhir data yang dapat digunakan, periksa apakah Anda memiliki mesin yang sesuai untuk dapat memuatnya ke dalam memori dan latih modelnya. Jika ukuran dataset Anda lebih kecil dari memori yang tersedia / dapat digunakan oleh perangkat lunak, maka Anda tidak perlu khawatir tentang ukurannya lagi.

  5. Jika ukuran dataset lebih besar dari memori yang tersedia untuk melatih suatu model, maka Anda dapat mencoba pendekatan ini (mulai dari yang paling sederhana terlebih dahulu):

    • Gunakan mesin dengan lebih banyak memori: Jika Anda menggunakan penyedia layanan cloud maka pendekatan paling sederhana adalah dengan menyediakan lebih banyak memori dan terus membangun model seperti biasa. Untuk mesin fisik, cobalah untuk mendapatkan RAM tambahan, harganya terus berkurang dan jika dataset Anda akan tetap sebesar ini atau tumbuh lebih besar dari waktu ke waktu, maka itu adalah investasi yang baik.
    • Tambahkan node ke cluster: Untuk penyebaran komputasi cluster berbasis Hadoop dan Spark, pelatihan pada set data yang lebih besar semudah menambahkan lebih banyak mesin ke cluster.
    • Seringkali tugas klasifikasi memerlukan pelatihan data dengan kelas yang sangat tidak seimbang, rasio kelas positif dan negatif terkadang bisa sebesar 1: 1000 atau lebih. Metode langsung untuk meningkatkan akurasi dalam kasus-kasus ini adalah mengambil sampel yang berlebihan dari kelas minoritas atau sampel yang kurang dari kelas mayoritas, atau melakukan keduanya bersama-sama. Jika Anda memiliki dataset yang besar, pengambilan sampel di bawah mayoritas kelas adalah pilihan yang sangat baik yang akan meningkatkan akurasi algoritma Anda serta mengurangi waktu pelatihan.
    • Buat ansambel: Pisahkan dataset secara acak dan latih beberapa pelajar dasar pada setiap bagian, lalu gabungkan ini untuk mendapatkan prediksi akhir. Ini akan paling efektif menggunakan dataset besar dan menghasilkan model yang lebih akurat. Tetapi Anda perlu menghabiskan lebih banyak waktu untuk membangun ansambel dengan hati-hati dan menghindari perangkap yang biasa terjadi pada bangunan ansambel.
    • Jika Anda menggunakan ansambel, latih banyak model single-thread secara paralel. Hampir semua perangkat lunak ML menyediakan fitur untuk melatih beberapa model pada core yang berbeda atau memisahkan node secara bersamaan.
    • Evaluasi beberapa algoritma berbeda pada waktu yang diambil untuk melatih mereka untuk dataset spesifik Anda vs keakuratannya. Meskipun tidak ada jawaban universal, tetapi saya telah menemukan ketika menggunakan data yang berisik, SVM membutuhkan waktu lebih lama untuk dilatih daripada ansambel model regresi yang diatur secara hati-hati, tetapi mungkin hanya sedikit lebih akurat dalam kinerja; dan jaringan saraf yang dibangun dengan baik mungkin membutuhkan waktu yang sangat lama untuk melatih dibandingkan dengan pohon CART, tetapi melakukan secara signifikan lebih akurat daripada pohon itu.
    • Untuk mengurangi waktu yang dibutuhkan untuk membangun model, cobalah untuk mengotomatiskan sebanyak mungkin proses yang Anda bisa. Beberapa jam dihabiskan untuk mengotomatiskan tugas manual rawan kesalahan yang kompleks dapat menyelamatkan tim Anda seratus jam kemudian dalam proyek.
    • Jika tersedia, gunakan implementasi algoritme yang menggunakan pemrosesan paralel, matriks jarang, dan komputasi dengan cache, ini mengurangi waktu pemrosesan secara signifikan. Sebagai contoh, gunakan xgboost bukan implementasi single-core GBM.
    • Jika tidak ada yang berhasil, latih model pada dataset yang lebih kecil; seperti yang disarankan Emre dalam jawabannya, gunakan kurva belajar untuk memperbaiki ukuran sampel terkecil yang diperlukan untuk melatih model, menambahkan lebih banyak catatan pelatihan daripada ukuran ini tidak meningkatkan akurasi model secara nyata. Berikut ini adalah artikel bagus yang mengeksplorasi situasi ini - http://web.mit.edu/vondrick/largetrain.pdf .
Sandeep S. Sandhu
sumber
Terima kasih @ Tetaplah untuk jawaban lengkap Anda. Adapun point # 3 menghitung dataset dalam baris dan kolom dan ukuran memori dari matriks numerik akhir, dapatkah Anda menjelaskan lebih lanjut? Apakah itu berarti menemukan ukuran dataset bersih Anda menggunakan sintaksis, seperti 'df.values.nbytes', 'df.shape' di panda dataframe? Terima kasih.
iLoeng
Gunakan: df.values.nbytes + df.index.nbytes + df.columns.nbytes
Sandeep S. Sandhu
4

Pertanyaannya adalah, berapa banyak data yang dibutuhkan untuk memenuhi model Anda? Untuk menentukan ini, Anda dapat memplot kurva belajar dengan jumlah data yang bervariasi, mungkin memperbesar / memperkecil ukuran dengan faktor konstan. Jika pelatihan tentang semua data tidak layak, kurva pembelajaran dapat membantu Anda melakukan pertukaran informasi.

Model saturasi juga berperan dalam validasi silang. Jika Anda tidak mendekati saturasi, menggunakan sejumlah kecil lipatan akan memberi Anda angka kinerja pesimistis karena Anda akan melatih model Anda tentang data yang lebih sedikit daripada yang dapat digunakan.

Akhirnya dan sebaliknya, Anda dapat menggunakan model yang lebih kompleks daripada "mengubah ukuran" data agar sesuai dengan model.

Selamat datang di DataScience.SE.

Emre
sumber