FPGrowth có còn được coi là trạng thái của nghệ thuật trong việc khai thác mô hình thường xuyên không?


12

Theo như tôi biết về sự phát triển của các thuật toán để giải quyết vấn đề Khai thác mẫu thường xuyên (FPM), con đường cải tiến có một số điểm kiểm tra chính. Đầu tiên, thuật toán Apriori được đề xuất vào năm 1993, bởi Agrawal et al. , cùng với việc chính thức hóa vấn đề. Thuật toán có thể loại bỏ một số bộ khỏi 2^n - 1bộ (powerset) bằng cách sử dụng một mạng tinh thể để duy trì dữ liệu. Một nhược điểm của phương pháp này là cần phải đọc lại cơ sở dữ liệu để tính tần số của mỗi bộ được mở rộng.

Sau đó, vào năm 1997, Zaki et al. đề xuất thuật toán Eclat , trong đó chèn tần số kết quả của mỗi bộ bên trong mạng. Điều này được thực hiện bằng cách thêm vào, tại mỗi nút của mạng, tập hợp các id giao dịch có các mục từ gốc đến nút được đề cập. Đóng góp chính là người ta không phải đọc lại toàn bộ tập dữ liệu để biết tần số của từng bộ, nhưng bộ nhớ cần thiết để giữ cấu trúc dữ liệu đó được xây dựng có thể vượt quá kích thước của chính tập dữ liệu.

Năm 2000, Han et al. đề xuất một thuật toán có tên FPGrowth , cùng với cấu trúc dữ liệu cây tiền tố có tên là FPTree. Thuật toán có thể cung cấp khả năng nén dữ liệu đáng kể, đồng thời cho rằng chỉ có các mục thường xuyên mới được tạo ra (không có tạo mục ứng viên). Điều này được thực hiện chủ yếu bằng cách sắp xếp các mục của từng giao dịch theo thứ tự giảm dần, sao cho các mục thường xuyên nhất là các mục có ít sự lặp lại nhất trong cấu trúc dữ liệu cây. Do tần số chỉ giảm trong khi đi ngang qua cây sâu, thuật toán có thể loại bỏ các mục không thường xuyên.

Chỉnh sửa :

Theo tôi biết, đây có thể được coi là một thuật toán tiên tiến, nhưng tôi muốn biết về các giải pháp được đề xuất khác. Những thuật toán nào khác cho FPM được coi là "tiên tiến nhất"? Là gì trực giác / chính-sự đóng góp của các thuật toán như vậy?

Thuật toán FPGrowth vẫn được coi là "trạng thái của nghệ thuật" trong khai thác mẫu thường xuyên? Nếu không, thuật toán nào có thể trích xuất các mục thường xuyên từ các bộ dữ liệu lớn hiệu quả hơn?


Bài này đã được nghiên cứu và trình bày tốt. Nó làm cho một câu hỏi kém cho một trang web mạng SE nhưng nó sẽ là một chủ đề tuyệt vời để bắt đầu trên một diễn đàn thảo luận.
Không khí

@AirThomas Cảm ơn bạn đã cảnh báo. Tôi đã cố gắng lưu bài viết bằng cách đưa ra một câu hỏi thích hợp từ nó.
Rubens

Câu trả lời:


9

Nhà nước của nghệ thuật như trong: được sử dụng trong thực tế hoặc làm việc trên lý thuyết?

APRIORI được sử dụng ở mọi nơi, ngoại trừ trong việc phát triển các thuật toán tập hợp vật phẩm mới thường xuyên. Thật dễ dàng để thực hiện và dễ dàng sử dụng lại trong các lĩnh vực rất khác nhau. Bạn sẽ tìm thấy hàng trăm triển khai APRIORI với chất lượng khác nhau. Và thật dễ dàng để hiểu sai về APRIORI.

FPgrowth khó thực hiện hơn nhiều, nhưng cũng thú vị hơn nhiều. Vì vậy, từ quan điểm học thuật, mọi người đều cố gắng cải thiện FPgrowth - việc làm dựa trên APRIORI được chấp nhận sẽ rất khó khăn ngay bây giờ.

Nếu bạn có một triển khai tốt, theo tôi, mọi thuật toán đều tốt và đó là tình huống xấu theo quan điểm của tôi. Việc triển khai APRIORI tốt sẽ chỉ cần quét cơ sở dữ liệu k lần để tìm tất cả các mục thường xuyên có độ dài k . Đặc biệt nếu dữ liệu của bạn phù hợp với bộ nhớ chính thì đây là giá rẻ. Thứ có thể giết APRIORI là quá nhiều bộ 2 vật phẩm thường xuyên (đặc biệt là khi bạn không sử dụng Trie và các kỹ thuật tăng tốc tương tự, v.v.). Nó hoạt động tốt nhất trên dữ liệu lớn với số lượng mục thường xuyên thấp.

Eclat hoạt động trên các cột; nhưng nó cần phải đọc từng cột thường xuyên hơn nhiều. Có một số công việc trên diffsets để giảm công việc này. Nếu dữ liệu của bạn không vừa với bộ nhớ chính, Eclat có thể chịu đựng nhiều hơn Apriori. Bằng cách đi sâu trước, nó cũng sẽ có thể trả về kết quả thú vị đầu tiên sớm hơn nhiều so với Apriori và bạn có thể sử dụng các kết quả này để điều chỉnh các tham số; Vì vậy, bạn cần ít lần lặp hơn để tìm các tham số tốt. Nhưng theo thiết kế, nó không thể khai thác cắt tỉa gọn gàng như Apriori đã làm.

FPGrowth nén tập dữ liệu vào cây. Điều này hoạt động tốt nhất khi bạn có nhiều hồ sơ trùng lặp. Bạn có thể có thể gặt hái được một số lợi ích khá lớn cho Apriori và Eclat nếu bạn có thể sắp xếp trước dữ liệu của mình và hợp nhất các bản sao thành các vectơ có trọng số. FPGrowth thực hiện điều này ở mức cực đoan. Hạn chế là việc thực hiện khó hơn nhiều; và một khi cây này không còn phù hợp với bộ nhớ nữa, nó sẽ gây ra sự lộn xộn.

Đối với kết quả hiệu suất và điểm chuẩn - không tin tưởng họ. Có rất nhiều điều để thực hiện không chính xác. Hãy thử 10 cách triển khai khác nhau và bạn sẽ nhận được 10 kết quả hoạt động rất khác nhau. Đặc biệt đối với APRIORI, tôi có cảm tưởng rằng hầu hết các triển khai đều bị phá vỡ theo nghĩa thiếu một số đóng góp chính của APRIORI ... và trong số những phần có các phần này đúng, chất lượng tối ưu hóa thay đổi rất nhiều.

Thậm chí có những bài viết về cách thực hiện các thuật toán này một cách hiệu quả:

Triển khai hiệu quả Apriori và Eclat. Hội thảo về triển khai khai thác thường xuyên của
Christian Borgelt
(FIMI 2003, Melbourne, FL, USA).

Bạn cũng có thể muốn đọc các khảo sát về tên miền này:

  • Goethals, Bart. "Khảo sát về khai thác mẫu thường xuyên." Đại học của Helsinki (2003).

  • Ferenc Bodon, Một khảo sát về khai thác vật phẩm thường xuyên, Báo cáo kỹ thuật, Đại học Công nghệ và Kinh tế Budapest, 2006,

  • Tập hợp mục thường xuyên Khai thác
    Christian Borgelt
    Wiley Đánh giá liên ngành: Khai thác dữ liệu và Khám phá tri thức 2 (6): 437-456. 2012


2

Hầu hết các cách tiếp cận mẫu thường xuyên gần đây mà tôi đã thấy trong tài liệu đều dựa trên việc tối ưu hóa FPGrowth. Tôi phải thừa nhận, tôi đã không thấy nhiều phát triển trong tài liệu về FPM trong nhiều năm.

Woibook này làm nổi bật nhiều biến thể trên FPGrowth ngoài kia.

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.