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.. Trong phạm vi một bài tiểu luận, em chỉ tập trung chủ
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÁO CÁO THU HOẠCH
MÔN KHAI PHÁ DỮ LIỆU VÀ KHO DỮ LIỆU
Trang 2TÌM HIỂU VÀ CÀI ĐẶT THUẬT TOÁN PHÁT SINH TẬP PHỔ BIẾN SỬ DỤNG FP-GROWTH
Trang 3GIỚI THIỆU
Khai khoáng dữ liệu (Data mining) thực hiện chất lọc và tìm ra trong tập muônvàng thông tin trong cơ sở dữ liệu để tìm ra những tri thức đóng góp vai trò quangtrọng cho việc phân tích và 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 Một trongnhững vấn đề quang trọng trong data mining 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 những cách tìm ra các quy luật
này là tìm luật kết hợp – association rules 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 vaitrò rất quang trọng cho quá trình tìm kiếm luật kế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ốt hơn, trước tiênchúng ra hãy đặt vấn đề làm giảm chi phí cho công đoạn tìm tập phổ biến này
Trong bài thu hoạch này chúng ta sẽ “TÌM HIỂU VÀ CÀI ĐẶT THUẬT
TOÁN PHÁT SINH TẬP PHỔ BIẾN SỬ DỤNG FP-GROWTH” Có thể nhận
xét rằng hầu hết các thuật toán liên quan đến Tree thường cho kết quả rất tuyệtvời, bởi vì bản thân tree nói lên phương pháp thực hiện khác thường so với cácphương pháp thông thường, đó là phân hoạch thông tin, chia để trị
Em rất chân thành cám ơn thầy Đỗ Phúc, dạy môn học này đã cho em biếtthêm các kiến thức về khái niệm, ý nghĩa, các tài liệu và ứng dụng của môn họcnày
Trong phạm vi một bài tiểu luận, em chỉ tập trung chủ yếu vào giải thuật Growth dựa trên Fp-Tree để tìm tập phổ biến chứ không tìm hiểu toàn bộ bài toánluật kết hợp
Fp-Tất cả các source codes download tại địa chỉ
http://code.google.com/p/cdomaster/downloads/list
Ngày 14 tháng 09 năm 2011
Đỗ Văn Cang
Trang 4Mục Lục
GIỚI THIỆU 3
Nội Dung 5
I/ Luật kết hợp – asscociation rules 5
1.1/ Một số khái niệm: 5
1.2/ Bài toán tổng quát 7
1.3/ Thuật toán Apriori 7
II/Thuật toán tìm tập phổ biến FP-Growth 9
2.1/ FP-Tree 9
2.2/ Thuật toán FP-Growth 15
III/ Cài đặt thử nghiệm thuật toán 19
Kết luận 22
Trang 5Nội Dung
I/ Luật kết hợp – asscociation rules
Giai đọan khám phá trong tiến trình KDD là giai đọan khó khăn và quantrọng nhất Data mining không là kỹ thuật đơn giản, với ý tưởng có nhiều tri thứctiềm ẩn bên trong dữ liệu hơn là thể hiện ra bên ngoài Với bất kỳ ứng dụng kỹthuật nào vào việc phát hiện ra tiềm ẩn thì kỹ thuật đó có ích, do đó các kỹ thuậtdata mining là một nhóm hỗn hợp Có một số bài toán điển hình vế data miningsau :
• Bài toán khám phá luật kết hợp (association rules)
• Bài toán phân lọai(classification) dữ liệu
• Bài toán gom nhóm(clustering) dữ liệu
• Bài toán lập mô hình
• Bài toán dự báo
Trong đó luật kết hợp là tri thức quan trọng nhất tiềm ẩn trong CSDL
Luật kết hợp là một trong những kỹ thuật được nghiên cứu tốt nhất cũngnhư quan trọng nhất của khai mỏ dữ liệu, nó được giới thiệu lần đầu tiên vào năm
1993 Mục đích của luật kết hợp là rút ra những mối liên quan thú vị, những tậpmẫu phỏ biến, những cấu trúc kết hợp hay cấu trúc ngẫu nhiên giữa những tập hợpItem trong các transaction database hoặc trong những kho dữ liệu Ví dụ : Vikhuẩn Staphylococcus aureus có trong chất dịch khí quản của bệnh nhân sẽ khángthuốc (lờn thuốc) Oxacillin,Clindamycin,Erythromycin ở tháng thứ 4 Với kết luậnnày sẽ giúp cho viêc kiểm soát nhiễm trùng bệnh viện tốt hơn
1.1/ Một số khái niệm:
• D là tập giao tác, ở đó mỗi giao tác Ti là tập các item Ti ⊆ I
• Ta gọi 1 giao tác T chứa X nếu X ⊆ T (Với X ⊆ I)
• Mỗi giao tác Ti có chỉ danh là TID
• Luật kết hợp là một mối quan hệ điều kiện giữa hai tập các hạng mục dữliệu X và Y theo 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 =∅
Có hai đơn vị đo cơ bản quan trọng cho luật kết hợp là : support là s vàconfidence là c
• Độ 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à :
Trang 6Card(X) : Tổng số dòng chứa vế trái của luật trên CSDL.
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ỏa những giới hạn tối thiểu support và confidence cho trước
Trang 71.2/ Bài toán tổng quát
Bài toán tìm luật kết hợp tổng quát ta có thể thực hiện các bước cơ bản sau
Bước 1: Biến đổi CSDL thành các số
nguyênPhân chia các giá trị của thuột tính thànhnhững khoảng và ứng với mỗi khoảng liên kết nó với một giá trị nguyên dương
để dễ dàng thao tác trên các thuột tính
Bước 2: Tìm tập phổ biến
Dựa vào dữ liệu đầu vào là tất cả các giao tác (transactions) chứa các giá trị đãthực hiện ở bước 1 (ví dụ danh sách các hóa đơn chứa các mặt hàng các hóa đơn đó) và minsupport cho trước để tìm ra tập phổ biến lớn nhất
Tập phổ biến là tập một hoặc nhiều danhsách các giá trị mà có mức độ xuất hiện đáng kể ( >= minsupport) trong các giao tác
Bước 3: Tìm tập kết hợp
Ứng với mỗi tập phổ biến tìm được ở trên thực hiện việc tìm luật như sau:
• Tìm tất cả các luật R: X=>Y sao cho :
Support(R) ≥ minsup và confidence(R) ≥ minconf
o Bước 1 : Liệt kê tất cả các tập con P của I : | P | > I
o Bước 2 : Với mỗi tập con P, liệt kê tất cả các tập con X kháctrống của P ( X khác P ) Luật R hình thành bởi :
R : X => P\X
• Chọn các luật R thỏa ngưỡng minsup và minconf
1.3/ Thuật toán Apriori
Trong bài tổng quát, có thể thấy rằng bước 2/ Tìm tập phổ biến là tốn kém nhiề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 của nó cũng có thể nói góp phần giảm chi phí đáng kể
Dướ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 trongthuật toán Apriori
Trang 8Bước 1/ Duyệt tất cảcác giao tác
(transactions) và dựavào ngưỡng
minsupport để tìm ratập ban đầu
Bước 2/ Giả sử tại bước k-1, đã có được tập phổ biến F-
1 khác rỗng Tại bước k, phát sinh tậpứng viên
Ck(Candidate itemset) dựa vào tổ hợp các phần tử trong tập F-1 Tập kết quả chứa các giátrị không bị trùng lắp
k-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
Bước 4/ Nếu tập phát sinh
Fk khác rỗng thì quay lại thực hiện các bước 2 và 3 cho bước k+1…
Nếu tập phát sinh Fk là rỗng, thì tập phổ biến kết quả sẽ là tập cuối cùng trước đó.Kết thúc quá trình
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ại mỗ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
Trang 9các giao tác
II/Thuật toán tìm tập phổ biến FP-Growth
Như đã đề cập phần trên, trong thuật toán Apriori bước tìm tìm tập phổ biến là tốn kém rất nhiều chi phí và nặng nề nhất Do đó phải có một cách nào đó 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) phải tận dụng được cấu trúc đó để tìm các giá trị support đó một cách trực tiếp từ cấu trúc trên 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úc Frequent Pattern Tree (FP-Tree)
2.1/ FP-Tree
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, item-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 đó
• Node-link: Chỉ đến nút sau cùng được tạo ra để chứa item trong cây
• Bổ sung phần tử vào tree dựa trên nguyên tắc:
o 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 giao tác (transaction) – thứ tự ưu tiên này được quy định lần đầu tiên trong tập phần tử trong F1 có support sắp xếp giảm dần
o 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ại node trong tree thì lần theo node đó, ngược lại thì
bổ sung node con ngay sau nodecủa phần tử trước đó
Các bước xây dựng FP-Tree
Trang 10Buớ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
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
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
Duyệt CSDL lần 2 để xây dựng
FP-Tree(chú ý rằng các item trong mỗi giao
tác được xử lý theo trật tự F1)
Trang 14
Input:
CSDL giao tác DNgưỡng min-sup
Output:
Cây FP-Tree
Method
1 Duyệt D lần đầu để thu được tập F gồm các frequent item và support
count của chúng Sắp xếp các item trong F theo trật tự giảm dần của supprort count ta được danh sách F1.
2 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;
Trang 1512 H[p].count ++;
13 If (P-p) != null then
14 Call Insert_Tree(P-p, N) ; }
2.2/ Thuật toán FP-Growth
Tính chất của FP-Tree
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àngtìm ra tất cả các tập phổ biến có chứa ai bằng cách duyệt FP-tree một lần theo cácnút liên kết với ai
Ví dụ: chúng ta hãy xem xét quá trình khám phá các tập phổ biến dựa trên FP-tree
Table 1: A transaction database as running example
Frequent-item Header Table
Item Head of node-links
f:4
c:4
Ro ot
Trang 16Vớ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ấthiệ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 hailầ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 trong các giao táccủ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ựa trê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ủap) chỉ có một nhánh là c:3 do đó chỉ tìm được một tập phổ biến là cp:3 Sự tìmkiếm các tập phổ biến có chứa p chấm dứt.
Với nút m, chúng ta có mẫu phổ biến là (m:3) và hai đường đi đến m là (f:4; c:3;a:3;m:2) và (f:4; c:3; a:3; b:1;m:1) Tương tự như nút p đã phân tích ở trên, chúng
ta có cơ sở điều kiện của m là "{(f:2; c:2; a:2), (f:1; c:1; a:1; b:1)}" Xây dựng tree dựa trên cơ sở điều kiện này, chúng ta có một FP-tree theo điều kiện của m cónhánh là (f:3; c:3; a:3), một đuờng đi đơn qua các mẫu phổ biến Sau đó chúng ta
FP-có thể khai thác dựa trên FP-tree này một cách đệ qui, nghĩa là gọi mine(<f:3;
f:
3
c:
3
Trang 17a
Đầ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áctậ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 đuờng đi
Bảng kết quả của tất cả các Item
Tính chất 2: (Prefix path property) để tìm ra các tập phổ biến từ một nút ai trên
đuờng đi P, chỉ cần đến đường đi con trước nút ai trên P Và số lần phổ biến của mỗi nút trên đường đi con này phải bằng với số lần phổ biến của nút ai
Dựa trên các tính chất trên, chúng ta có thuật toán tìm các tập phổ biến trên cây FP-tree
Thuật toán tìm tập phổ biến
Input: cây FP-Tree của CSDL D, ngưỡng min_sup
Output: Một tập đầy đủ các mẫu phổ biến F
Method: gọi FP-growth(FP-tree, null)
Cây điều kiện FP của "m" Cây điều kiện FP của "am"
ro ot
f:
3
Cây điều kiện FP của "cm"
ro ot
f:
3
Cây điều kiện FP của "cam"
Trang 18Procedure FP-growth (Tree, α)
{ t toán khai khoáng các mẫu ụng cây FP
1 If Tree chỉ chứa một đường dẫn đơn P then {
2 for each tổ hợp của các nút trong P do {
13 Xây dựng cơ sở có điều kiện của
14 Xây dựng FP-Tree có điều kiện của
15 if !=
16 call FP_growth( , );
17 }
Trang 19So Sánh FP–growth và Apriori
III/ Cài đặt thử nghiệm thuật toán
Để cài đặt thuật toán FP-Growth, Cấu trúc dữ liệu cần thiết bao gồm các cấu trúc
cơ bản( collection, hashtable, list…) và một số cấu trúc bổ sung như sau:
ItemInfo: thông tin phần tử (chưa hoặc đã số hóa, trong mã nguồn sử dụng string chưa số hóa)
Trang 20TreeNodeItem : chứa thông tin node của tree như : ItemName, Count, Parent, NextNode (node-link).
FrequentLinkItem : chứa giá trị phần tử trong bảng Header ban đầu chứa thông tin các phần tử, count và node-link
FPTree: chứa tất cả các thông tin của Tree,Header table và MinSupport
FPGrowthFacade : lớp xử lý tìm tập phổ biến bằng FP Tree
Sử dụng:
B1/ Khởi tạo dữ liệu cho Tree :
- Tree.BuildFrequentItemList(itemname, _count);// add
Frequent Item vào Header
- Tree.MinSupCount = minsupport
- Tree.ListStrList : danh sách giao tác ban đầu để
Duyệt tạo cây ( nếu sử dụng CSDL, có thể thay đổi thông tin này thành thông tin kết nối tới CSDL cụ thể và thay đổi lại hàm BuildFPTree).
B2/ Build Tree : Tree.InitializeFPTree
B3/ Chạy FP-Growth tìm tập phổ biến: GrowthFacade.FPGrowth(_fpTree, null ); Kết quả được lưu vào GrowthFacade.FrequentPattern<key,List of ItemSet> :
+ key = k (số phần tử tham gia)
+ ItemSet là một tập kết quả.
Ứng dụng trong thuật toán tìm luật kết hợp (AR) , chỉ cần lấy tập có k lớn nhất.
- Chạy test cho tập dữ liệu đơn giản như sau với support = 40%
Trang 21- Với support = 50%
Trang 22Kết luận
Bài nghiên cứu này nhằm mục đích tìm hiểu về thuật toán tìm tập phổ biến dựa trên FP-Tree Thuật toán FP-Growth phát triển là để khắc phục một số nhược điểm của các thuật toán trước đó, tuy nhiên nó lại sinh ra một số nhược điểm khác Sau đây là các ưu điểm và nhược điểm của FP-Growth
Ưu Điểm
Chỉ cần duyệt 2 lần vào Cơ Sở Dữ Liệu
Nén tập dữ liệu theo ý nghĩa vào tree
Không phát sinh tập ứng viên
Không đếm trùng lắp trên giao tác trong CSDL
Nhanh hơn nhiều so với Apriori
Nhược điểm
Bộ nhớ có thể không đủ cấp cho FP-Tree trong trường hợp CSDL to vàchia ra làm quá nhiều nhánh
Thời gian tạo FP-Tree khá tốn kém
o Thời gian tạo tree khá tốn kém, nhưng chỉ tạo 1 lần và sử dụngnhiều lần
o Khi minsuport càng cao thì thời gian tạo cây dường như càngphí
Về bộ nhớ hiện nay có thể là phần nào đáp ứng cho tree, ngoài ra cấu trúc tree
có thể được lưu xuống đĩa cứng để sử dụng lại sau đó Việc sử dụng có thểthực hiện để thực hiện lại thuật giải tìm hoặc thay đổi ( thêm, xóa, sửa) thôngtin từ CSDL ( các thông tin bị thay đổi) cập nhật lại xuống tree Như vậy bất
cứ quá trỉnh cập nhật nào vào CSDL hằng ngày , hằng tháng cũng sẽ được cậpnhật xuống tree tại một lúc nào đó
Tài liệu tham khảo
Các slides bài giảng của thấy Đỗ Phúc về khái niệm tập phổ biến
Dựa vào Tiểu Luận anh Vũ Quang Việt - CH0601100.
Artificial Intelligence – Machine Learning,Enginyeria i Arquitectura La
Salle,Universitat Ramon Llull
Jen-Ting Tony Hsiao,Alexandros Ntoulas ,CS 240B May 21, 2002
http://www.scribd.com/doc/51319418/16/Benefits-of-the-FP-tree-Structure
http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Frequent_ Pattern_Mining/The_FP-Growth_Algorithm