2013-07-04 39 views
5

Tôi có một tập dữ liệu lớn với hơn 250.000 quan sát và tôi muốn sử dụng gói TraMineR để phân tích. Đặc biệt, tôi muốn sử dụng các lệnh seqtreeseqdist, hoạt động tốt khi tôi ví dụ sử dụng mẫu phụ có 10.000 quan sát. Giới hạn máy tính của tôi có thể quản lý là khoảng 20.000 quan sát.Tính toán song song cho TraMineR

Tôi muốn sử dụng tất cả các quan sát và tôi có quyền truy cập vào một siêu máy tính có thể thực hiện điều đó. Tuy nhiên, điều này không giúp ích nhiều cho quá trình chạy trên một lõi đơn. Vì vậy, câu hỏi của tôi, là nó có thể áp dụng kỹ thuật tính toán song song với các lệnh được đề cập ở trên? Hay có cách nào khác để tăng tốc quá trình này? Bất kỳ trợ giúp sẽ được đánh giá cao!

+3

Ba câu trả lời sau có giúp ích không? http://stackoverflow.com/questions/17085780/how-to-use-discrepancy-analysis-with-traminer-and-aggregated-sequence-data và http://stackoverflow.com/questions/15929936/problem-with- dữ liệu lớn trong quá trình tính toán-of-sequence-distance-using-tramine và http://stats.stackexchange.com/questions/43540/how-to-randomly-select-5-of-the-sample –

+0

Kính gửi Matthias , cảm ơn câu trả lời của bạn. Tôi đã sử dụng quy trình mẫu được mô tả trong các liên kết của bạn. Những gì tôi thực sự tìm kiếm là một cách để sử dụng nhiều lõi để tăng tốc độ tính toán khoảng cách để áp dụng nó cho toàn bộ tập dữ liệu trên siêu máy tính. Tôi đã xem xét một số gói cho phép bạn thực hiện điều đó, nhưng chúng không hoạt động với TraMineR. Nhưng tôi đoán chạy nhiều subsamples là tốt là tốt. Cảm ơn một lần nữa. – Flow

+1

Các giải pháp mà tôi đã đề xuất là: tập hợp chuỗi giống nhau, sử dụng 'seqdist (method =" OMopt ")', thay đổi độ chi tiết thời gian (xem tại đây: http://stats.stackexchange.com/questions/43601/modifying-the-time -granularity-of-a-state-sequence) để có các chuỗi giống hệt nhau hơn. Bạn đang đối mặt với giới hạn nào? Thời gian CPU hoặc giới hạn bộ nhớ? –

Trả lời

5

Hàm nội bộ seqdist được viết bằng C++ và có nhiều tối ưu hóa. Vì lý do này, nếu bạn muốn song song với seqdist, bạn cần thực hiện nó trong C++. Vòng lặp nằm trong tệp nguồn "distancefunctions.cpp" và bạn cần phải xem xét hai vòng nằm xung quanh dòng 300 trong hàm "cstringdistance" (Xin lỗi nhưng tất cả các nhận xét đều bằng tiếng Pháp). Thật không may, tối ưu hóa quan trọng thứ hai là bộ nhớ được chia sẻ giữa tất cả các tính toán. Vì lý do này, tôi nghĩ rằng sự song song sẽ rất phức tạp.

Ngoài việc lựa chọn một mẫu, bạn nên xem xét tối ưu hóa sau đây:

  • tập hợp của các chuỗi giống hệt nhau (xem ở đây: Problem with big data (?) during computation of sequence distances using TraMineR)
  • Nếu thích hợp, bạn có thể cố gắng giảm bớt các chi tiết thời gian. Khoảng cách tính toán khoảng cách phụ thuộc nhiều vào độ dài chuỗi (O^2). Xem https://stats.stackexchange.com/questions/43601/modifying-the-time-granularity-of-a-state-sequence
  • Giảm chi tiết thời gian cũng có thể làm tăng số lượng trình tự giống nhau và do đó, tác động của tối ưu hóa một.
  • Có một tùy chọn ẩn trong seqdist để sử dụng phiên bản được tối ưu hóa của thuật toán kết hợp tối ưu. Nó vẫn còn trong giai đoạn thử nghiệm (đó là lý do tại sao nó được ẩn), nhưng nó sẽ thay thế các thuật toán thực tế trong một phiên bản trong tương lai. Để sử dụng nó, hãy đặt method="OMopt", thay vì method="OM". Tùy thuộc vào trình tự của bạn, nó có thể làm giảm thời gian tính toán.
+0

Cảm ơn bạn rất nhiều, điều đó giúp ích rất nhiều! Tôi sẽ chỉ dựa vào các kỹ thuật subsampling sau đó. – Flow