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 GridSearchCV
dengan 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_predict
diukur 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 C
dan 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 optunity
paket 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?