Một chiến lược thích hợp để chia dữ liệu là gì?
Tôi yêu cầu phản hồi về phương pháp sau đây (không phải trên các thông số cá nhân như test_size
hay n_iter
, nhưng nếu tôi sử dụng X
, y
, X_train
, y_train
, X_test
, và y_test
một cách thích hợp và nếu chuỗi có ý nghĩa):
(mở rộng ví dụ này từ tài liệu tìm hiểu scikit)
1. Tải tập dữ liệu
from sklearn.datasets import load_digits
digits = load_digits()
X, y = digits.data, digits.target
2. Chia thành tập huấn luyện và kiểm tra (ví dụ: 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. Chọn công cụ ước tính
from sklearn.svm import SVC
estimator = SVC(kernel='linear')
4. Chọn trình lặp xác thực chéo
from sklearn.cross_validation import ShuffleSplit
cv = ShuffleSplit(X_train.shape[0], n_iter=10, test_size=0.2, random_state=0)
5. Điều chỉnh siêu âm
áp dụng trình lặp xác nhận chéo trên tập huấn luyện
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. Thuật toán gỡ lỗi với đường cong học tập
X_train
được chia ngẫu nhiên thành một khóa đào tạo và một bài kiểm tra 10 lần ( n_iter=10
). Mỗi điểm trên đường cong điểm số đào tạo là trung bình 10 điểm trong đó mô hình được đào tạo và đánh giá trên các ví dụ đào tạo i đầu tiên . Mỗi điểm trên đường cong điểm xác nhận chéo là trung bình 10 điểm trong đó mô hình được đào tạo trên các ví dụ đào tạo i đầu tiên và được đánh giá trên tất cả các ví dụ về tập kiểm tra.
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 () có thể được tìm thấy trong phiên bản dev hiện tại của scikit-learn (0.15-git).
7. Đánh giá cuối cùng về bộ thử nghiệm
classifier.score(X_test, y_test)
7a. Kiểm tra sự phù hợp quá mức trong lựa chọn mô hình với xác thực chéo lồng nhau (sử dụng toàn bộ tập dữ liệu)
from sklearn.cross_validation import cross_val_score
cross_val_score(classifier, X, y)
Câu hỏi bổ sung: Có ý nghĩa gì khi thay thế bước 7 bằng xác nhận chéo lồng nhau? Hoặc cv lồng nhau nên được xem là bổ sung cho bước 7
(mã dường như hoạt động với xác thực chéo k-gấp trong scikit-learn, nhưng không phải với shuffle & split. Vì vậy, cv
cần phải thay đổi ở trên để làm cho mã hoạt động)
8. Đào tạo mô hình cuối cùng trên toàn bộ dữ liệu
classifier.fit(X, y)
EDIT: Bây giờ tôi đồng ý với cbeleites rằng bước 7a không có ý nghĩa nhiều trong chuỗi này. Vì vậy, tôi sẽ không chấp nhận điều đó.