Veri kümesini bölmek için uygun bir strateji nedir?
Ben şu yaklaşıma ilgili görüşlerinizi (değil gibi bireysel parametrelere test_size
veya n_iter
ama kullanılırsa X
, y
, X_train
, y_train
, X_test
, ve y_test
uygun bir şekilde ve sıra mantıklı ise):
( bu örneği scikit-learn belgelerinden uzatarak)
1. Veri kümesini yükleyin
from sklearn.datasets import load_digits
digits = load_digits()
X, y = digits.data, digits.target
2. Eğitim ve test setine bölün (örneğin, 80/20)
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
3. Tahmincisi seçin
from sklearn.svm import SVC
estimator = SVC(kernel='linear')
4. Çapraz doğrulama yineleyicisini seçin
from sklearn.cross_validation import ShuffleSplit
cv = ShuffleSplit(X_train.shape[0], n_iter=10, test_size=0.2, random_state=0)
5. Hiperparametreleri ayarlayın
Çapraz doğrulama yineleyicisini eğitim setine uygulama
from sklearn.grid_search import GridSearchCV
import numpy as np
gammas = np.logspace(-6, -1, 10)
classifier = GridSearchCV(estimator=estimator, cv=cv, param_grid=dict(gamma=gammas))
classifier.fit(X_train, y_train)
6. Öğrenme eğrisi ile hata ayıklama algoritması
X_train
rastgele bir antrenmana ve 10 kez ( n_iter=10
) ayarlanan bir teste bölünür . Öğretim skoru, eğri üzerindeki her bir nokta model ilk eğitilmiş ve değerlendirildi 10 puan ortalamasıdır i eğitim örnekleri. Çapraz geçerlilik skoru eğrisindeki her nokta, ilk i eğitim örneklerinde modelin eğitildiği ve test setinin tüm örnekleri üzerinde değerlendirilen 10 puanın ortalamasıdır .
from sklearn.learning_curve import learning_curve
title = 'Learning Curves (SVM, linear kernel, $\gamma=%.6f$)' %classifier.best_estimator_.gamma
estimator = SVC(kernel='linear', gamma=classifier.best_estimator_.gamma)
plot_learning_curve(estimator, title, X_train, y_train, cv=cv)
plt.show()
plot_learning_curve () , scikit-learn'ın (0.15-git) güncel sürümünde bulunabilir.
7. Test setinde son değerlendirme
classifier.score(X_test, y_test)
7a. İç içe çapraz doğrulama ile model seçiminde aşırı uydurma testi yapın (tüm veri kümesini kullanarak)
from sklearn.cross_validation import cross_val_score
cross_val_score(classifier, X, y)
Ek soru: 7. adımı yuvalanmış çapraz doğrulama ile değiştirmek mantıklı mı? Veya iç içe geçmiş cv adım 7'yi tamamlayıcı olarak görülmeli
(Kod, scikit-learn'da k-fold cross validasyon ile çalışıyor gibi görünüyor, fakat karıştır ve bölmeyle cv
çalışmıyor. Kodun çalışması için yukarıda değiştirilmesi gerekiyor)
8. Tüm veri setinde son modeli eğitin
classifier.fit(X, y)
EDIT: Şimdi adım 7a'nın bu dizilimde pek bir anlam ifade etmediği cele'lerle hemfikirim. Yani bunu benimsemem.