Ben 140000 örnek bir veri kümesi ve bunun için bir ikili sınıflandırma (SVM, Lojistik Regresyon, Rastgele Orman vb.)
Çoğu durumda, Izgara veya Rastgele arama kullanarak tüm veri kümesinde hiperparametre ayarı çok masraflıdır.
Aşağıdaki tekniği kullanmaya başladım
- Veri kümemdeki alt örnek
- Hiperparametreleri ayarlamak için elde edilen fraksiyonu kullanın
- Veri kümesinin tamamını kullanarak bir modeli eğitmek için elde edilen parametreleri kullanın
İkinci adım, bir kullanımı ile ilgili parametrelerin her dizi değerlendirmek sklearn
's GridSearchCV
cv = 10. Üçüncü adımda oluşturduğum son modeli değerlendirmek için sklearn
's cross_val_predict
. Bu anlamda modellerimi yüzde 10 veri bırakarak değerlendiriyorum, geri kalanı üzerinde çalışıyorum ve% 10, tekrar tekrar 10 kez tahmin doğruluğunu ölçüyorum ve ardından puanların ortalamasını alıyorum.
Beni endişelendiren şey, tüm veri setim üzerinde eğitimden aldığım tahmin doğruluğunun, parametrelerin en iyi parametre seti için ayarlanması sırasında aldığım değerlendirmeye gerçekten yakın olmasıdır (test edilen her parametre seti, ortalama 10'dan elde edilen bir puan çıkarır. çapraz geçerlilik sonuçları).
Çoğu zaman, cross_val_predict
tüm eğitim örnekleri (tüm veri seti) kullanılarak ölçülen doğruluk , en iyi parametrelerin değerlendirilmesinin biraz üzerindedir.
Bunu burada göstermek için bir dizi parametrenin değerlendirilmesi (yukarıda tarif ettiğimden daha küçük bir veri kümesinde, ancak etki aynıdır)
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}
...
Ve cross_val_predict
en iyi parametreleri kullanarak tüm veri setimin eğitiminden aldığım ortalama puanlar
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]]
Gördüğünüz gibi, tüm veri kümesinde eğitim sonuçları iyileştirir. Ben de kötü ayarlanmış modeli (örn için varsayılan değerleri veya rastgele değerler kullanılarak olduğunu doğrulamış olması C
ve gamma
çok daha kötü tahmin doğruluğu yol).
Genel olarak, bir alt kümedeki hiperparametreleri ayarlamanın ideal olmadığını, ancak çok uzun süre beklemek zorunda kalmadan potansiyel olarak nispeten iyi sonuçlara yol açabileceğini düşünüyorum. Örneğin, bu yaklaşımı kullanmadan önce optunity
hiperparametreyi tüm veri kümesinde ayarlamak için kullanılan paketi kullandım . Bu prosedürün tamamlanması 3-5 gün sürecek ve ya gerçekten iyi bir hassasiyet ya da gerçekten iyi bir geri çağırma olan ancak her ikisinde birden olmayan sonuçlar üretecektir, bu nedenle her sınıf için ya hassasiyet ya da geri çağırma gerçekten çok yüksekti (diğerinden daha yüksekti) sınıflandırıcılar başarmıştı) f1 ölçümü gerçekten düşüktü. Aksine, daha sonraki yaklaşımın kullanılması birkaç saatlik bir eğitime ve daha iyi bir f1 ölçümüne yol açar.
Endişelerim:
Sınıflandırma doğruluğumu sınırlayabilir miyim? Veri kümemin sunabileceği tüm tahmin gücünü yalnızca bir alt kümeye ayarlayarak kullanmaktan kaçınır mıyım? Böyle bir performans zararı yaşanıyorsa, bir şekilde bir faktörle sınırlı mı?