Rừng ngẫu nhiên là quá mức?


19

Tôi đang thử nghiệm các khu rừng ngẫu nhiên với scikit-learn và tôi đang nhận được kết quả tuyệt vời của bộ huấn luyện của mình, nhưng kết quả tương đối kém trong bộ thử nghiệm của tôi ...

Đây là vấn đề (lấy cảm hứng từ bài xì phé) mà tôi đang cố gắng giải quyết: Đưa ra các thẻ lỗ của người chơi A, thẻ lỗ của người chơi B và một lá bài (3 lá bài), người chơi nào có ván bài tốt nhất? Về mặt toán học, đây là 14 đầu vào (7 thẻ - một cấp bậc và một phù hợp cho mỗi loại) và một đầu ra (0 hoặc 1).

Đây là một số kết quả của tôi cho đến nay:

Training set size: 600k, test set size: 120k, number of trees: 25
Success rate in training set: 99.975%
Success rate in testing set: 90.05%

Training set size: 400k, test set size: 80k, number of trees: 100
Success rate in training set: 100%
Success rate in testing set: 89.7%

Training set size: 600k, test set size: 120k, number of trees: 5
Success rate in training set: 98.685%
Success rate in testing set: 85.69%

Đây là mã có liên quan được sử dụng:

from sklearn.ensemble import RandomForestClassifier
Forest = RandomForestClassifier(n_estimators = 25) #n_estimator varies
Forest = Forest.fit(inputs[:trainingSetSize],outputs[:trainingSetSize])
trainingOutputs = Forest.predict(inputs[:trainingSetSize])
testOutputs = Forest.predict(inputs[trainingSetSize:])

Dường như bất kể số lượng cây được sử dụng là bao nhiêu , hiệu suất trên tập huấn luyện tốt hơn nhiều so với tập thử nghiệm, mặc dù tập huấn luyện tương đối lớn và số lượng tính năng khá nhỏ ...


2
Tôi không thấy khoảng một chục 'quay số' cho các khu rừng ngẫu nhiên ở đây. Xác nhận chéo? Linh mục Bayes? Bản chất của việc tái định hình? Tập huấn cho từng cây? Bao nhiêu phần trăm của tập hợp con cho mỗi cây? ... còn rất nhiều điều có thể được liệt kê, nhưng quan điểm của tôi là bạn có những yếu tố đầu vào khác để xem xét.
EngrStudent - Phục hồi Monica

1
Bạn có thể giải thích vấn đề cho những người không biết về poker .. có một phép tính dễ dàng cho điểm poker không? sau đó dễ hiểu hơn về việc có sử dụng RF không đúng cách hay không ... Tôi không biết poker, nhưng tôi nghi ngờ RF có lẽ là cách tiếp cận sai - cụ thể là bước đầu tiên IN RF là chỉ sử dụng một phần nhỏ của đầu vào, trong khi đó tôi thấy rằng không có cách nào để xây dựng một bộ phân loại tốt chỉ bằng một tập hợp con của các đầu vào - tất cả các đầu vào là bắt buộc.
seanv507

Câu trả lời:


45

Đây là một lỗi tân binh phổ biến khi sử dụng các mô hình RF (Tôi sẽ đưa tay lên làm thủ phạm trước đó). Khu rừng mà bạn xây dựng bằng cách sử dụng tập huấn luyện trong nhiều trường hợp sẽ phù hợp với dữ liệu đào tạo gần như hoàn hảo (như bạn đang tìm) khi được xem xét trong toàn bộ. Tuy nhiên, khi thuật toán xây dựng khu rừng, nó nhớ lỗi dự đoán ngoài túi (OOB), đây là dự đoán tốt nhất về lỗi tổng quát hóa.

Nếu bạn gửi dữ liệu huấn luyện trở lại phương pháp dự đoán (như bạn đang làm), bạn sẽ có được dự đoán gần như hoàn hảo này (rất lạc quan) thay vì lỗi OOB chính xác. Đừng làm điều này. Thay vào đó, đối tượng Forest được đào tạo nên đã ghi nhớ trong đó lỗi OOB. Tôi không quen với việc triển khai scikit-learn nhưng nhìn vào tài liệu ở đây có vẻ như bạn cần chỉ định oob_score=Truekhi gọi phương thức phù hợp, và sau đó lỗi tổng quát hóa sẽ được lưu trữ dưới dạngoob_score_trong đối tượng trả lại. Trong gói R "RandomForest", gọi phương thức dự đoán không có đối số trên đối tượng được trả về sẽ trả về dự đoán OOB trên tập huấn luyện. Điều đó cho phép bạn xác định lỗi bằng cách sử dụng một số biện pháp khác. Gửi tập huấn trở lại vào phương pháp dự đoán sẽ cho bạn một kết quả khác, vì điều đó sẽ sử dụng tất cả các cây. Tôi không biết nếu scikit-learnthực hiện sẽ làm điều này hay không.

Thật sai lầm khi gửi dữ liệu huấn luyện trở lại phương pháp dự đoán để kiểm tra độ chính xác. Đó là một lỗi rất phổ biến, vì vậy đừng lo lắng.


1
Cảm ơn! Tuy nhiên, tôi vẫn có một mối quan tâm: Với 400k ví dụ đào tạo và 50 cây, tôi đã nhận được 89,6% chính xác, trong khi với nhiều dữ liệu và gấp đôi số cây, tôi đã nhận được 89,7% chính xác ... Điều này cho thấy RF không tốt Phương pháp này? Trước đây tôi đã sử dụng mạng thần kinh MLP và đạt độ chính xác ~ 98,5% trên bộ thử nghiệm ...
Uwat

5
Điều đó là có thể, mặc dù có vẻ như bạn không sử dụng gần đủ cây. Điển hình là bạn cần hàng ngàn. Lưu ý rằng số lượng cây không phải là tham số được điều chỉnh trong thuật toán RF, nhiều hơn luôn luôn tốt hơn, nhưng một khi bạn đã 'đủ' (để xác định theo kinh nghiệm) thì lỗi OOB không cải thiện với nhiều cây hơn. Ngay cả đối với các tập dữ liệu đơn giản nhỏ, bất cứ thứ gì dưới 500 cây cũng không đủ.
Bogdanovist

1
Có một số lưu ý nhỏ để "nhiều hơn luôn luôn tốt hơn" cho số lượng cây, nhưng tôi hiểu rằng bạn cần ánh mắt của cây trước khi bạn bắt đầu thực hiện một cú đánh hiệu suất. Theo kinh nghiệm của tôi, càng nhiều cây bạn có tài nguyên CPU và sự kiên nhẫn để tạo ra thứ tốt hơn, mặc dù có lợi nhuận giảm dần sau khi các cao nguyên đường cong OBB (ntrees).
Bogdanovist

12

Tôi nghĩ rằng câu trả lời là tham số max_features: int, chuỗi hoặc Không, tham số tùy chọn (mặc định = tự động). về cơ bản cho vấn đề này, bạn nên đặt nó thành Không, để mỗi cây được xây dựng với tất cả các đầu vào, vì rõ ràng bạn không thể xây dựng một trình phân loại thích hợp chỉ bằng một phần nhỏ của thẻ (mặc định "tự động" đang chọn sqrt (nfeatures) đầu vào cho mỗi cây)


1
Điều đó là vậy đó! Độ chính xác 95% với 50 cây và 600k ví dụ đào tạo.
Uwat

2
Lưu ý rằng tại thời điểm này, bạn hầu như không sử dụng một khu rừng ngẫu nhiên, nhưng như các câu trả lời khác đã nêu, nó không phải là phân loại lý tưởng cho vấn đề chính xác này.
Richard Rast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.