Tải bản đầy đủ (.docx) (30 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (692.02 KB, 30 trang )

Tiểu luận:“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”
MỤC LỤC

LỜI NHẬN XÉT

HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 1
Tiểu luận:“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”

















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
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 2
Tiểu luận:“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”
nhữ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ậ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ê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ến
nà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 tree
nó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ướng
nghiê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ính
xuấ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ết
hợ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 quan
trọ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ời
tậ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án
hà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ếp
thị, tồn kho…phù hợp.

Ví dụ các luật kết hợp tiêu biểu như sau:
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 3
KH
mu
a
tôm
cầu
tre
KH
mua
cả 2
KH mua
Beer 333
Tiểu luận:“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”
- 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à 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 = ∅
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.
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 4
Tiểu luận:“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”
I.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 ảnh
hưở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 so
vớ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ưỡng
nhỏ 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ần
tră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ỏa
nhữ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)

TID Age Married NumCars
100 23 No 1
200 25 Yes 1
300 29 No 0
400 34 Yes 2
500 38 Yes 2
Người ta đưa ra minsupp = 40% và mincon f = 50 %.
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 5
Tiểu luận:“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ì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%)
(2): NumCars(0 1) ⇒ Married = No (s = 40%, c = 66,6%).
II.3 Ý tưởng về thuật toán tìm luật kết hợp:
II.3.1 Ý tưởng:
Tìm tất cả các luật R : X → Y; sao cho support(R) > minsup và confidence(R) >
minconf.
Chỉ những luật nào có độ support lớn hơn minsup và độ confidence lớn hơn minconf
mới được quan tâm.
Để 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.
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 6
Tiểu luận:“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”
II.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:
Mã hóa đơn Các mặt hàng
100 1,3,4
200 2,3,5
300 1,2,3,5
400 2,5
- 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 định
giá 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
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 7
Tiểu luận:“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”
Chươ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êu
tố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 (2
n
) 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é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 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.
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 8
Tiểu luận:“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”
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 trong thuật toán
Apriori
Bước 1:
Duyệt tất cả các giao tác (transactions) và dựa vào ngưỡng minsupport để tìm ra tậ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 k-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.
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.
II.2.2 Ví dụ:
Tìm các luật kết hợp nếu cho minsupp = 0.5(50%) và minconf = 1(100%)
Hóa đơn Các mặt hàng
1 Bánh mì, nước ngọt, sữa
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 9
Tiểu luận:“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”
2 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
* Độ support:
sp(“bánh mì”) = 3/5;
sp(“bia”) = 3/5;
sp(“nước ngọt”) = 3/5;
sp(“sữa”) = 4/5;
sp(“khăn giấy”) = 3/5;
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ánh
mì”,“khăn giấy”}, {“bia”,“nuớc ngọt”}, {“bia”,”sữa”}, {“bia”,”khăn giấy”}, {“nuớc
ngọt”,”sữa”}, {“nuớc ngọt”,”khăn giấy”}, {“sữa”,”khăn giấy”} }
* Tìm F2 từ C2:
sp({“bánh mì”, “bia”}) = 2/5 (loại)
sp({“bánh mì”,”nuớc ngọt”}) = 1/5 (loại)
sp({“bánh mì”,”sữa”}) = 2/5 (loại)

sp({“nuớc ngọt”, “sữa”}) = 3/5


sp({“sữa”,”khăn giấy”}) = 3/5
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)
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 10
Tiểu luận:“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”
F3 = {}
C4 = {}
- Vậy tập phổ biến là {{“nước ngọt”,”sữa”}}
- Ta xây dựng 2 luật:
(R1) “nước ngọt” → “sữa”;
(R2) “sữa” → “nước ngọt”
conf(R1) = sp(R1)/sp(“nước ngọt”) = 3/5 : 3/5 = 1 (100%)
conf(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ạ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. 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ều
chi 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ách
trự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úc
Frequent Pattern Tree (FP-Tree).
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 11
Tiểu luận:“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”
II.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

- Bảng Header có số dòng bằng số item. Mỗi dòng chứa 3 thuộc tính: item-name, item-
count, node-link.
o Item-count: Tổng số biến count 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 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.
- 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 node của
phầ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:
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 12
Tiểu luận:“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”
- 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
1 f, a, c, d, g, i, m, p f, c, a, m, p
2 a, b, c, f, l, m, o f, c, a, b, m
3 b, f, h, j, o f, b
4 b, c, k, s, p c, b, p
5 a, f, c, e, l, p, m, n f, c, a, m, p
(f:4, c:4, a:3, b:3, m:3, p:3)
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 13
Header table
f
c
a
m
p
Root
f:1
c:1
a:1
m:1
p:1

P: (f, c, a, b, m)
T:
Header table
f
c
a
m
p
Root
f:1
c:1
a:1
m:1
p:1
Tiểu luận:“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”
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)
2.1 Khởi tạo:
2.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.
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 14
Root
P: (c, a, b, m)
T:
Header table
f

c
a
m
p
Root
f:2
c:1
a:1
m:1
p:1
P: (a, b, m)
T:
Header table
f
c
a
m
p
Root
f:2
c:2
a:1
m:1
p:1
Tiểu luận:“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”
Insert_tree([p|P],T)
Insert_tree([p|P],T)
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 15
P: (b, m)
T:

Header table
f
c
a
m
p
Root
f:2
c:2
a:2
m:1
p:1
P: (m)
T:
Root
f:2
c:2
a:2
m:1
p:1
b:1
Header table
f
c
a
b
m
p
Tiểu luận:“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”
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 16

P: ()
T:
Header table
f
c
a
b
m
p
Root
f:2
c:2
a:2
m:1
p:1
b:1
m:1
Header table
f
c
a
b
m
p
Root
f:3
c:2
a:2
m:1
p:1

b:1
m:1
b:1
Tiểu luận:“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”
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):
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 17
Header table
f
c
a
b
m
p
Root
f:3
c:2
a:2
m:1
p:1
b:1
m:1
b:1
c:1
b:1
p:1
Header table
f
c
a

b
m
p
Root
f:4
c:3
a:3
m:2
p:2
b:1
m:1
b:1
c:1
b:1
p:1
Tiểu luận:“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”
2.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
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 18
Tiểu luận:“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”
- Ngưỡ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;
Call Insert_Tree(P, R); }
 Procedure Insert_Tree(P, R)
{
1. Đặt P=[p|P-p] , với p là phần tử đầu ê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
3. N.count ++
4. else {
5. Tạo nút mới N;
6. N.count = 1;
7. N.item-name = p
8. N. parent = R
// Tạo node-link chỉ đến item, H là bảng Header
9. N.node-link = H[p].head
10. H[p].head = N
11. }
// Tăng biến count của p trong bảng header thêm 1
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 19
Root
f:4
c:3
a:3
m:2
p:2
b:1
b:1

m:1
c:1
b:1
p:1
Tiểu luận:“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”
12. H[p].count ++;
13. If (P-p) != null then
14. Call Insert_Tree(P-p, N) ;
}
II.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 a
i
, 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ừ a
i
. 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 a
i
bằng cách duyệt FP-tree một lần theo các nút liên kết với a
i
.
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:4
c:4
a:3
b:3

m:3
p:3
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 20
Header table
f
c
a
b
m
p
Root
f:4
c:3
a:3
m:2
p:2
b:1
m:1
b:1
c:1
b:1
p:1
Tiểu luận:“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”
Trên cơ sở tính chất 1, chúng ta thu thập tất cả các tập phổ biến mà có chứa nút a
i
bắt
đầu từ nút đầu a
i
trong header table và các nút liên kết tiếp theo. Chúng ta xem xét bắt
đầu từ nút cuối cùng trong header table.

- 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 trong
cá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ự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ủa p) 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ìm kiếm các tập phổ biến
có chứa p chấm dứt.
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 21
Header table
f
c
a
b
m
p
Root
f:4
c:3
a:3
m:2
p:2
b:1
m:1
b:1
c:1

b:1
p:1
root
f:3
c:3
root
f:3
c:3
a:3
Tiểu luận:“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”
- 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 FP-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 đường đi đơn qua các
mẫu phổ biến. Sau đó chúng ta 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; 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":
(f:2, c:2, a:2) (f:3, c:3)
(f:1, c:1, a:1, b:1) (bỏ b:1)
Header table
item head of node-links
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 22
root
f:3
root
f:3
Tiểu luận:“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”

f
c
a
Cơ 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
p {(f:2; c:2; a:2; m:2),(c:1; b:1)} {(c:3)}|p
m {(f:4; c:3; a:3;m:2), (f:4; c:3; a:3; b:1;m:1)} {(f:3; c:3;a:3)}|m
b {(f:4; c:3; a:3; b:1), (f:4; b:1), (c:1; b:1)} ∅
a {(f:3; c:3)} {(f:3; c:3)}|a
c {(f:3)} {(f:3)}|c
f ∅ ∅
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 23
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"
Tiểu luận:“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”
II.3.2.2 Tính chất 2: (Prefix path property)
Để tìm ra các tập phổ biến từ một nút a
i
trên đuờng đi P, chỉ cần đến đường đi con trước
nút a

i
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 a
i
.
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.
II.3.2.3 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)
Procedure 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 {
3. phát sinh mẫu p = ;
4. support_count(p) = min_sup các nút trong
5. F = F
6. }
7. }
8. Else {
9. For each a
i
in the header of Tree {
10. Phát sinh mẫu = a
i
;
11. support_count ()=a
i
.support_count
12. F = F

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
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 24
Tiểu luận:“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”
15. if !=
16. call FP_growth(, );
17. }
18.}
}
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
- Thời gian tạo tree khá tốn kém, nhưng chỉ tạo 1 lần và sử dụng nhiều lần
- Khi minsuport càng cao thì thời gian tạo cây dường như càng phí.
Biểu đồ so sánh FP–growth và Apriori
HVTH: Nguyễn Hoàng Sỹ - MSHV: CH 1101037 Trang 25

×