डेटासेट को विभाजित करने के लिए एक उपयुक्त रणनीति क्या है?
मैं निम्नलिखित दृष्टिकोण पर प्रतिक्रिया के लिए पूछना (जैसे व्यक्तिगत मानकों के आधार पर नहीं test_size
या n_iter
, लेकिन अगर मैं इस्तेमाल किया X
, y
, X_train
, y_train
, X_test
, और y_test
उचित रूप से और अनुक्रम समझ में आता है तो):
( इस उदाहरण को विस्तार से जानें- डॉक्यूमेंटेशन से)
1. डेटासेट लोड करें
from sklearn.datasets import load_digits
digits = load_digits()
X, y = digits.data, digits.target
2. प्रशिक्षण और परीक्षण सेट में विभाजित (जैसे, 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. आकलनकर्ता चुनें
from sklearn.svm import SVC
estimator = SVC(kernel='linear')
4. क्रॉस-वेलिडेशन इटरेटर चुनें
from sklearn.cross_validation import ShuffleSplit
cv = ShuffleSplit(X_train.shape[0], n_iter=10, test_size=0.2, random_state=0)
5. हाइपरपामेटर्स को ट्यून करें
प्रशिक्षण सेट पर क्रॉस-सत्यापन पुनरावृत्ति को लागू करना
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. सीखने की अवस्था के साथ डीबग एल्गोरिथ्म
X_train
बेतरतीब ढंग से एक प्रशिक्षण और 10 बार ( n_iter=10
) सेट एक परीक्षण में विभाजित है । प्रशिक्षण-स्कोर वक्र पर प्रत्येक बिंदु 10 अंकों का औसत है जहां मॉडल को पहले i प्रशिक्षण उदाहरणों पर प्रशिक्षित और मूल्यांकन किया गया था । क्रॉस-वेलिडेशन स्कोर वक्र पर प्रत्येक बिंदु 10 स्कोर का औसत है जहां मॉडल को पहले i प्रशिक्षण उदाहरणों पर प्रशिक्षित किया गया था और परीक्षण सेट के सभी उदाहरणों पर मूल्यांकन किया गया था।
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()
प्लॉट_learning_curve () scikit-learn (0.15-git) के वर्तमान देव संस्करण में पाया जा सकता है।
7. परीक्षण सेट पर अंतिम मूल्यांकन
classifier.score(X_test, y_test)
7a। नेस्टेड क्रॉस-वेलिडेशन (संपूर्ण डेटासेट का उपयोग करके) के साथ मॉडल चयन में टेस्ट-फिटिंग
from sklearn.cross_validation import cross_val_score
cross_val_score(classifier, X, y)
अतिरिक्त प्रश्न: क्या यह नेस्टेड क्रॉस-वैलिडेशन द्वारा चरण 7 को बदलने के लिए समझ में आता है? या नेस्टेड केवी को चरण 7 के पूरक के रूप में देखा जाना चाहिए
(कोड को स्किट-लर्न में k- गुना क्रॉस सत्यापन के साथ काम करना लगता है, लेकिन फेरबदल और विभाजन के साथ नहीं। इसलिए cv
कोड को काम करने के लिए ऊपर बदलने की आवश्यकता है)
8. संपूर्ण डेटासेट पर ट्रेन का अंतिम मॉडल
classifier.fit(X, y)
संपादित करें: मैं अब cbeleites से सहमत हूं कि चरण 7a इस क्रम में बहुत मायने नहीं रखता है। इसलिए मैं इसे नहीं अपनाऊंगा।