Trong hầu hết các bài toán tìm luật kết hợp thì công đoạn phát sinh tập phổ biến là làm hao tốn nhiều tài nguyên của máy tính nhất.. Chương I: Cơ Sở Lý Thuyết I.1 Giới thiệu: Khai thác t
Trang 1MỤC LỤC
LỜI NHẬN XÉT
Trang 2
LỜI MỞ ĐẦU
Môn học: “Khai Phá Tri Thức” đã mở rộng hơn việc tìm hiểu, khám phá các tri thức tiềm ẩn trong các cơ sở dữ liệu (CSDL) khổng lồ và phân tích khai thác hiệu quả nguồn thông tin từ các CSDL đó, hỗ trợ cần thiết cho tiến trình trích lọc, sản sinh những tri thức hữu ích mang tính khái quát, tính quy luật cho việc ra quyết định thông minh nhất giúp nhà sản xuất và kinh doanh giảm thiểu chi phí và gia tăng lợi nhuận trong tương lai
Trong tiểu luận này, tôi xin trình bày khái quát một trong các kỹ thuật khai phá dữ liệu là: Tìm ra quy luật giữa các thông tin để biến chúng thành những tri thức, một trong
Trang 3những cách tìm ra các quy luật này là kỹ thuật “Khai thác tập phổ biến và luật kết
hợp” Có rất nhiều thuật toán tìm luật kết hợp như Apriori, Apriori cải tiến, sử dụng
hash… Các thuật toán này đóng góp vai trò rất quan trọng cho quá trình tìm kiếm luậtkết hợp
Trong hầu hết các bài toán tìm luật kết hợp thì công đoạn phát sinh tập phổ biến là
làm hao tốn nhiều tài nguyên của máy tính nhất Do đó để cải tiến bài toán theo cách tốthơn, trước tiên chúng ra hãy đặt vấn đề làm giảm chi phí cho công đoạn tìm tập phổ biếnnày Dùng các thuật toán liên quan đến Tree thường cho kết quả rất tốt, vì bản thân treenói lên phương pháp thực hiện phân hoạch thông tin, chia để trị
Ở đây, để minh họa cho kỹ thuật khai phá tập phổ biến và luật kết hợp, tôi xin trình
bày “TÌM HIỂU VÀ CÀI ĐẶT THUẬT TOÁN PHÁT SINH TẬP PHỔ BIẾN
BẰNG GIẢI THUẬT FP-GROWTH””.
Tôi chân thành cảm ơn Thầy PGS.TS.Đỗ Phúc đã truyền đạt những kiến thức quýbáu về khái niệm, ý nghĩa, các tài liệu và ứng dụng của môn học này, mở ra nhiều hướngnghiên cứu chuyên sâu vào từng lĩnh vực ứng dụng đặc thù với những đặc trưng riêng./
Chương I: Cơ Sở Lý Thuyết
I.1 Giới thiệu:
Khai thác tập phổ biến và luật kết hợp là tiến trình khám phá các tập giá trị thuộc tínhxuất hiện phổ biến trong các đối tượng dữ liệu.Từ tập phổ biến có thể tạo ra các luật kếthợp giữa các giá trị thuộc tính trong tập các đối tượng Luật kết hợp là tri thức quantrọng nhất tiềm ẩn trong CSDL
Một luật kết hợp X -> Y phản ánh sự xuất hiện của tập X dẫn đến sự xuất hiện đồng thờitập Y Luật kết hợp giúp các nhà hoạch định hiểu rõ xu hướng thị trường, xu thế bánhàng, tâm lý khách hàng… từ đó đưa ra các chiến lược bố trí mặt hàng, kinh doanh, tiếpthị, tồn kho…phù hợp
Ví dụ các luật kết hợp tiêu biểu như sau:
Trang 4KH mu
a tôm cầu tre
KH mua
cả 2
KH mua Beer 333
- Có 78% khách hàng mua sữa hộp Vinamilk thì mua tra Lipton
- Có 67% khách hàng mua bia 333 thì mua bánh tôm Cầu Tre
I.2 Các khái niệm cơ bản:
I.2.1 Khái niệm:
Cho I = {i1, i2, i3, …, in} là tập hợp các trường gọi là items
D: tập các giao tác có các giao tác Ti mà Ti ⊆ I
T chứa X nếu X ⊆ T (X là tập có các phần tử ⊆ I)
Mỗi giao tác Ti có chỉ danh là TID
Luật kết hợp là một mối liên hệ điều kiện giữa hai tập các hạng mục dữ liệu X và Ytheo dạng sau: Nếu X thì Y, và ký hiệu là X ⇒ Y Chúng ta có luật kết hợp X ⇒ Y, nếu
X ⊂ I, Y ⊂ I và X ∩ Y = ∅
Thước đo giá trị của một luật kết hợp là độ tác động và độ tin cậy (support là s và
confidence là c).
I.2.2 Độ tác động (Support):
Thể hiện phạm vi ảnh hưởng của luật trên tòan bộ CSDL
Luật X=>Y có độ support là s nếu s% số giao tác trong D có chứa X∪Y Hay là :
Support(X=>Y) = Support(X ∪ Y) = Card(X ∪ Y) / Card(D)% = s%
Với :
Card(X ∪ Y) tập các giao tác trên CSDL có chứa cả vế trái lẫn vế phải của luật
Card(D) : Tập tất cả các dòng trên CSDL
Trang 5I.2.3 Độ tin cậy (Confidence):
Thể hiện độ chính xác, tính đúng đắn, hay khả năng tin cậy của luật trong phạm vi ảnhhưởng của luật (xác định bởi độ đo support)
Luật X=>Y có độ tin cậy là c (confidence) nếu có c% số giao tác trong D chứa X ∪ Y sovới tổng số giao tác có trong D chỉ chứa X Khi đó ta có :
Confidence(X=>Y) = Card(X ∪ Y) / Card(X)% = c%
Với :
Card(X ∪ Y) tập các giao tác trên CSDL có chứa cả vế trái lẫn vế phải của luật
Card(X) : Tổng số dòng chứa vế trái của luật trên CSDL
Tập các hạng mục dữ liệu gọi là ItemSet có độ support lớn hơn hay bằng giá trị ngưỡngnhỏ nhất (gọi là minsupp) được gọi là Large ItemSet Các ItemSet còn lại được gọi làcác Small ItemSet
Với mỗi một Large ItemSet - L, và A là một tập con khác rỗng của L, nếu tỉ lệ phầntrăm giữa support của L so với support của A lớn hơn hay bằng độ tin cậy nhỏ nhất (gọi
là minconf) thì ta có luật kết hợp A ⇒ (L\A)
=> Tóm lại tìm luật kết hợp là đi tìm những luật X=>Y trong CDSL sao cho luật thỏanhững giới hạn tối thiểu support và confidence cho trước
II.2.4 Ví dụ: (minh họa 2 đại lượng minsupp và minconf)
Trang 6Tìm ra được 2 luật kết hợp thỏa mãn minsupp và minconf
(1): Age (30 39) and (Married: Yes) ⇒ NumCars = 2 (s = 40%, c = 100%)
Để rút ra được luật trong CSDL cần tiến hành 5 bước sau:
B1: Xác định khoảng phân chia của mỗi thuộc tính khi cần phân tích
B2: Kết hợp mỗi khoảng thuộc tính đã phân chia ở bước B1 với một số nguyên để
thực hiện các thuật toán được nhanh, dễ dàng
B3: So sánh các support của các item với minsupp, tạo tập Largeitemset
B4: ABCD và AB là Large itemset ta rút ra được luật
AB ⇒ CD khi support(ABCD)/support(AB) >= minconf
B5: Xác định chọn những luật phù hợp
II.3.2 Vậy có thể nói thuật toán tìm tập phổ biến được xây dựng 2 bước sau:
Bước 1 : Liệt kê tất cả các tập con P của I (tập tất cả các thuộc tính của cơ sở dữ
liệu) sao cho P÷ > 1
Bước 2 : Với mỗi tập con P, liệt kê tất cả các tập con X khác trống của P
Luật R được hình thành bởi :
R : X → P \ X
Chọn các luật R thỏa ngưỡng minsup và minconf
Các tập thuộc tính P thỏa điều kiện support(P) > minsup được gọi là các large item set
Trang 7II.3.3 Ví dụ: Bài toán tìm luật kết hợp
Cho CSDL bán hàng của siêu thị như sau:
- Gọi I (viết tắt của Items) là tập tất cả các thuộc tính ( tập gồm tất cả "mặt hàng" ) có
thể có trong cơ sở dữ liệu (trong cơ sở dữ liệu trên thì I = {1,2,3,4,5})
- Tính giá trị 2 độ đo là support (độ hỗ trợ) và confidence (độ đáng tin cậy) để thẩm địnhgiá trị của một luật kết hợp
* Chẳng hạn luật {1, 2 } → {3} trên cơ sở dữ liệu đã cho có độ support là 25% vì chỉ có
1 dòng (300) trên tổng số 4 dòng có chứa đủ cả {1,2,3} Còn luật {2} → {5} thì có độsupport đến 75% vì có 3 dòng (200,300,400) trên 4 dòng chứa đủ cả {2, 5}
* Chẳng hạn luật {1,2} → {3} có độ confidence là 100% vì có 1 dòng (300) chứa
{1,2,3} trên tổng số 1 dòng (300) chứa {1,2} Trong khi đó, luật {3} → {5} có độ
confidence là 66,67% vì có 2 dòng chứa {3,5} trên tổng số 3 dòng chứa {3}.
- Ta đã biết cách tính support và confidence của một luật có sẵn Vấn đề tiếp theo là liệt
kê tất cả các luật có thể có từ tập hợp I (tập tất cả các thuộc tính của cơ sở dữ liệu) Quá
trình liệt kê tất cả các luật được diễn ra trong 2 bước
Trang 8Chương II: Cải tiến thuật toán tìm tập phổ biến
II.1 Nguyên lý chính:
Để tăng tốc thuật toán, ta cần phải tìm cách giải quyết hai "điểm nóng" (các điểm tiêutốn nhiều thời gian thi hành của máy tính) trong thuật toán ở trên là số lần lặp (2n) vàthời gian duyệt cơ sở dữ liệu để tính support và confidence
- Loại bỏ nhanh các tập thuộc tính có support < minsup theo quy tắc nhánh cận
- Tính support dựa vào thông tin từ những lần tính trước
- Xây dựng cơ sở dữ liệu tương đương nhưng có tốc độ truy xuất nhanh hơn
II.2 Thuật toán Apriori:
II.2.1Trình bày thuật toán:
Trong ý tưởng thuật toán tìm tập phổ biến trên, có thể thấy rằng ở bước 2 là tốn kémnhiều chi phí nhất trong những cơ sở dữ liệu lớn trong thực tế Thuật toán Apriori vàmột số cải tiến tốc độ cũng có thể nói góp phần giảm chi phí đáng kể khi các giao dịch
có nhiều các mẫu (giá trị) thường xuyên và ngưỡng minsupport thấp
Trang 9Dưới đây là phần trình bày thuật toán tìm Tập Phổ Biến tổng quát cho trong thuật toánApriori
Bước 3:
Tiếp tục cho bước k, đã có trước tập ứng viên Ck Duyệt qua tất cả các giao tác (trong CSDL) để cập nhật giá trị support cho các phần tử trong Ck, đồng thời so sánh với minsupport để chọn ra tập phổ biến Fk
Trang 102 Bia, bánh mì
3 Bia, nước ngọt, khăn giấy, sữa
4 Bia, bánh mì, khăn giấy, sữa
5 Nước ngọt, khăn giấy, sữa
F1 = {“bánh mì”, “bia”, “nước ngọt”, “sữa”, “khăn giấy”}
C2 = { {“bánh mì”,“bia”}, {“bánh mì”,“nước ngọt”}, {“bánh mì” , “sữa”}, {“bánhmì”,“khăn giấy”}, {“bia”,“nuớc ngọt”}, {“bia”,”sữa”}, {“bia”,”khăn giấy”}, {“nuớcngọt”,”sữa”}, {“nuớc ngọt”,”khăn giấy”}, {“sữa”,”khăn giấy”} }
F2 = {{“nước ngọt”,”sữa”}, {“sữa”,”khăn giấy”}}
C3 = {{“nuớc ngọt”,”sữa”,”khăn giấy”}}
* Tìm F3 từ C3:
sp({“nuớc ngọt”,”sữa”,”khăn giấy”}) = 2/5 (loại)
Trang 11conf(R2) = sp(R1)/sp(sữa) = 3/5 : 4/5 = ¾ (75%) (loại)
=> Vậy tìm được 1 luật: “nuớc ngọt” → “sữa”
với minsupp = 50% minconf = 100%
Khách hàng mua “nước ngọt” thì cũng sẽ mua “sữa”
* Các thuật toán cải tiến như AprioriTID cũng dựa trên các bước cơ bản trên, nhưng đểhạn chế truy xuất vào CSDL và tăng tốc độ, thuật toán này đã thực hiện công việc: tạimỗi bước k, ghi lại danh sách các ItemSet cho tất cả các giao tác còn đang xét Giá trịghi này gọi là Set-of-ItemSets Nhằm mục đích sử dụng cho tính toán giá trị support ởbước sau Ngoài ra, có thể kết hợp bộ nhớ cache sử dụng dạng bit Array để lưu trữ lại tất
cả các giao tác
II.3 Thuật toán tìm tập phổ biến FP-Growth:
Trong thuật toán Apriori cũng còn giới hạn ở bước tìm tập phổ biến là tốn kém rất nhiềuchi phí và nặng nề nhất Do đó phải có một cách tổ chức lại cấu trúc của các giá trị( hạng mục – item) và các giao tác (transactions) để tìm các giá trị support đó một cáchtrực tiếp từ cấu trúc mà không cần phải truy xuất vào CSDL
Một trong những cấu trúc tổ chức thực hiện để giải quyết vấn đề trên là cấu trúcFrequent Pattern Tree (FP-Tree)
Trang 12II.3.1 Thuật toán FP-Tree:
II.3.1.1 Khái niệm:
Cấu trúc FP-Tree được lưu trữ dựa trên các khái niệm sau:
- Nút gốc có nhãn “null”
- Mỗi nút còn lại chứa các thông tin: Item-name, Count, Node-link
o Item-name: Tên của phần tử đại diện cho nút
o Count: Số giao tác chứa mẫu bao gồm các item duyệt từ nút gốc đến nút đang xét
o Node-link: Chỉ đến nút kế tiếp trong cây hay chỉ đến null nếu nút đang xét là nút
lá
- Bảng Header có số dòng bằng số item Mỗi dòng chứa 3 thuộc tính: name, count, node-link
item-o Item-citem-ount: Tổng số biến citem-ount của tất cả các nút chứa item đó
o Node-link: Chỉ đến nút sau cùng được tạo ra để chứa item trong cây
II.3.1.3 Bổ sung phần tử vào tree dựa trên nguyên tắc:
- Mỗi lần bổ sung là một tập các phần tử được sắp xếp theo thứ tự ưu tiên trong mỗi giaotác (transaction) – thứ tự ưu tiên này được quy định lần đầu tiên trong tập phần tử trongF1 có support sắp xếp giảm dần
- Với một lần bổ sung, duyệt theo thứ tự các phần tử, nếu phần tử đang xét đã tồn tạinode trong tree thì lần theo node đó, ngược lại thì bổ sung node con ngay sau node củaphần tử trước đó
II.3.1.4 Các bước xây dựng FP-Tree:
Buớc 1: Duyệt CSDL lần thứ nhất, lấy ra tập F1 các phần tử phổ biến và độ support của
chúng Sắp theo thứ tự giảm dần độ support các phần tử trong tập F, ta được tập F1 Bỏqua các phần tử không thường xuyên
Buớc 2: Tạo một nút gốc cho cây T và gán nhãn là Null Duyệt CSDL lần thứ hai, với
mỗi giao tác trong CSDL, thực hiện hai việc sau:
Trang 13- Chọn các phần tử phổ biến trong mỗi giao tác sắp xếp support giảm dần theo thứ tựtrong tập F1 Ký hiệu danh sách các phần tử đã sắp xếp là [p|P], trong đó p là phần tửđầu tiên của danh sách, P là các phần tử còn lại.
- Gọi hàm Insert_tree([p|P],T) để đưa các phần tử trong danh sách vào cây T.
II.3.1.5 Xét ví dụ tạo FP-Tree dưới đây
Lần duyệt thứ nhất: Tìm các 1-frequent itemset và sắp xếp chúng theo danh sách với
trật tự giảm dần theo tần số xuất hiện, loại bỏ các item nhỏ hơn ngưỡng min_sup = 3
TID Items Bought Ordered Frequent Items
Trang 142.2 Chèn giao dịch đầu tiên: TID =1 (f, c, a, m, p)
2.3 Chèn giao dịch thứ 2, TID =2 với P: (f, c, a, b, m) và T như sau:
Thực hiện Insert_tree([p|P],T): Nếu T đã có cây mà nơi nhãn = p thì tăng nhãn ,
lên 1 Nếu khác nhãn với p tạo nút mới N với n.count = 1
Root
Trang 15P: (c, a, b, m) T:
Trang 16P: (b, m) T:
Root f:2
Trang 17P: () T:
2.4 Sau khi chèn giao dịch thứ 3, TID = 3 với P: (f, b) và T như sau:
2.5 Sau khi chèn giao dịch thứ 4, TID = 4 với P: (f, b, p) và T như sau (FP-Tree):
Trang 182.6 Sau khi chèn giao dịch thứ 5, TID = 5 với P: (f, c, a, m, p) và T như sau (FP-Tree):
II.3.1.6 Thuật toán xây dựng FP-Tree
Xây dựng cây FP-Tree từ CSDL giao tác
Input:
- CSDL giao tác D
Trang 192 Tạo nút gốc R và gán nhãn “null”
Tạo bảng Header có |F| dòng và đặt tất cả các node –link chỉ đến null
3 For each giao tác T D { // Duyệt D lần 2
Chọn các item phổ biến của T đưa vào P;
Sắp các item trong P theo trật tự F1;
Call Insert_Tree(P, R); }
Procedure Insert_Tree(P, R)
{
1 Đặt P=[p|P-p] , với p là phần tử đầu tiên và P-p là phần còn lại của danh sách
2 if R có một con N sao cho N.item-name = p then
Trang 20II.3.2 Thuật toán FP-Growth (Dựa vào tính chất của FP-Tree):
II.3.2.1 Tính chất 1: (Node-link property)
Với mỗi phần tử phổ biến ai, tất cả các tập phổ biến có chứa phần tử này có thể tìmđược bằng cách dò theo các nút liên kết bắt đầu từ ai Tính chất này có cơ sở trực tiếp từcách xây dựng FP-tree Nó cho phép dễ dàng tìm ra tất cả các tập phổ biến có chứa aibằng cách duyệt FP-tree một lần theo các nút liên kết với ai
Ví dụ: Tính chất Node-link property khám phá các tập phổ biến dựa trên FP-tree theo
ví dụ mục II.3.1.5 :
Frequent-item Header Table
Item
f:4c:4a:3b:3m:3p:3
Trang 21- Với nút p, chúng ta thu được mẫu phổ biến (p:3) và hai đường đi trên FP-tree : (f:4;c:3; a:3; m:2; p:2) và (c:1; b:1; p:1)
Đường đi thứ nhất chỉ ra rằng chuỗi "(f; c; a; m; p)" xuất hiện hai lần trong CSDL.Chú ý là mặc dù chuỗi (f; c; a ) xuất hiện ba lần và (f) xuất hiện bốn lần trong CSDL,nhưng chúng chỉ xuất hiện hai lần cùng với p, vì thế số đếm của chuỗi trước p là f:2;c:2; a:2; m:2
Tương tự, đường đi thứ hai chỉ ra rằng chuỗi "(c; b; p)" xuất hiện một lần trongcác giao tác của CSDL huặc chuỗi trước p là c:1; b:1 Cả hai chuỗi truớc p , "{(f:2; c:2;a:2;m:2), (c:1; b:1)}" , tạo thành một "cơ sở điều kiện của p" Xây dựng một FP-tree dựatrên cơ sở điều kiện của p ta có một FP-tree (gọi là cây điều kiện FP của p) chỉ có mộtnhánh là c:3 do đó chỉ tìm được một tập phổ biến là cp:3 Sự tìm kiếm các tập phổ biến
có chứa p chấm dứt
Trang 22nghĩa là gọi mine(<f:3; c:3;a:3>|m)
Hình dưói đây cho thấy "mine(<f:3; c:3;a:3>|m)" có liên quan đến việc tìm ra ba mẫu(a), (c), (f) theo thứ tự
Cơ sở điều kiện của "m": Cơ sở điều kiện của "am:3":
Trang 23Cơ sở điều kiện của "cm:3": (f:3) Cơ sở điều kiện của "cam:3": (f:3)
Đầu tiên chúng ta nhận được tập phổ biến (am:3), và gọi "mine(<f:3; c:3>|am)" chúng ta
có tập phổ biến (cm:3), kế đến gọi "mine(<f:3|>cm)" chúng ta có (fm:3)
Gọi đệ qui sâu hơn nữa với "mine(<f:3; c:3>|am)", chúng ta thu đuợc các tập phổ biến(cam:3), (fam:3), sau đó gọi "mine(<f:3>|cam)" chúng ta đuợc tập dài nhất (fcam:3).Tương tự, gọi "mine(<f:3>|cm" chúng ta đuợc (fcm:3)
=> Do đó, tất cả các tập phổ biến liên quan đến m là {(m:3), (am:3), (cm:3), (fm:3),(cam:3), (fam:3), (fcam:3), (fcm:3)} Điều này chỉ ra rằng một đường đi đơn trên FP-tree
có thể xuất ra tất cả các sự kết hợp của các nút trong đường đi
* Bảng kết quả của tất cả các Item
item Conditional pattern base Conditional FP-tree
Cây điều kiện FP của "m" Cây điều kiện FP của "am"
Cây điều kiện FP của "cm" Cây điều kiện FP của "cam"