Tối ưu hóa triển khai thuật toán Rừng ngẫu nhiên


44

Tôi đã nhận thấy rằng có một vài triển khai của rừng ngẫu nhiên như ALGLIB, Bánh quế và một số gói R như thế nào randomForest. Ai đó có thể cho tôi biết liệu các thư viện này được tối ưu hóa cao? Về cơ bản chúng có tương đương với các khu rừng ngẫu nhiên như chi tiết trong Các yếu tố của học thống kê hay có rất nhiều thủ thuật bổ sung đã được thêm vào không?

Tôi hy vọng câu hỏi này là đủ cụ thể. Như một minh họa cho loại câu trả lời mà tôi đang tìm kiếm, nếu ai đó hỏi tôi liệu gói đại số tuyến tính BLAS có được tối ưu hóa cao hay không, tôi sẽ nói rằng nó được tối ưu hóa cực kỳ cao và hầu như không đáng để cố gắng cải thiện ngoại trừ trong các ứng dụng rất chuyên biệt.


Random Jungle có thể chạy trên nhiều máy chủ theo cách song song. Xem: Schwarz, et al (2010). Trên safari to Random Jungle: triển khai nhanh Rừng ngẫu nhiên cho dữ liệu chiều cao. Tin sinh học, 26 , 14, trang 1752 Hay8, doi.org/10.1093/bioinformatics/btq257 . mã: 1 ; 2 ; 3 ; 4 .
Người dùng128525

Câu trả lời:


31

(Cập nhật 6 IX 2015 với các đề xuất từ ​​ý kiến, cũng được thực hiện CW)

Có hai gói mới, đẹp dành cho R được tối ưu hóa khá tốt cho một số điều kiện nhất định:

  • ranger - Gói C ++, R, được tối ưu hóa cho các sự cố , song song, xử lý đặc biệt dữ liệu GWAS.p>>n
  • Arborist - C ++, R và Python bindings, tối ưu hóa cho mô lớn vấn đề, rõ ràng kế hoạch cho GPGPU.n

Các triển khai RF khác:

  • The Original One - mã Fortran độc lập, không song song, khá khó sử dụng.
  • RandomForest - Gói C, R, có lẽ là phổ biến nhất, không song song, thực sự khá nhanh khi so sánh trên cơ sở tốc độ lõi đơn, đặc biệt là đối với dữ liệu nhỏ.
  • RandomForestSRC - Gói C, R, bản sao của RandomForest hỗ trợ các vấn đề xử lý và tồn tại song song.
  • nhóm - Gói C, R, khá chậm, nhưng được thiết kế như một mặt phẳng để thử nghiệm với RF.
  • bigrf - Gói C + / R, R, được xây dựng để hoạt động trên dữ liệu lớn trong khuôn khổ bigmemory ; khá xa để được hoàn thành.
  • scikit learn Consemble Forest - Python, một phần của khung scikit-learn, song song, thực hiện nhiều biến thể của RF.
  • sữa 's RF - Python, một phần của khuôn khổ sữa.
  • Bánh quế - C ++, một phần của bộ công cụ ML lớn hơn, song song và khá nhanh.
  • cái gọi là WEKA rf - Java / WEKA, song song.
  • ALGLIB
  • Jungle ngẫu nhiên - bị bỏ rơi?
  • rt-rank - bị bỏ rơi?
  • PARF - bị bỏ rơi?

Giấy Ranger có một số so sánh tốc độ / bộ nhớ, nhưng không có điểm chuẩn kỹ lưỡng.


6
Giờ đây, người ta có thể thêm sklearn.ensemble từ hộp công cụ Python scikit-learn.
chl

1
Sữa trong Python cũng có triển khai Rừng ngẫu nhiên.
JEquihua

3
Random Jungle đã được thay thế bởi Ranger. Tôi đã thử R ver (có một ver C ++ khác) và nó nhanh hơn đáng kể so với RandomForest (mặc dù tôi không có thời gian). Tác giả đã thực hiện một số thử nghiệm trong một bài báo riêng ( arxiv.org/abs/1508.04409 ).
NoviceProg

11

Theo tôi biết, phiên bản R của RandomForest gọi mã Fortran giống như phiên bản gốc. Hơn nữa, việc song song hóa hàm RandomForest là chuyện nhỏ. Đây thực sự là một trong những ví dụ được cung cấp trong tài liệu foreach .

library(foreach)
library(randomForest)
rf <- foreach(ntree = rep(250, 4), .combine = combine, .packages = "randomForest") %dopar% 
randomForest(x, y, ntree = ntree)

Cho rằng các khu rừng ngẫu nhiên song song lúng túng, tối ưu hóa lớn nhất bạn có thể thực hiện là chạy chúng song song. Sau đó, tôi không nghĩ rằng có bất kỳ loại trái cây treo thấp nào khác trong thuật toán, nhưng tôi có thể sai.

Vấn đề duy nhất là bạn mất ước tính lỗi ngoài túi trong khu rừng kết hợp, nhưng có lẽ có một cách đơn giản để tính toán (tôi thực sự muốn tìm hiểu cách thực hiện việc này).


7

Các ELSII sử dụng randomForest (xem ví dụ, chú thích 3 p.591), đó là một thực hiện R của Breiman và Cutler của mã Fortran từ Salford. Mã của Andy Liaw là C.

Có một triển khai RF khác được đề xuất trong gói bên (trong C), dựa trên R / Lapack, có một số phụ thuộc vào BLAS (xem /include/R_ext/Lapack.htrong thư mục R cơ sở của bạn).

Liên quan đến việc đóng bao, không quá khó để song song hóa nó, nhưng tôi sẽ để người dùng chuyên biệt hơn trả lời về khía cạnh này.


5

Nhóm đằng sau RandomJungle tuyên bố rằng đó là một trật tự có cường độ nhanh hơn so với triển khai R RandomForest và sử dụng bộ nhớ có cường độ nhỏ hơn theo thứ tự. Một gói cho RandomJungle đang được phát triển cho R nhưng tôi chưa thể xây dựng được.

https://r-forge.r-project.org/projects/rjungler/


Không chắc điều này có còn được bạn quan tâm sau 4 năm hay không, nhưng tác giả của RandomJungle đã thay thế nó bằng Ranger. Tôi đã thử R ver và nó thực sự nhanh hơn đáng kể so với RandomForest với một số dữ liệu mẫu (mặc dù tôi không có thời gian).
NoviceProg

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.