2012-06-15 27 views
36

Có vẻ như R thực sự được thiết kế để xử lý các tập dữ liệu mà nó có thể kéo hoàn toàn vào bộ nhớ. Gói R nào được khuyến khích để xử lý tín hiệu và học máy trên các tập dữ liệu rất lớn mà không thể được đưa vào bộ nhớ?Gói khuyến nghị để xử lý tập dữ liệu rất lớn và học máy trong R

Nếu R chỉ đơn giản là một cách sai lầm để làm điều này, tôi mở để gợi ý miễn phí mạnh mẽ khác (ví dụ scipy nếu có một số cách tốt đẹp để xử lý các tập dữ liệu rất lớn)

+10

Hãy xem phần phụ "Dữ liệu bộ nhớ lớn và dữ liệu ngoài bộ nhớ" của [xem nhiệm vụ tính toán hiệu năng cao] (http://cran.r-project.org/web/views/HighPerformanceComputing.html) trên CRAN. [bigmemory] (http://cran.r-project.org/web/packages/bigmemory/index.html) và [ff] (http://cran.r-project.org/web/packages/ff/index .html) là hai gói phổ biến. Ngoài ra, hãy xem xét lưu trữ dữ liệu trong cơ sở dữ liệu và đọc theo các lô nhỏ hơn để phân tích. – jthetzel

Trả lời

28

Hãy xem phần phụ "Bộ nhớ lớn và dữ liệu ngoài bộ nhớ" của high performance computing task view trên CRAN. bigmemoryff là hai gói phổ biến. Đối với bigmemory (và có liên quan biganalyticsbigtabulate), bigmemory website có một số bản trình bày rất hay, họa tiết và bản tóm tắt từ Jay Emerson. Đối với ff, tôi khuyên bạn nên đọc Adler Oehlschlägel và các bài thuyết trình slide xuất sắc của các đồng nghiệp trên ff website.

Ngoài ra, hãy xem xét lưu trữ dữ liệu trong cơ sở dữ liệu và đọc theo các lô nhỏ hơn để phân tích. Có thể có nhiều cách tiếp cận để xem xét.Để bắt đầu, consdier xem xét một số ví dụ trong gói biglm, cũng như this presentation từ Thomas Lumley.

Và thực hiện điều tra các gói khác trên chế độ xem nhiệm vụ tính toán hiệu năng cao và được đề cập trong các câu trả lời khác. Các gói tôi đề cập ở trên chỉ đơn giản là những cái tôi đã xảy ra để có nhiều kinh nghiệm hơn.

+1

Đã kết thúc bằng BigMemory và nói chung khá hài lòng với nó. –

+1

Nhưng với ff, bigmemory hoặc cơ sở dữ liệu ... bạn có thể thực hiện bất kỳ hoạt động nào được cung cấp bởi R hoặc bất kỳ gói nào trực tiếp không? Hoặc bạn chỉ có thể chạy các chức năng mà ff, bigmemory hoặc cơ sở dữ liệu đã thực hiện? (mà không cần phải phá vỡ dữ liệu trên miếng nhỏ). Ví dụ: tôi muốn chạy hồi quy trên tệp số 50GB hoặc tính trung bình. Hoặc tôi muốn áp dụng DBScan, hoặc chỉ muốn tạo một véc tơ khác trong đó mỗi phần tử được biểu diễn dưới dạng một số phép toán với các phần tử cũ BB [i] = AA [i] * AA [i-1] + AA [i-2]. Tôi có thể làm điều này với R và ff, bigmemory hoặc bất kỳ kết nối cơ sở dữ liệu? – skan

8

Tôi nghĩ rằng số lượng dữ liệu bạn có thể quá trình bị giới hạn bởi những kỹ năng lập trình hơn bất kỳ thứ gì khác. Mặc dù rất nhiều chức năng tiêu chuẩn được tập trung vào trong phân tích bộ nhớ, việc cắt dữ liệu của bạn thành nhiều phần đã giúp ích rất nhiều. Ofcourse, điều này mất nhiều thời gian để chương trình hơn chọn lên mã R tiêu chuẩn, nhưng thường lần nó là khá tốt.

Cắt dữ liệu có thể cho cũ được thực hiện bằng cách sử dụng read.table hoặc readBin chỉ hỗ trợ đọc một tập con của dữ liệu. Ngoài ra, bạn có thể xem giao diện nhiệm vụ tính toán hiệu suất cao cho các gói phân phối ra khỏi hộp ra khỏi chức năng bộ nhớ. Bạn cũng có thể đặt dữ liệu của mình vào cơ sở dữ liệu. Đối với dữ liệu không gian raster, gói raster tuyệt vời cung cấp khả năng phân tích bộ nhớ.

8

Đối với tác vụ học máy, tôi có thể khuyên bạn sử dụng gói biglm, được sử dụng để thực hiện "Phục hồi dữ liệu quá lớn để vừa với bộ nhớ". Để sử dụng R với dữ liệu thực sự lớn, người ta có thể sử dụng Hadoop làm phụ trợ và sau đó sử dụng gói rmr để thực hiện phân tích thống kê (hoặc khác) thông qua MapReduce trên cụm Hadoop.

7

Tất cả phụ thuộc vào thuật toán bạn cần. Nếu chúng có thể được dịch sang dạng số gia tăng (khi chỉ cần một phần nhỏ dữ liệu tại bất kỳ thời điểm nào, ví dụ như Naive Bayes, bạn có thể lưu giữ trong bộ nhớ chỉ mô hình và quan sát hiện tại đang được xử lý), thì đề xuất tốt nhất là thực hiện việc học máy từng bước, đọc các lô dữ liệu mới từ đĩa.

Tuy nhiên, nhiều thuật toán và đặc biệt là các thuật toán của chúng thực sự yêu cầu toàn bộ tập dữ liệu. Nếu kích thước của tập dữ liệu phù hợp với bạn (và giới hạn hệ thống tệp), bạn có thể sử dụng gói mmap cho phép ánh xạ tệp trên đĩa vào bộ nhớ và sử dụng nó trong chương trình. Tuy nhiên, lưu ý rằng đọc-ghi vào đĩa là tốn kém, và R đôi khi thích di chuyển dữ liệu qua lại thường xuyên. Vì vậy hãy cẩn thận.

Nếu dữ liệu của bạn không thể được lưu trữ ngay cả trên ổ đĩa cứng, bạn sẽ cần phải sử dụng các hệ thống học tập máy phân tán. Một hệ thống dựa trên R như vậy là Revolution R được thiết kế để handle các tập dữ liệu thực sự lớn. Thật không may, nó không phải là nguồn mở và chi phí khá nhiều tiền, nhưng bạn có thể cố gắng để có được free academic license. Thay vào đó, bạn có thể quan tâm đến Java dựa trên Apache Mahout - giải pháp không thanh lịch, nhưng rất hiệu quả, dựa trên Hadoop và bao gồm nhiều thuật toán quan trọng.

+1

Với Revolution R, bạn có thể áp dụng một số chức năng trên các tập dữ liệu lớn, nhưng chỉ có các chức năng được thực hiện trên gói Revoscaler. Bạn không có cách chung để sử dụng bất kỳ hàm R hoặc gói nào trên các tập dữ liệu lớn. Ví dụ nếu bạn muốn chạy một nhóm DBSCAN, bạn sẽ cần phải viết lại toàn bộ phương thức với các hàm cơ bản được cung cấp bởi revoscaler (hoặc các gói tương tự). – skan

3

Nếu bộ nhớ không đủ, một giải pháp là đẩy dữ liệu vào đĩa và sử dụng tính toán phân tán. Tôi nghĩ RHadoop (R + Hadoop) có thể là một trong những giải pháp để giải quyết với số liệu lớn.

Các vấn đề liên quan