Rừng ngẫu nhiên - Cách xử lý quá mức


41

Tôi có một nền tảng khoa học máy tính nhưng tôi đang cố gắng dạy cho mình khoa học dữ liệu bằng cách giải quyết các vấn đề trên internet.

Tôi đã làm việc về vấn đề này trong vài tuần qua (khoảng 900 hàng và 10 tính năng). Ban đầu tôi sử dụng hồi quy logistic nhưng bây giờ tôi đã chuyển sang rừng ngẫu nhiên. Khi tôi chạy mô hình rừng ngẫu nhiên trên dữ liệu đào tạo của mình, tôi nhận được giá trị thực sự cao cho auc (> 99%). Tuy nhiên, khi tôi chạy cùng một mô hình trên dữ liệu thử nghiệm thì kết quả không được tốt lắm (Độ chính xác xấp xỉ 77%). Điều này khiến tôi tin rằng tôi quá phù hợp với dữ liệu đào tạo.

Các thực hành tốt nhất liên quan đến việc ngăn chặn phù hợp trong rừng ngẫu nhiên là gì?

Tôi đang sử dụng r và rstudio làm môi trường phát triển của mình. Tôi đang sử dụng randomForestgói và đã chấp nhận mặc định cho tất cả các tham số


4
Breiman tuyên bố rằng RF không quá phù hợp. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Trên giả định rằng ông là đúng, có lẽ có một số loại mâu thuẫn giữa đào tạo và tập kiểm tra?
Phục hồi lại

RF thực hiện AVOIDS phù hợp với DỮ LIỆU KIỂM TRA nếu bạn tối ưu hóa tham số điều chỉnh
Cân bằng Brash

Tôi tìm thấy sampize một tham số điều chỉnh bỏ qua đầy đủ. stackoverflow.com/questions
432997134 / Mạnh

Câu trả lời:


30

kk{5,10}


1
Cảm ơn bạn. Có một số hướng dẫn cho thấy làm thế nào để tối ưu hóa các tham số này?
Abhi

Bạn sẽ cần phải đăng ký các khóa học trực tuyến của Stanford, khá đơn giản, nhưng đây là một video hướng dẫn để thực hiện nó trong R: class.stanford.edu/cifts/HumanitiesScience/StatLearning/ trộm
Brash Equilibrium

Nếu tôi hiểu điều này một cách chính xác, chúng tôi sử dụng xác thực chéo để xác định số lượng các tính năng đi vào mô hình rừng ngẫu nhiên trái ngược với số lượng các tính năng mà mô hình sẽ thử ở mỗi bước. Chính xác ?
Abhi

4
Tôi sẽ tranh luận với câu trả lời này: hai trong số các tính năng hấp dẫn của RF là rất khó để phù hợp với chúng và các tham số mặc định thường khá tốt. Câu trả lời này dường như ngụ ý rằng RF rất nhạy cảm với các mặc định hiếm khi xảy ra
charles

7
Theo kinh nghiệm, tôi không thấy khó khăn gì khi điều chỉnh rừng ngẫu nhiên, rừng ngẫu nhiên có hướng dẫn, rừng ngẫu nhiên thường xuyên hoặc rừng ngẫu nhiên được hướng dẫn thường xuyên. Chúng thường xuyên thực hiện rất tốt trong xác nhận chéo, nhưng kém khi được sử dụng với dữ liệu mới do quá khớp. Tôi tin rằng nó có liên quan đến loại hiện tượng được mô hình hóa. Đó không phải là vấn đề lớn khi mô hình hóa một quy trình cơ học, nhưng với một cái gì đó giống như mô hình hành vi, tôi nhận được kết quả ổn định hơn nhiều với hồi quy được chỉ định rõ.
Hack-R

33

Làm thế nào bạn nhận được 99% AUC trên dữ liệu đào tạo của bạn? Hãy lưu ý rằng có một sự khác biệt giữa

predict(model)

predict(model, newdata=train)

khi nhận được dự đoán cho tập dữ liệu đào tạo. Tùy chọn đầu tiên nhận được các dự đoán ngoài túi từ khu rừng ngẫu nhiên. Đây thường là những gì bạn muốn, khi so sánh các giá trị dự đoán với thực tế trên dữ liệu đào tạo.

Thứ hai xử lý dữ liệu đào tạo của bạn như thể nó là một bộ dữ liệu mới và chạy các quan sát xuống từng cây. Điều này sẽ dẫn đến một mối tương quan chặt chẽ giả tạo giữa các dự đoán và thực tế, vì thuật toán RF thường không cắt tỉa từng cây riêng lẻ, thay vào đó dựa vào tập hợp các cây để kiểm soát quá mức. Vì vậy, đừng làm điều này nếu bạn muốn có được dự đoán về dữ liệu đào tạo.


3
Tôi đã sử dụng dự đoán (mô hình, dữ liệu = xe lửa). Bây giờ tôi đã chuyển sang dự đoán (mô hình) và auc của tôi đã giảm xuống còn 87%. Đây là điều tốt hay điều xấu?
Abhi

2
Cảm ơn bạn! Tôi thấy rằng đây cũng là vấn đề đối với tôi. Tôi đã đăng một câu hỏi tiếp theo về biện pháp nào để sử dụng như 'lỗi đào tạo' cho các mô hình RF tại đây: stats.stackexchange.com/questions/162353/ Lỗi
Berk U.

Tuyệt vời cảm ơn bạn!! Tôi đã làm sai lầm này quá! Đối với @Abhi: đó là một điều tốt, bởi vì AUC trước đó rất cao. Điều này là thực tế hơn. Hãy thử xác nhận chéo và đo AUC về điều đó và bạn có thể sẽ thấy giá trị tương tự.
Tò mò

7

Đối với cây quyết định, có hai cách xử lý quá mức: (a) không trồng cây toàn bộ (b) cắt tỉa

Điều tương tự cũng áp dụng cho một rừng cây - đừng trồng chúng quá nhiều và cắt tỉa.

Tôi không sử dụng randomForestnhiều, nhưng theo hiểu biết của tôi, có một số tham số mà bạn có thể sử dụng để điều chỉnh các khu rừng của mình:

  • nodesize - kích thước tối thiểu của các nút thiết bị đầu cuối
  • maxnodes - số lượng nút thiết bị đầu cuối tối đa
  • mtry - số lượng biến được sử dụng để xây dựng mỗi cây (cảm ơn @ user777)

1
mtry, số lượng biến mà thuật toán vẽ để xây dựng mỗi cây, theo mặc định là căn bậc hai của tổng số tính năng.
Phục hồi lại

Thay vào đó, tôi sẽ để lại maxnodes và sampize thấp hơn. Cả maxnode và sampize đều cung cấp cho các cây có độ sâu ít hơn và rừng mạnh hơn, sampize tuy nhiên tương quan cây thấp hơn và rừng có thể sẽ hội tụ để giảm lỗi dự đoán được xác thực chéo, xem stackoverflow.com/questions
432997134 / điều

2

Bạn có thể muốn sử dụng các phương thức xác thực chéo, chẳng hạn như xác thực chéo K lần.


Bạn cần bình thường hóa / quy mô các tính năng?
charles

4
@ xin lỗi tôi. Thực sự không cần thiết phải mở rộng các tính năng trong việc sử dụng các khu rừng ngẫu nhiên. Xem: stackoverflow.com/questions/8961586/
Mạnh

Tôi nghĩ rằng xác nhận chéo sẽ hữu ích. Đây là một bộ dữ liệu tương đối nhỏ với xác thực mẫu phân tách có khả năng tạo ra các ước tính lỗi không ổn định (mặc dù tôi thừa nhận rằng đây không phải là vấn đề ở đây)
charles

1

bạn có thể điều chỉnh các tham số của mình bằng cách sử dụng gridsearch

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)

Một trình soạn thảo đã cố gắng gợi ý rằng mô-đun GridSearchCVđược gọi model_selection, và do đó, dòng mã thứ hai sẽ là from sklearn.model_selection import GridSearchCV.
gung - Phục hồi Monica

0

Cố gắng điều chỉnh tham số max_depth trong phạm vi [5, 15] nhưng không nhiều hơn mức này vì nếu bạn lấy độ sâu lớn sẽ có cơ hội vượt quá cao.

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.