Tối ưu thuật toán apriori tìm luật kết hợp (Data mining)

Hiện tại em đang phải implement thuật toán Apriori bằng java để tìm luật kết hợp trong khai phá giỏ hàng. Không biết đã có anh chị nào từng làm qua chưa ?

Code của em hiện tại không thể chạy được với lượng data có nhiều trường dữ liệu(105 trường). Chạy với tập dữ liệu có ít trường vd 6 trường nhưng 5000 dòng thì vẫn thoải mái.

Vấn đề là có vẻ trong khi sinh ra luật kết hợp từ tập phổ biến vd: ABDE thì ta có các luật A->BDE, AB->DE, ABD->E …(2^4-2 luật cần xét) dẫn tới khi có 105 trường dữ liệu thì bị tràn bộ nhớ. Em đã thử chat gpt, google nhưng vẫn chưa tối ưu được. Anh chị có thể cho e xin 1 vài keyword để tối ưu thuật toán apriori được không ạ ? Em cảm ơn!

Đây là link bài toán nhỏ giải bằng tay: Tìm luật kết hợp & tập phổ biến (Giải tay)

Nếu vấn đề là OOM thì bạn cần phải xem lại thật sự bạn có cần tất cả dữ liệu ở trên RAM hay không. Việc sinh các tập con này thì dữ liệu cấp số mũ là đúng rồi, nên bây giờ chỉ phải xem xét cái nào cần tính toán liền thì cho lên RAM, cái nào không cần thì có thể cho vào DB hay gì đó lưu lại dùng sau. Việc tính toán có thể dùng Hadoop Map-Reduce hoặc hash table của các NoSQL thông dụng như Redis hay DynamoDB…

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?