Tôi có bộ dữ liệu gồm 140000 ví dụ và 30 tính năng mà tôi đang đào tạo một số phân loại để phân loại nhị phân (SVM, Hồi quy logistic, Rừng ngẫu nhiên, v.v.)
Trong nhiều trường hợp, việc điều chỉnh siêu tham số trên toàn bộ tập dữ liệu bằng cách sử dụng Tìm kiếm lưới hoặc Ngẫu nhiên là quá tốn thời gian.
Tôi bắt đầu sử dụng kỹ thuật sau
- Mẫu phụ dữ liệu của tôi
- Sử dụng phân số thu được để điều chỉnh các siêu đường kính trên
- Sử dụng các tham số thu được để huấn luyện một mô hình bằng cách sử dụng toàn bộ dữ liệu
Để đánh giá từng bộ thông số ở bước thứ hai, tôi sử dụng sklearn
's GridSearchCV
với cv = 10. Để đánh giá mô hình cuối cùng mà tôi có thể tạo trong bước thứ ba tôi sử dụng sklearn
's cross_val_predict
. Theo nghĩa đó, tôi đánh giá các mô hình của mình để lại 10% phần trăm dữ liệu, tôi huấn luyện phần còn lại và đo lường độ chính xác dự đoán trên 10%, lặp lại 10 lần, sau đó lấy điểm trung bình.
Điều khiến tôi lo lắng là độ chính xác dự đoán mà tôi có được từ việc đào tạo trên toàn bộ tập dữ liệu của mình, thực sự gần với đánh giá tôi nhận được khi điều chỉnh các tham số cho bộ thông số tốt nhất (mỗi bộ tham số được kiểm tra đưa ra điểm số đạt được từ trung bình 10- kết quả xác nhận chéo chéo).
Hầu hết các lần độ chính xác cross_val_predict
được đo bằng cách sử dụng tất cả các ví dụ đào tạo (toàn bộ dữ liệu) cao hơn một chút so với đánh giá của các tham số tốt nhất được trả về.
Để minh họa điều này ở đây là việc đánh giá một tập hợp các tham số (trên một tập dữ liệu nhỏ hơn so với những gì tôi đã mô tả ở trên nhưng hiệu quả là như nhau)
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}
...
Và đây là điểm trung bình (từ cross_val_predict
) tôi có được từ việc đào tạo trên toàn bộ tập dữ liệu của mình bằng các tham số tốt nhất
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]]
Như bạn có thể thấy đào tạo trên toàn bộ dữ liệu cải thiện kết quả. Tôi cũng đã xác nhận rằng mô hình được điều chỉnh kém (ví dụ: sử dụng các giá trị mặc định hoặc giá trị ngẫu nhiên cho C
và gamma
) dẫn đến độ chính xác dự đoán tồi tệ hơn nhiều.
Nhìn chung, tôi nghĩ rằng việc điều chỉnh các siêu âm trên một tập hợp con là không lý tưởng nhưng có khả năng dẫn đến kết quả tương đối tốt mà không phải chờ quá lâu. Tôi lấy ví dụ trước khi sử dụng phương pháp đó đã sử dụng optunity
gói để điều chỉnh siêu tham số trên toàn bộ tập dữ liệu. Quy trình này sẽ mất 3-5 ngày để hoàn thành và sẽ tạo ra kết quả có độ chính xác thực sự tốt hoặc thu hồi thực sự tốt nhưng không phải cả hai, vì vậy mặc dù đối với mỗi lớp, độ chính xác hoặc độ thu hồi thực sự cao (cao hơn bất kỳ loại nào khác của tôi phân loại đã đạt được) bệnh sởi F1 rất thấp. Ngược lại, sử dụng cách tiếp cận sau này dẫn đến một số giờ đào tạo và bệnh sởi F1 tốt hơn.
Mối quan tâm của tôi là:
Tôi có giới hạn độ chính xác phân loại của tôi? Tôi có tránh sử dụng tất cả sức mạnh dự đoán mà tập dữ liệu của tôi có thể cung cấp bằng cách chỉ điều chỉnh trên một tập hợp con không? Nếu một tác hại như vậy của hiệu suất đang xảy ra thì có phải do một số yếu tố bị hạn chế?