Hai độ chính xác mà tôi so sánh để xem liệu mô hình có quá mức hay không?
Bạn nên so sánh độ chính xác của đào tạo và kiểm tra để xác định sự phù hợp quá mức. Độ chính xác đào tạo cao hơn nhiều so với độ chính xác kiểm tra cho thấy sự phù hợp quá mức.
Ở đây, "độ chính xác" được sử dụng theo nghĩa rộng, nó có thể được thay thế bằng F1, AUC, lỗi (tăng trở nên giảm, cao hơn trở nên thấp hơn), v.v.
Tôi đề xuất các phần "Xu hướng và phương sai" và "Đường cong học tập" của " Học máy học tập - Andrew Ng ". Nó trình bày các âm mưu và diễn giải cho tất cả các trường hợp với một bài tường thuật rõ ràng.
Khi tôi chạy xác thực chéo 10 lần, tôi nhận được 10 độ chính xác mà tôi có thể lấy trung bình / trung bình. Tôi nên gọi điều này có nghĩa là độ chính xác xác nhận?
Không. Đó là [ước tính] độ chính xác kiểm tra.
Sự khác biệt giữa bộ xác thực và bộ kiểm tra (và độ chính xác tương ứng của chúng) là bộ xác thực được sử dụng để xây dựng / chọn một mô hình tốt hơn, nghĩa là nó ảnh hưởng đến mô hình cuối cùng. Tuy nhiên, vì CV 10 lần luôn kiểm tra một mô hình đã được xây dựng trên mức giữ 10% của nó và nó không được sử dụng ở đây để chọn giữa các mô hình, nên giữ 10% là một bộ kiểm tra không phải là bộ xác thực.
Sau đó, tôi kiểm tra mô hình trên 30% dữ liệu thử nghiệm và nhận Độ chính xác kiểm tra.
Nếu bạn không sử dụng K-Fold để chọn giữa nhiều kiểu máy, phần này không cần thiết, hãy chạy K-Fold trên 100% dữ liệu để có được độ chính xác kiểm tra. Mặt khác, bạn nên giữ bộ kiểm tra này, vì kết quả của K-Fold sẽ là độ chính xác xác nhận.
Trong trường hợp này, điều gì sẽ được đào tạo chính xác?
Từ mỗi 10 lần, bạn có thể nhận được độ chính xác kiểm tra trên 10% dữ liệu và độ chính xác đào tạo trên 90% dữ liệu. Trong python, phương pháp cross_val_score
chỉ tính toán độ chính xác kiểm tra. Đây là cách tính cả hai:
from sklearn import model_selection
from sklearn import datasets
from sklearn import svm
iris = datasets.load_iris()
clf = svm.SVC(kernel='linear', C=1)
scores = model_selection.cross_validate(clf, iris.data, iris.target, cv=5, return_train_score=True)
print('Train scores:')
print(scores['train_score'])
print('Test scores:')
print(scores['test_score'])
Đặt return_estimator = True
để có được các mô hình được đào tạo quá.
Thêm về bộ xác nhận
Bộ xác thực hiển thị trong hai trường hợp chung: (1) xây dựng mô hình và (2) chọn giữa nhiều mô hình,
Hai ví dụ để xây dựng mô hình: chúng tôi (a) dừng đào tạo mạng thần kinh hoặc (b) dừng cắt tỉa cây quyết định khi độ chính xác của mô hình trên bộ xác thực bắt đầu giảm. Sau đó, chúng tôi kiểm tra mô hình cuối cùng trên một bộ tổ chức, để có được độ chính xác kiểm tra.
Hai ví dụ để chọn giữa nhiều mô hình:
a. Chúng tôi thực hiện CV gấp K trên một mạng thần kinh có 3 lớp và một lớp có 5 lớp (để lấy các mô hình K cho mỗi mạng), sau đó chúng tôi chọn NN có độ chính xác cao nhất trung bình trên các mô hình K; giả sử NN 5 lớp. Cuối cùng, chúng tôi huấn luyện NN 5 lớp trên một chuyến tàu 80%, phân chia xác thực 20% cho các nếp gấp K kết hợp, và sau đó kiểm tra nó trên một bộ được tổ chức để có được độ chính xác kiểm tra.
b. Chúng tôi áp dụng hai mô hình cây quyết định và SVM đã được xây dựng trên một bộ xác thực, sau đó chúng tôi chọn mô hình có độ chính xác cao nhất. Cuối cùng, chúng tôi kiểm tra mô hình đã chọn trên một bộ tổ chức để có được độ chính xác kiểm tra.