Pertanyaan Membedakan overfitting vs prediksi yang bagus


Ini adalah pertanyaan tentang cara menghitung & mengurangi overfitting dalam pembelajaran mesin. Saya pikir banyak hal baru untuk pembelajaran mesin akan memiliki pertanyaan yang sama, jadi saya mencoba untuk menjadi jelas dengan contoh dan pertanyaan saya dengan harapan jawaban di sini dapat membantu orang lain.

Saya memiliki sampel teks yang sangat kecil dan saya mencoba memprediksi nilai-nilai yang terkait dengannya. Saya telah menggunakan sklearn untuk menghitung tf-idf, dan memasukkannya ke dalam model regresi untuk prediksi. Ini memberi saya 26 sampel dengan fitur 6323 - tidak banyak. Saya tahu:

>> count_vectorizer = CountVectorizer(min_n=1, max_n=1)
>> term_freq = count_vectorizer.fit_transform(texts)
>> transformer = TfidfTransformer()
>> X = transformer.fit_transform(term_freq) 
>> print X.shape

(26, 6323)

Memasukkan 26 sampel dari 6323 fitur (X) dan skor terkait (y), ke dalam LinearRegression model, memberikan prediksi yang baik. Ini diperoleh dengan menggunakan validasi silang meninggalkan-satu-keluar, dari cross_validation.LeaveOneOut(X.shape[0], indices=True) :

using ngrams (n=1):
     human  machine  points-off  %error
      8.67    8.27    0.40       1.98
      8.00    7.33    0.67       3.34
      ...     ...     ...        ...
      5.00    6.61    1.61       8.06
      9.00    7.50    1.50       7.50
mean: 7.59    7.64    1.29       6.47
std : 1.94    0.56    1.38       6.91

Cukup bagus! Menggunakan ngram (n = 300) bukan unigrams (n = 1), hasil serupa terjadi, yang jelas tidak benar. Tidak ada 300 kata yang muncul di teks mana pun, sehingga prediksi seharusnya gagal, tetapi tidak:

using ngrams (n=300):
      human  machine  points-off  %error
       8.67    7.55    1.12       5.60
       8.00    7.57    0.43       2.13
       ...     ...     ...        ...
mean:  7.59    7.59    1.52       7.59
std :  1.94    0.08    1.32       6.61

Pertanyaan 1:


32
2017-09-03 19:32


asal


Jawaban:


bagaimana Anda biasanya mengatakan bahwa model ini terlalu pas?

Satu aturan praktis yang berguna adalah bahwa Anda mungkin overfitting ketika kinerja model Anda di set pelatihan sendiri jauh lebih baik daripada pada set validasi yang diadakan keluar atau dalam pengaturan lintas-validasi. Itu tidak semua ada untuk itu.

Entri blog yang saya tautkan untuk menjelaskan prosedur pengujian overfit: set pelatihan plot dan validasi set error sebagai fungsi dari ukuran set pelatihan. Jika mereka menunjukkan celah yang stabil di ujung kanan plot, Anda mungkin melakukan overfitting.

Apa cara terbaik mencegah over-fitting (dalam situasi ini) untuk memastikan bahwa hasil prediksi baik atau tidak?

Gunakan set tes yang diadakan. Hanya lakukan evaluasi pada set ini ketika Anda benar-benar selesai dengan pemilihan model (tuning hyperparameter); jangan berlatih di atasnya, jangan gunakan di (lintas) validasi. Skor yang Anda dapatkan pada set tes adalah evaluasi akhir model. Ini harus menunjukkan apakah Anda tidak sengaja overfit set validasi (s).

[Konferensi pembelajaran mesin terkadang diatur seperti kompetisi, di mana set tes tidak diberikan kepada peneliti sampai setelah mereka telah mengirimkan model terakhir mereka ke penyelenggara. Sementara itu, mereka dapat menggunakan set pelatihan sesuka hati mereka, mis. dengan menguji model menggunakan validasi silang. Kaggle melakukan hal serupa.]

Jika LeaveOneOut validasi silang digunakan, bagaimana model mungkin over-fit dengan hasil yang baik?

Karena Anda dapat menyetel model sebanyak yang Anda inginkan dalam pengaturan validasi silang ini, hingga kinerjanya hampir sempurna di CV.

Sebagai contoh ekstrem, anggaplah bahwa Anda telah mengimplementasikan estimator yang pada dasarnya adalah pembangkit bilangan acak. Anda dapat terus mencoba biji acak sampai Anda menekan "model" yang menghasilkan kesalahan yang sangat rendah dalam validasi silang, tetapi itu tidak Anda telah memukul model yang tepat. Itu berarti Anda telah melampaui batas validasi silang.

Lihat juga warangan yang menarik ini.


34
2017-09-03 22:06