Saya merasa bahwa pertanyaan ini terkait dengan teori di balik validasi silang. Saya mempresentasikan temuan empiris saya di sini dan menulis pertanyaan terkait dengan teori validasi silang di sana .
Saya memiliki dua model M1 dan M2, saya menggunakan set data yang sama untuk melatih mereka dan melakukan validasi silang menggunakan set data yang sama untuk menemukan parameter optimal untuk setiap model. Say akhirnya saya menemukan bahwa M1 di bawah parameter optimalnya, berkinerja lebih baik daripada M2 di bawah parameter optimalnya dalam hal skor validasi silang 10 kali lipat. Sekarang jika saya memiliki satu set data uji independen dengan prediktor dan label dan set data uji ini dihasilkan dari distribusi yang sama dari set data pelatihan saya, maka sebelum saya menerapkan 2 model yang telah disesuaikan ini pada set data pengujian baru, dapatkah saya klaim atau haruskah saya berharap untuk melihat bahwa M1 akan tetap berkinerja lebih baik daripada M2 dibandingkan dengan kumpulan data pengujian yang baru?
Saya sedang bermain contoh Kaggle Titanic. Saya memiliki 2 model xgboost, M1 disetel dengan baik dan M2 kurang disetel dalam arti bahwa M1 memiliki validasi silang 10 kali lebih baik pada perangkat data pelatihan. Tetapi ketika saya mengirimkan keduanya, saya menemukan bahwa model yang kurang baik sebenarnya memiliki skor yang lebih baik pada set data uji. Bagaimana bisa? Dan jika itu benar, lalu apa yang harus kita cari ketika kita memasukkan data ke model yang berbeda dan menyesuaikan parameter model?
Berikut adalah hasil pengiriman spesifik saya: Saya melakukan pencarian grid acak
params_fixed = {'silent': 1,'base_score': 0.5,'reg_lambda': 1,
'max_delta_step': 0,'scale_pos_weight':1,'nthread': 4,
'objective': 'binary:logistic'}
params_grid = {'max_depth': list(np.arange(1,10)),
'gamma': [0,0.05,0.1,0.3, 0.5,0.7,0.9],
'n_estimators':[1,2,5,7,10,15,19,25,30,50],
'learning_rate': [0.01,0.03,0.05,0.1,0.3,0.5,0.7,0.9,1],
'subsample': [0.5,0.7,0.9], 'colsample_bytree': [0.5,0.7,0.9],
'min_child_weight': [1,2,3,5], 'reg_alpha': [1e-5, 1e-2, 0.1, 0.5,1,10]
}
rs_grid = RandomizedSearchCV(
estimator=XGBClassifier(**params_fixed, seed=seed),
param_distributions=params_grid,
n_iter=5000,
cv=10,
scoring='accuracy',
random_state=seed
)
Setiap kali saya mengubah variabel n_iter
. Pertama, saya atur n_iter=10
, itu memberi saya satu set nilai dari parameter hiper itu, sebut saja vektor ini dan skor cv (tingkat akurasi) adalah 0,83389 , maka saya menggunakan untuk melatih model saya dan menghasilkan prediksi pada tes independen kumpulan data, dan ketika saya kirim ke Kaggle menghasilkan akurasi yang sebenarnya pada kumpulan data uji 0.79426
Kedua, saya atur n_iter=100
, itu memberi saya dan skor cv adalah 0,83614 , yaitu, lebih tinggi dari yang pertama, masuk akal, tetapi ketika saya mengirim ke Kaggle, 0,78469 , lebih rendah dari yang pertama.
Ketiga, saya atur n_iter = 1000
, itu memberi saya dan skor cv adalah 0,83951 , yaitu, lebih tinggi dari yang kedua, masuk akal, tetapi ketika saya kirimkan ke Kaggle, 0,77990 , lebih rendah dari yang kedua.
Keempat, saya atur n_iter = 5000
, itu memberi saya dan skor cv adalah 0,84512 , yaitu, lebih tinggi dari yang ketiga, masuk akal, tetapi ketika saya mengirim ke Kaggle, 0,72249 , lebih rendah dari yang ketiga.
Ini benar-benar frustrasi. Model semakin baik dan lebih baik pada skor validasi silang tetapi ketika dilakukan pada set data independen yang sebenarnya, kinerjanya semakin buruk. Apakah saya menafsirkan skor CV dengan cara yang berlawanan? Saya melihat beberapa makalah menyebutkan bahwa skor CV bisa terlalu optimis untuk menyimpulkan skor tes yang sebenarnya. Namun, bahkan jika itu benar, maka saya pikir skor CV untuk semua 4 model saya harus semua optimis tentang nilai ujian sejati mereka sendiri, yaitu, urutannya harus dipertahankan. Tetapi ketika menerapkan pada set data uji nyata, urutannya terbalik.
Satu-satunya alasan yang dapat saya bayangkan adalah, set data uji memiliki distribusi yang berbeda dari set data pelatihan. Namun, jika memang benar demikian, maka saya percaya tidak ada metode di bawah matahari yang dapat menyembuhkan masalah ini.