Apakah menyetel hyperparameter pada sampel dataset adalah ide yang buruk?

19

Saya memiliki dataset 140000 contoh dan 30 fitur yang saya latih beberapa pengklasifikasi untuk klasifikasi biner (SVM, Regresi Logistik, Hutan Acak dll)

Dalam banyak kasus, penyetelan hyperparameter pada keseluruhan dataset menggunakan pencarian Grid atau Random terlalu memakan waktu.

Saya mulai menggunakan teknik berikut

  • Sub sampel dataset saya
  • Gunakan fraksi yang diperoleh untuk menyetel hyperparameters aktif
  • Gunakan parameter yang diperoleh untuk melatih model menggunakan seluruh dataset

Untuk mengevaluasi setiap set parameter pada langkah kedua saya menggunakan sklearn's GridSearchCVdengan cv = 10. Untuk mengevaluasi model akhir yang saya buat pada langkah ketiga saya menggunakan sklearn's cross_val_predict. Dalam hal ini saya mengevaluasi model saya dengan menyisakan 10% data, saya melatih sisanya dan mengukur akurasi prediksi pada 10%, berulang 10 kali, kemudian mengambil rata-rata skor.

Yang membuat saya khawatir adalah bahwa akurasi prediksi yang saya dapatkan dari pelatihan pada seluruh dataset saya, sangat dekat dengan evaluasi yang saya dapatkan ketika menyetel parameter untuk set parameter terbaik (setiap set parameter yang diuji menghasilkan skor yang diperoleh dari rata-rata 10- hasil validasi lipatan silang).

Seringkali akurasi yang cross_val_predictdiukur menggunakan semua contoh pelatihan (seluruh dataset) sedikit di atas apa yang dikembalikan oleh parameter terbaik.

Untuk menggambarkan hal ini di sini adalah evaluasi seperangkat parameter (pada dataset yang lebih kecil dari apa yang saya jelaskan di atas tetapi efeknya sama)

Best parameters set found on development set:
{'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
Scores for all sets of parameters
0.851 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.5}
0.852 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.1}
0.829 (+/-0.006) for {'kernel': 'rbf', 'C': 3, 'gamma': 0.001}
0.853 (+/-0.006) for {'kernel': 'rbf', 'C': 9, 'gamma': 0.1}
...

Dan ini adalah skor rata-rata (dari cross_val_predict) yang saya dapatkan dari pelatihan tentang seluruh dataset saya menggunakan parameter terbaik

precision    recall  f1-score   support

      0       0.86      0.85      0.86     15417
      1       0.86      0.87      0.87     16561

avg / total       0.86      0.86      0.86     31978

acc score: 0.863750078179
roc au score: 0.863370490059
[[13147  2270]
 [ 2087 14474]]

Seperti yang Anda lihat pelatihan pada seluruh dataset meningkatkan hasilnya. Saya juga telah memvalidasi bahwa model yang disetel buruk (misalnya menggunakan nilai default atau nilai acak untuk Cdan gamma) mengarah ke akurasi prediksi yang jauh lebih buruk.

Secara keseluruhan saya berpikir bahwa menyetel hyperparameters pada subset tidak ideal tetapi berpotensi dapat menyebabkan hasil yang relatif baik tanpa harus menunggu terlalu lama. Saya misalnya sebelum menggunakan pendekatan yang digunakan optunitypaket untuk menyetel hyperparameter pada seluruh dataset. Prosedur ini akan memakan waktu 3-5 hari untuk menyelesaikan dan akan menghasilkan hasil yang memiliki presisi sangat baik atau daya ingat sangat baik tetapi tidak keduanya, jadi meskipun untuk setiap kelas baik presisi atau daya ingatnya sangat tinggi (lebih tinggi dari apa yang saya miliki) classifier telah dicapai) pengukuran f1 benar-benar rendah. Sebaliknya, menggunakan pendekatan yang kemudian mengarah pada beberapa jam pelatihan dan pengukuran yang lebih baik.

Kekhawatiran saya adalah:

Apakah saya membatasi akurasi klasifikasi saya? Apakah saya menghindari menggunakan semua kekuatan prediksi yang bisa ditawarkan dataset saya dengan menyetel hanya pada subset? Jika kerusakan kinerja seperti itu terjadi, apakah itu entah bagaimana dibatasi oleh beberapa faktor?

LetsPlayYahtzee
sumber
Harap jelaskan dua metode yang mengarah pada akurasi prediksi yang dekat. Apakah Anda membagi data menjadi set pelatihan dan set validasi, di mana set validasi hanya digunakan untuk mengoptimalkan parameter hiper, dan bukan untuk pelatihan?
Iliyan Bobev
Lihat pertanyaan saya yang diperbarui. Saya harap ini lebih jelas sekarang.
LetsPlayYahtzee

Jawaban:

15

Selain jawaban Jim (+1): Untuk beberapa pengklasifikasi, nilai parameter-hiper tergantung pada jumlah contoh pelatihan, misalnya untuk SVM linier, masalah optimisasi primer adalah

msayan12w2+Csaya=1ξsaya

tunduk pada

ysaya(xsayawb)1-ξsaya,Sebuahndξsaya0saya

Perhatikan bahwa masalah pengoptimalan pada dasarnya adalah ukuran istilah mis-fit data (penjumlahan atas ) dan istilah regularisasi, tetapi parameter penyesalan biasa ditempatkan dengan istilah data misfit. Jelas semakin besar jumlah pola latihan yang kita miliki, semakin besar penjumlahannya dan semakin kecil seharusnya menjaga keseimbangan yang sama dengan besarnya bobot.ξsayaC

Beberapa implementasi reparameterise SVM sebagai

msayan12w2+Csaya=1ξsaya

untuk mengkompensasi, tetapi beberapa tidak. Jadi poin tambahan yang perlu dipertimbangkan adalah apakah parameter hiper optimal tergantung pada jumlah contoh pelatihan atau tidak.

Saya setuju dengan Jim bahwa kriteria pemilihan model yang berlebihan sepertinya lebih merupakan masalah, tetapi jika Anda memiliki cukup data bahkan dalam subsampel maka ini mungkin bukan masalah besar.

Dikran Marsupial
sumber
11

Apakah menyetel hyperparameter pada sampel dataset adalah ide yang buruk?

A: Ya, karena Anda berisiko overfitting (hyperparameters) pada set tes tertentu yang dihasilkan dari split-tes kereta yang Anda pilih.

Apakah saya membatasi akurasi klasifikasi saya?

A: Ya, tetapi kebijaksanaan pembelajaran mesin umum adalah: dengan hiperparameter optimal Anda, katakan , ganti model Anda pada seluruh dataset dan buat model itu model akhir Anda untuk kasus-kasus baru, yang tak terlihat, di masa mendatang.λ

Apakah saya menghindari menggunakan semua kekuatan prediksi yang bisa ditawarkan dataset saya dengan menyetel hanya pada subset?

A: lihat jawaban sebelumnya.

Jika kerusakan kinerja seperti itu terjadi, apakah itu entah bagaimana dibatasi oleh beberapa faktor?

A: idem.

Saya mengukur akurasi saya menggunakan palang 10 kali lipat seperti yang saya gunakan untuk juga mengevaluasi parameter

A: Perhatikan bahwa ini berbeda dari apa yang ditanyakan dalam judul. 10 kali lipat CV mengulang lebih dari 10 pemisahan tes-kereta untuk sampai pada perkiraan "tidak bias" (kurang bias) estimasi generalisasi (diukur dalam hal ini dengan akurasi). CV 10 kali lipat menjawab masalah yang saya bicarakan pada jawaban pertama.

akurasi prediksi yang saya dapatkan dari pelatihan pada seluruh dataset saya

A: ini adalah "in-sample" ukuran yang bisa menjadi optimis bias. Tetapi jangan lupa bahwa Anda memiliki banyak case dan fitur yang relatif sedikit, sehingga bias optimisme ini mungkin tidak menjadi masalah. Machine learning nugget: "regulator terbaik adalah lebih banyak data."

[lanjutan], selalu sangat dekat dengan evaluasi yang saya dapatkan ketika menyetel parameter untuk set parameter terbaik.

A: lihat jawaban sebelumnya. Lihatlah plot hiperparameter: apakah penyetelan mengurangi kesalahan dan seberapa banyak? Dari apa yang Anda katakan, penyetelan tidak melakukan banyak hal.

Anda dapat menguji ini sebagai berikut. Ambil split tes kereta 70% -30%. Bandingkan kinerja prediksi dari:

  1. model yang tidak dikunci yang dilatih di set kereta,
  2. model tuned 10-kali lipat yang dilatih di set kereta.

Biarkan kedua model memprediksi set uji. Jika kinerjanya sangat dekat, maka penyetelan tidak menghasilkan banyak. Jika kinerjanya berbeda untuk model tuned, maka lanjutkan dengan pendekatan tuning.

Jim
sumber
1

Saya akan jawab untuk jaringan saraf tiruan (JST).

Hyperparameter dari JST dapat menentukan proses pembelajarannya (misalnya, tingkat pembelajaran atau ukuran mini-batch) atau arsitekturnya (misalnya, jumlah unit atau lapisan tersembunyi).

Menyetel hyperparameters arsitektur pada himpunan bagian himpunan pelatihan Anda mungkin bukan ide yang baik (kecuali jika himpunan pelatihan Anda benar-benar tidak memiliki keanekaragaman, yaitu meningkatkan ukuran himpunan pelatihan tidak meningkatkan kinerja JST), karena hiperparameter arsitektur mengubah kapasitas JST.

Saya akan kurang peduli menyetel hyperparameters yang menentukan proses pembelajaran pada himpunan bagian dari set pelatihan Anda, tapi saya kira orang harus memvalidasi secara empiris.

Franck Dernoncourt
sumber
0

Anda dapat menggunakan algoritme pengoptimalan hyperparameter yang mendukung evaluasi multifidelity, yaitu, evaluasi pada sub-set data Anda untuk mendapatkan perkiraan kasar namun berguna tentang nilai-nilai hyperparameter optimal untuk seluruh dataset. Pendekatan semacam itu biasanya memungkinkan untuk mengurangi total biaya komputasi yang diperlukan untuk menjalankan optimisasi hyperparameter.

IndieSolver
sumber