Hạn chế lớn nhất của thuật toán Apriori là sự bùng nổ số lượng tập ứng viên, và từ đó có q nhiều lần duyệt tồn bộ cơ sở dữ liệu để tính độ hỗ trợ của các mục dữ liệu. Thuật tốn khơng thể giải được khi số mục dữ liệu lớn. Dựa vào thuật toán
Apriori, nhiều thuật toán mới được thiết kế với những sửa đổi hoặc cải tiến. Nói
chung có hai cách tiếp cận: Một là sẽ giảm bớt số lần duyệt qua toàn bộ cơ sở dữ liệu; hai là thay thế toàn bộ cơ sở dữ liệu với chỉ một bộ phận của nó dựa vào tập mục dữ liệu thường xuyên hiện thời. Cách tiếp cận khác là dùng kỹ thuật xén bớt để làm cho số tập ứng viên nhỏ đi.
1.4.2.3 Thuật toán DIC (Dynamic Itemset Counting)
Dựa vào tính chất 1.1: Mọi tập con của tập mục dữ liệu thường xuyên là một
tập thường xuyên, mọi tập mục dữ liệu chứa một tập con không thường xuyên là một tập không thường xuyên, năm 1997 Sergey Bin và nhóm nghiên cứu ở Trường Đại học Stanford, Hoa Kỳ đưa ra thuật tốn DIC để tìm tất cả những mục dữ liệu thường xuyên [12].
Thuật toán DIC dùng cấu trúc giàn các tập con của tập mục dữ liệu (thứ tự bao hàm ⊆) để tìm tập thường xuyên, giàn với tập rỗng ở đáy và tập hợp tất cả các mục
dữ liệu ở đỉnh. DIC đánh dấu những mục dữ liệu bằng bốn ký hiệu khác nhau: Hình chữ nhật liền nét cho những tập mục thường xuyên, hình elip liền nét cho những tập khơng thường xun, hình chữ nhật khơng liền nét cho những mục dữ liệu có khả năng là tập thường xun, hình elip khơng liền nét cho những tập có khả năng là khơng thường xun.
Thuật toán DIC làm việc như sau:
1. Đánh dấu tập rỗng bởi một hình chữ nhật liền, tất cả các tập 1 mục dữ liệu
bởi những vịng elip khơng liền nét, những mục dữ liệu khác không đánh dấu. Khởi tạo j là một số nguyên.
2. Đọc j giao tác trong T, ứng với mỗi giao tác, tăng số đếm cho những tập mục dữ liệu xuất hiện trong giao tác và cịn đang đánh dấu khơng liền nét trên giàn,
các đỉnh con đều đánh dấu bởi một hình chữ nhật liền nét thì đánh dấu nó bởi một hình elip khơng liền nét và khởi tạo số đếm cho nó.
4. Khi những tập mục dữ liệu nào đã chuyển đổi từ đánh dấu không liền nét
sang liền nét trong q trình duyệt thì khơng xét nó nữa trong những lần duyệt sau.
5. Khi duyệt hết j giao tác, thì quay lại bước 2 để đọc j giao tác tiếp theo cho
đến hết cơ sở dữ liệu.
6. Nếu còn tồn tại những mục dữ liệu đánh dấu bằng những nét khơng liền nhau thì quay lại bước 2.
Theo cách này, DIC bắt đầu đếm tìm các tập 1 mục dữ liệu thường xuyên, sau đó tuần tự đếm những tập 2, 3, 4, …, k-mục dữ liệu cho đến khi tập k+1 mục dữ liệu thường xuyên là rỗng.
Theo đánh giá, thuật toán DIC nhanh hơn thuật toán Apriori. Tuy nhiên cả hai điểm tắc nghẽn của thuật toán Apriori vẫn chưa giải quyết.
1.4.2.4 Những hạn chế của nhóm thuật tốn duyệt theo chiều rộng
Các thuật tốn duyệt theo chiều rộng có thể tóm lược thành hai bước:
Bước một: Tìm tập ứng viên k-mục dữ liệu bằng cách tổ hợp các phần tử
trong tập thường xuyên (k-1)-mục dữ liệu.
Bước hai: Ứng với mỗi tập ứng viên, duyệt qua cơ sở dữ liệu một lần để xác
định độ hỗ trợ của nó.
Từ cách giải quyết này, ta thấy các hạn chế của các thuật toán
thuộc nhóm này là:
1. Ở bước một, việc tổ hợp các tập (k-1)-mục dữ liệu để có được tập ứng
viên k-mục dữ liệu có thể có một lượng rất lớn các tập ứng viên, dẫn đến không đủ
2. Ở bước hai, mỗi lần tính độ hỗ trợ của một tập mục dữ liệu là một lần duyệt cơ sở dữ liệu. Với cơ sở dữ liệu lớn, không thể đưa hết vào bộ nhớ trong, mỗi lần duyệt cơ sở dữ liệu là một lần đọc đĩa, làm chậm tốc độ xử lý.
1.4.3 Nhóm thuật tốn duyệt theo chiều sâu
Để giải quyết hai hạn chế trong nhóm thuật tốn duyệt theo chiều rơng,
Nhóm thuật tốn duyệt theo chiều sâu chuyển tồn bộ dữ liệu vào bộ nhớ trong thành cấu trúc cây, quá trình tìm tập thường xuyên là quá trình duyệt cây.
1.4.3.1 Thuật tốn FP_ Tree (Frequent Pattern Tree)
Thuật tốn FP_Tree do nhóm nghiên cứu của Jiawei Han trường đại học
Illinois Hoa Kỳ đề xướng năm 2000 [14]. FP_Tree là một cột mốc mới trong
sự phát triển khai phá luật kết hợp, nó giải quyết được hai điểm nút trong nhóm thuật tốn duyệt theo chiều rộng. Những tập mục dữ liệu thường xuyên được phát hiện với hai lần duyệt cơ sở dữ liệu và khơng có q trình phát sinh các tập ứng viên. FP_Tree là thuật tốn chạy nhanh hơn thuật tốn Apriori.
Q trình phát hiện các tập mục dữ liệu thường xuyên bao gồm hai bước: Xây dựng FT_Tree và phát hiện các tập mục dữ liệu thường xuyên từ FP_Tree.
a) Xây dựng FP_Tree
Mục tiêu của việc xây dựng FP_Tree là đưa toàn bộ dữ liệu vào bộ nhớ trong. FP_Tree là một cây đa cấp không đầy đủ. Mỗi nút của cây gồm hai phần: Item_name chứa tên một mục dữ liệu, Item_count chứa số lần duyệt qua nút này khi xây dựng cây. Số nhánh tại các nút không bằng nhau. Nút gốc R của cây là nút đặc biệt: R.Item_name = ∅ và R.Item_count = 0.
Bước 1: Duyệt cơ sở dữ liệu lần thứ nhất để tính độ hỗ trợ cho mỗi mục dữ
liệu, tìm ra được danh sách các mục dữ liệu thường xuyên và sắp xếp chúng theo thứ tự giảm dần của độ hỗ trợ (hình 1.7.b).
Bước 2: Tạo cây:
• Tạo ra nút gốc R của FP_Tree, gắn nhãn Root.
• Duyệt cơ sở dữ liệu lần thứ hai, ứng với mỗi giao tác:
- Lọc ra những mục dữ liệu thường xuyên thành danh sách L và sắp xếp L theo thứ tự giảm dần của độ hỗ trợ tính ở bước 1.
- Nếu L ≠ ∅, phân L thành [x | L1], với x là mục dữ liệu đầu tiên
trong L, gọi hàm Insert([x | L1], R).
Hàm Insert([x | L], R) làm việc như sau: Nếu nút R có một nút con Q sao
cho Q.Item_name = x thì Q.Item_count := Q.Item_count +1, ngược lại, tạo một nút Q mới là con của nút R và gán Q.item_name := x và Q.Item_count := 1. Nếu L ≠ ∅,
gọi đệ quy Insert([y | L1], Q) với y là thuộc tính đầu của L và L1 là phần cịn lại.
b) Tìm tập thường xun
Thủ tục FP_Growth duyệt qua cây để sinh ra tập những tập mục dữ liệu thường xuyên. Xem chi tiết thủ tục này trong [14].
Chạy thuật toán FP_Tree với dữ liệu cho ở bảng 1.1 với S0 = 2:
tid Những MDL TX 1 MDL Độ hỗ trợ tid Tập MDL có thứ tự t1 A, B, E B 7 t1 B, A, E t2 B, D A 6 t2 B, D t3 B, C C 6 t3 B, C t4 A, B, D D 2 t4 B, A, D t5 A, C E 2 t5 A, C t6 B, C t6 B, C t7 A, C t7 A, C t8 A, B, C, E t8 B, A, C, E t9 A, B, C t9 B, A, C
(1.7.a) Dữ liệu gốc (1.7.b) L1 (1.7.c) DL đã biến đổi