Phát biểu bài toán:
Cho một tập các mục I, một cơ sở dữ liệu giao dịch D, ngưỡng hỗ trợ minsup, ngưỡng tin cậy minconf. Tìm tất cả các luật kết hợp X ⇒Y trên CSDL D sao cho: sup(X ⇒ Y) ≥ minsup và conf(X ⇒ Y) ≥ minconf. Bài toán khai thác luật kết hợp có thể được chia ra làm 2 bài toán con được phát biểu trong thuật toán sau:
Nội dung thuật toán
Vào: I, D, minsup, minconf
Ra: Các luật kết hợp thỏa mãn minsup và minconf Phương thức:
(1) Tìm tất cả các tập mục phổ biến từ CSDL D tức là tìm tất cả các tập mục có độ hỗ trợ lớn hơn hoặc bằng minsup.
(2) Sinh ra các luật từ các tập mục phổ biến (large itemsets) sao cho độ tin cậy của luật lớn hơn hoặc bằng minconf.
Tùy theo ngữ cảnh các thuộc tính dữ liệu, cũng như phương pháp sử dụng trong các thuật toán; người ta có thể phân bài toán khai thác luật kết hợp ra nhiều nhóm khác nhau. Chẳng hạn, nếu giá trị của các thuộc tính có kiểu boolean thì ta gọi là khai thác luật kết hợp Boolean (Mining Boolean Association Rules) …
Thuật toán Apriori
Apriori là thuật toán khai thác luật kết hợp do RaKesh Agrawal, Tomasz Imielinski, Anin Sawami đưa ra vào năm 1994, là nền tảng cho việc phát triển những thuật toán sau này. Thuật toán sinh tập mục ứng cử từ những tập mục phổ
biến ở bước trước, sử dụng kĩ thuật “tỉa” để bỏ đi tập mục ứng cử không thỏa mãn ngưỡng hỗ trợ cho trước.
Thuật toán Apriori.
Input: D, cơ sở dữ liệu của các giao tác; min_sup, ngưỡng độ hỗ trợ tối thiểu.
Output: L, các tập item phổ biến trong D.
Method:
(1) L1 = find_frequent_1-itemsets(D); (2) for (k = 2;Lk-1 0;k++) {
(3) Ck = apriori_gen(Lk-1);
(4) for each giao tác t D { // quét D để đếm
(5) Ct = subset(Ck, t); // lấy các tập con của t mà là các ứng viên (6) for each ứng viên c Ct
(7) c.count++; (8) }
(9) Lk = {c Ck|c.count minsup} (10) }
(11) return L = kLk;
procedure apriori_gen(Lk-1:tập (k-1) item phổ biến) (1) for each tập item l1 Lk-1
(2) for each tập item l2 Lk-1
(3) if (l1[1] = l2[1]) (l1[2] = l2[2]) … (l1[k-2] = l2[k-2]) (l1[k-1] < l2[k-1]) then {
(4) c = l1 kết l2; // bước kết: phát sinh các ứng viên (5) if has_infrequent_subset(c, Lk-1) then
(6) delete c; // bước xén tỉa: loại bỏ các ứng viên không đạt
(7) else add c to Ck;
(8) }
(9) return Ck;
procedure has_infrequent_subset (c: ứng viên tập k item;
Lk-1: các tập (k-1) item phổ biến); (1) for each tập con (k-1) s of c (2) if s Lk-1 then (3) return TRUE;
(4) return FALSE;
Trong thuật toán này, giai đoạn đầu đơn giản chỉ là việc tính độ hỗ trợ của các mục. Để xác định L1, ta chỉ giữ lại các mục có độ hỗ trợ lớn hơn hoặc bằng minsup.
Trong các giai đoạn thứ k sau đó (k > 1), mỗi giai đoạn gồm có 2 pha:
Pha thứ 1: Các (k-1)-itemset phổ biến trong tập Lk-1 tìm được trong giai đoạn thứ k-1 được dùng để sinh ra các tập mục ứng cử Ck bằng cách thực hiện hàm
apriori_gen().
Pha thứ 2: CSDL D sẽ được quét để tính độ hỗ trợ cho mỗi tập mục ứng cử trong Ck. Các tập mục ứng cử trong Ck mà được chứa trong giao dịch t có thể được xác định một cách hiệu quả bằng việc sử dụng cây băm.
Hàm apriori_gen() thực hiện hai bước:
Bước kết nối (Join step): Để tìm Lk, một tập ứng viên các tập k item được sinh bởi việc kết Lk-1 với nó. Tập các ứng viên này được đặt là Ck. Gọi l1 và l2 là các tập item trong Lk-1. Ký hiệu li[j] chỉ tới item thứ j trong li (vd, l1[k–2] chỉ tới item cuối thứ 2 trong l1). Với quy ước, Apriori giả sử các item trong một giao tác hay tập item đã được sắp xếp theo thứ tự từ điển. Đối với tập (k–1) item, li, nghĩa là các item được sắp xếp thành li[1] < li[2] < … < li[k-1]. Phép kết, Lk-1 kết Lk-1, được thực
hiện, với các phần tử của Lk-1 là khả kết nếu (k–2) items đầu tiên của chúng là chung. Do đó, các phần tử l1 và l2 của Lk-1 được kết nếu (l1[1] = l2[1]) (l1[2] =
l2[2]) … (l1[k–2] = l2[k–2]) (l1[k–1] < l2[k–1]). Điều kiện l1[k–1] < l2[k–1] đơn giản là bảo đảm rằng không có các bản sao được phát sinh. Tập item tạo ra bởi việc kết l1 và l2 là l1[1], l1[2] , … , l1[k-2], l2[k-1].
Bước cắt tỉa (Prune step): Ck là tập cha của Lk, do đó, những phần tử của nó có
thể hoặc không thể phổ biến, nhưng tất cả các tập k item phổ biến thuộc Ck. Việc quét cơ sở dữ liệu để xác định số lượng của mỗi ứng viên trong Ck sẽ cho kết quả trong việc xác định của Lk (vd, tất cả ứng viên có số lượng không nhỏ hơn độ hỗ trợ tối thiểu là phổ biến theo định nghĩa, và do đó thuộc về Lk). Tuy nhiên, Ck có thể khổng lồ, và nó có thể đòi hỏi việc tính toán cực nhọc. Để giảm kích thước của Ck, tính chất Apriori được sử dụng như sau. Vài tập (k–1) items là không phổ biến thì không thể là tập con của một tập k items phổ biến. Sau đó, nếu vài tập con (k–1)
items của ứng viên tập k items không thuộc Lk-1, thì ứng viên cũng không thể là phổ biến và có thể loại bỏ khỏi Ck. Việc kiểm tra tập con này có thể hoàn thành một cách nhanh chóng bằng cách giữ một cây băm (hash tree) của tất cả các tập item phổ biến.
Ví dụ minh hoạ thuật toán Apriori
Ví dụ 1: Cho cơ sở dữ liệu giao dịch D, I = {A, B, C, D, E}. Áp dụng thuật toán Apriori để tìm các tập phổ biến thỏa minsup = 2.
CSDL – D C1 L1
Tid Items itemsets sup itemsets sup
1 A, C, D Quét D {A} 2 Quét D {A} 2
2 B, C, E {B} 3 {B} 3
3 A, B, C, E {C} 3 {C} 3
4 B, E {D} 1 {E} 3
{E} 3
L2 C2 C2
Itemsets sup itemsets sup itemsets
{A, C} 2 {A, B} 1 Quét D {A, B}
{B, C} 2 {A, C} 2 {A, C} {B, E} 3 {A, E} 1 {A, E} ` {C, E} 2 {B, C} 2 {B, C} {B, E} 3 {B, E} {C, E} 2 {C, E} C3 C3
Itemsets itemsets sup L3
{A, B, C} Quét D {A, B, C} 1 itemsets sup
{A, B, E} {A, B, E} 1 {B, C, E} 2
{A, C, E} {A, C, E} 1
{B, C, E} {B, C, E} 2
Hình 2.1: Ví dụ thuật toán Apriori
Sau khi áp dụng thuật toán Apriori các tập mục phổ biến thu được trong hình 2.1. L = L1 ∪ L2 ∪ L3 = {{A}; {B}; {C}; {E}; {A, C}; {B, C}; {B, E}, {C, E},{B, C, E} }.
Ví dụ 2: Cho cơ sở dữ liệu giao dịch D, I = {bánh mì, bơ, trứng, sữa, đông sương,
kem}. Áp dụng thuật toán Apriori để tìm các tập phổ biến thỏa minsup = 60%.
Cơ sở dữ liệu D C1
TID Giao dịch 1-itemset Độ hỗ
100 {kem, bánh mì, sữa, bơ } {bánh mì} 100%
200 {sữa, bánh mì, trứng, đường, bơ} Quét D {bơ} 100%
300 {trứng, bánh mì, bơ, đường} {trứng} 50%
400 {bơ, bánh mì, sữa} {sữa} 75%
{đường} 50%
{kem} 25%
Tỉa Xóa bỏ các mục L
1 C2 C2 Support < minsup
2-itemset 2-itemset 1-itemset Độ hỗ
{bánh mì, bơ} {bánh mì, bơ} {bánh mì} 100%
{bánh mì, sữa} {bánh mì, sữa} {bơ} 100%
{bơ, sữa} {bơ, sữa} {sữa} 75%
Kết nối L1 và L2 2-itemset
{bánh mì, bơ} {bánh mì, sữa}
{bơ, sữa} Tỉa
Quét D L2 C3 C3
1-itemset Độ hỗ trợ 3-itemset 3-itemset
{bánh mì} 100% {bánh mì, bơ, sữa} {bánh mì, bơ, sữa}
{bơ} 100%
{sữa} 75% Quét D L3
1-itemset Độ hỗ trợ {bánh mì, bơ, sữa} 75%
Sau khi áp dụng thuật toán Apriori các tập mục phổ biến thu được chỉ ra trong hình 2.2. L = L1 ∪ L2 ∪ L3 = {{bánh mì}; {bơ}; {sữa}; {bánh mì, bơ}; {bánh mì, sữa}; {bơ, sữa}; {bánh mì, bơ, sữa}}.
Thuật toán Apriori-TID
Điểm khác nhau chủ yếu của thuật toán này so với thuật toán Apriori là: nó không sử dụng cơ sở dữ liệu để tính độ hỗ trợ trong các giai đoạn k > 1. Thay vào đó nó sử dụng mã khóa của các tập mục ứng cử đã sử dụng trong giai đoạn trước. Nhiều thí nghiệm trên nhiều cơ sở dữ liệu chỉ ra rằng thuật toán Apriori cần ít thời gian hơn giải thuật Apriori-TID trong các giai đoạn đầu, nhưng mất nhiều thời gian cho các giai đoạn sau.
Thuật toán Apriori-Hybrid.
Thuật toán này dựa vào ý tưởng “không cần thiết phải sử dụng cùng một thuật toán cho tất cả các giai đoạn lên trên dữ liệu”. Như đã đề cập ở trên, thuật toán Apriori thực thi hiệu quả ở các giai đoạn đầu, thuật toán Apriori-TID thực thi hiệu quả ở các giai đoạn sau. Phương pháp của thuật toán Apriori-Hybrid là sử dụng thuật toán Apriori ở các giai đoạn đầu và chuyển sang sử dụng thuật toán Apriori- TID ở các giai đoạn sau.
Thuật toán FP-Growth
Ý tưởng: Dùng đệ quy để gia tăng độ dài của mẫu phổ biến dựa trên cây FP- Tree và các mẫu được phân hoạch.
Phương pháp thực hiện:
- Với mỗi phần tử phổ biến trong Header Table, xây dựng cơ sở điều kiện và cây điều kiện của nó.
- Lặp lại tiến trình trên với mỗi cây điều kiện mới được tạo ra.
- Cho tới khi cây điều kiện được tạo ra là cây rỗng hoặc chỉ bao gồm một đường đi đơn thì ngừng. Mỗi tổ hợp con các phần tử trên đường đi đơn được tạo ra sẽ là một tập phổ biến.
Tuy luật kết hợp là một dạng luật khá đơn giản nhưng lại mang rất nhiều ý nghĩa. Thông tin mà dạng luật này đem lại rất có lợi trong các hệ hỗ trợ ra quyết định. Tìm kiếm được những luật kết hợp đặc trưng và mang nhiều thông tin từ CSDL tác nghiệp là một trong những hướng tiếp cận chính của lĩnh vực khai thác dữ liệu.