TIỂU LUẬNKHAI PHÁ DỮ LIỆU Đề tài: Các thuật toán tìm luật kết hợp xuất phát từ Apriori Khai phá dữ liệu là sự khám phá phát hiện các tri thức và thông tin hữu ích từ những lượng lớn dữ liệu được lưu giữ trong cơ sở dữ liệu nhầm tìm tần số mẫu, mối kết hợp, sự tương quan, hay các cấu trúc nhân quả giữa các tập đối tượng trong các cơ sở dữ liệu giao tác, cơ sở dữ liệu quan hệ, và những kho thông tin khác.
Trang 2MỤC LỤC
MỤC LỤC 2
I KHAI PHÁ LUẬT KẾT HỢP 3
II THUẬT TOÁN APRIORI 6
1 NGUYÊN TẮC APRIORI 6
2 MÔ TẢ THUẬT TOÁN APRIORI 6
3 NỘI DUNG THUẬT TOÁN APRIORI: 6
4 MINH HỌA THUẬT TOÁN APRIORI: 8
III THUẬT TOÁN APRIORITID: 11
1 THUẬT TOÁN APRIORITID: 11
2 MÔ PHỎNG THUẬT TOÁN APRIORI-TID 11
3 NỘI DUNG THUẬT TOÁN APRIORI-TID 12
4 CẤU TRÚC LƯU TRỮ: 12
5 MINH HỌA THUẬT TOÁN APRIORI-TID: 13
6 SO SÁNH THUẬT TOÁN APRIORI VÀ APRIORI-TID 15
IV THUẬT TOÁN APRIORI-HYBRID 16
V THUẬT TOÁN FP_GROWTH 17
1 BẢN CHẤT 18
2 THUẬT TOÁN XÂY DỰNG CÂY FP 18
3 MÔ PHỎNG CÁC BƯỚC CỦA THUẬT TOÁN 18
4 MINH HỌA THUẬT TOÁN 20
5 PHÂN TÍCH CHI PHÍ THUẬT TOÁN TẠO CÂY FP 22
6 TÍNH CHẤT CỦA FP-TREE 23
7 ĐÁNH GIÁ CÁC KẾT QUẢ THỰC NGHIỆM 24
TÀI LIỆU THAM KHẢO 25
Trang 3I KHAI PHÁ LUẬT KẾT HỢP
Khai phá dữ liệu là sự khám phá phát hiện các tri thức và thông tin hữu ích từnhững lượng lớn dữ liệu được lưu giữ trong cơ sở dữ liệu nhầm tìm tần số mẫu, mối kếthợp, sự tương quan, hay các cấu trúc nhân quả giữa các tập đối tượng trong các cơ sở
dữ liệu giao tác, cơ sở dữ liệu quan hệ, và những kho thông tin khác
Luật kết hợp: mô tả mối quan hệ liên kết giữa các thuộc tính trong tập hợp các
dữ liệu có liên quan
Luật: Body => Consequent [ Support , Confidence ]
Trong đó,
1 Tiền đề, vế trái luật (Body).
2 Mệnh đề kết quả, vế phải luật (Consequent).
3 Support, tần số (“trong bao nhiêu phần trăm dữ liệu thì những điều ở vế trái
và vế phải cùng xảy ra")
4 Confidence, độ tin cậy (“nếu vế trái xảy ra thì có bao nhiêu khả năng vế phải
xảy ra")
Ví dụ: Tea ^ Milk => Sugar [0.3 , 0.9]
– “Nếu mua Trà và mua Sửa thì mua đường trong 90% trường hợp Trà,
sửa và đường được mua chung trong 30% dòng dữ liệu."
1 Các khái niệm:
– Gọi I = {i1, i2, i3, , in} là tập các trường gọi là các Items (tập phần tử dữ liệu)
Tập con của I gồm k phần tử dữ liệu được gọi là k-ItemSet.
– D là tập các giao tác (Transaction), ở đó mỗi giao tác T là một tập các Item T
I, và mỗi giao tác có một giá trị định danh là TID
– Ta gọi I giao tác T chứa X nếu X T, nếu X là tập vài Item trong I
– Giao tác T chứa X nếu X T, với X là tập vài Item trong I Tỷ lệ phần trăm
giữa số lượng các giao tác chứa tập các Item X trên tổng số các giao tác trong cơ
sở dữ liệu D được gọi là số support của tập item đó, tức là:
(D) Card
(X) Card (X)
support
Trang 4– Luật kết hợp là một mối quan hệ liên kết giữa hai tập con các phần tử dữ liệu X
và Y theo dạng if X then Y, và ký hiệu là X Y, nếu:
X I, Y I và X Y =
– Luật X Y có số support là s, nếu có s% số giao tác trong D chứa X Y Với
support của một tập Item là số các giao tác có chứa tập Item đó
– Luật X => Y có độ tin cậy (confidence) là c, biểu thị số phần trăm giao tác có
chứa luôn XY trên số những giao tác có chứa X
– Việc khai thác các luật kết hợp từ cơ sở dữ liệu D chính là việc tìm tất cả các luật
có độ hỗ trợ và độ tin cậy lớn hơn ngưỡng hỗ trợ (độ hỗ trợ tối thiểu) và ngưỡngtin cậy (độ tin cậy tối thiểu) do người sử dụng xác định trước Ngưỡng hỗ trợ và
ngưỡng tin cậy lần lượt được ký hiệu là minsup và minconf
– Tập ItemSet có support lớn hơn hay bằng minsup được gọi là Large ItemSet Các
ItemSet còn lại được gọi là Small ItemSet.
2 MỘT SỐ ĐỊNH NGHĨA
– D: là cơ sở dữ liệu có các trường <TID, item>, với TID là định danh của giao
tác
– Size: là số lượng các Item trong tập ItemSet.
– c[1], c[2], c[k] thể hiện một tập k-ItemSet c có k Item bao gồm c[1], c[2], ,
c[k], với c[1] > c[2] > > c[k]
– Nếu c=X.Y và Y là m-ItemSet, thì ta cũng gọi Y là m-extension của X.
– Mỗi ItemSet có trường count để lưu số support cho ItemSet đó Trường count được khởi tạo giá trị bằng 0 khi ItemSet được tạo lần đầu.
s%
(D) Card
(X Card Y)
(X support Y)
) support(X)
Y) support(X (X
confidence Y [ c s, ])
Trang 5– Với một tập các giao tác D, sẽ xây dựng một thuật toán để phát sinh ra nhữngluật kết hợp mà có chỉ số độ hỗ trợ và độ tin cậy lớn hơn độ hỗ trợ nhỏ nhất(minsup) và độ tin cậy nhỏ nhất (minconf).
– Thuật toán tìm tất cả các luật kết hợp có thể được phân tích thành hai bước:
Bước 1: Tìm tất cả các tập item (itemsets) mà support của nó lớn hơn minsup.
Khi đó tập item có support tối thiểu này gọi là tập Large itemset, những tập cònlại gọi là Small itemset
Bước 2: Sử dụng tập Large item để phát sinh những luật mong muốn Với mỗi
tập Large itemset L, tìm tất cả tập con khác rỗng của L gọi là A, với mỗi tập con
A như vậy thì ta có luật: A (L – A), nếu tỉ lệ giữa support(L) với support (A)lớn hơn minconf
3 XỬ LÝ ĐỘ PHỨC TẠP LŨY THỪA
– Cho n dòng giao dịch (transaction) và m thành phần dữ liệu (item) khác nhau khiđó:
Trang 6II THUẬT TOÁN APRIORI
Apriori là thuật toán được Rakesh Agrawal, Tomasz Imielinski, Arun Swami đềxuất lần đầu vào năm 1993 Bài toán được phát biểu: Tìm t có độ hỗ trợ s thỏa mãn s
s0 và độ tin cậy c c0 (s0, c0 là hai ngưỡng do người dùng xác định và s0=minsupp, c0
=minconf) Ký hiệu Lk tập các tập k - mục phổ biến, Ck tập các tập k-mục ứng viên.Bài toán đặt ra là:
1) Tìm tất cả các tập mục phổ biến với minsupp nào đó.
2) Sử dụng các tập mục phổ biến để sinh ra các luật kết hợp với độ tin cậy minconf nào đó.
1 NGUYÊN TẮC APRIORI
– Đếm số lượng của từng Item, tìm các Item xuất hiện nhiều nhất
– Tìm các cặp ứng viên: Đếm các cặp => cặp item xuất hiện nhiều nhất
– Tìm các bộ ba ứng viên: Đếm các bộ ba => bộ ba item xuất hiện nhiều nhất Vàtiếp tục với bộ 4, bộ 5, …
– Nguyên tắc chủ yếu: Mọi tập con của tập phổ biến phải là tập con phổ biến
2 MÔ TẢ THUẬT TOÁN APRIORI
– Bước 1: Đếm số support cho mỗi tập gồm một phần tử và xem chúng như một
Large itemset Support của chúng là minsup
– Bước 2: Với mỗi tập Large item bổ sung các item vào và tạo một Large itemset
mới, tập này được gọi là tập ứng viên (Candidate itemset - C) Đếm số support
cho mỗi tập C trên cơ sở dữ liệu, từ đó quyết định tập C nào là Large Item thực
sự, và ta dùng làm hạt giống cho bước kế tiếp
– Bước 3: Lặp lại bước 2 cho đến khi không còn tìm thấy thêm, một tập Large
itemset nữa
3 NỘI DUNG THUẬT TOÁN APRIORI:
Input: Tập các giao dịch D, ngưỡng support tối thiểu minsup Output: L- tập mục phổ biến trong D
Method:
1 L1=Large_1_ItemSets()
Trang 71 for all transaction t D do
2 for all item i t do
3 i.count ++;
4 L1=i | i.count minsup;
– Hàm Apriori_Gen (Lk-1) thực hiện việc kết các cặp (k-1) ItemSet để phát sinh các tập k_ItemSet mới Tham số của hàm là Lk-1 – tập tất cả các (k-1)-ItemSet và kết quả trả về của hàm là tập các k-ItemSet
4 MINH HỌA THUẬT TOÁN APRIORI:
Minh họa 1: Cho một ví dụ tập các giao dịch từ các hóa đơn mua hàng như sau: TID Các món hàng được mua (Item)
2 { b, m }
3 { p, s, t }
Trang 8Ở bước kết Từ F1 trên ta có tập C2 gồm các cặp 2-item:
{{a, b}, {a, m}, {a,t}, {b,m}, {b,t}, {m,t}}
Tính tập Large 2-item, ta có F2:
Tập Item Số lần xuất hiện
Ở bước lược bỏ ta có F2 = {{a, b}, {b,m}}
Ở bước kết Từ F2 ta có tập C3 gồm các cặp 3-item là {}
Thuật toán kết thúc.
Trang 9Minh họa 2: Xét cơ sở dữ liệu mẫu như sau
Chọn Items có support >=minSup
Trang 10III.THUẬT TOÁN APRIORITID:
Giải thuật AprioriTID là phần mở rộng theo hướng tiếp cận cơ bản của giải thuật
Apriori Thay vì dựa vào cơ sở dữ liệu thô giải thuật AprioriTID biểu diễn bên trongmỗi giao tác bởi các ứng viên hiện hành
1 THUẬT TOÁN APRIORITID:
– Thuật toán AprioriTID sử dụng hàm Apriori_Gen để tạo các tập ItemSet ứng
viên Thuật toán này không dùng cơ sở dữ liệu D để đếm support kể từ bước
thứ hai, thay vào đó là sử dụng tập Ck cho mục đích này Mỗi thành viên của tập
Ck có dạng <TID, Xk> với Xk là tập k-ItemSet thể hiện một phần giao tác t có
mã là TID, hay ta có thể viết <t.TID, cCk | c có trong t>
– Nếu một giao tác không chứa bất kỳ một tập k-ItemSet ứng viên nào, thì giao tác
này không được đưa vào C k Do đó, số lượng ứng viên được đưa vào C k có thểnhỏ hơn số lượng các giao tác trong cơ sở dữ liệu
2 MÔ PHỎNG THUẬT TOÁN APRIORI-TID
– Bước 1: Quét tất cả các giao dịch để tìm tất cả các item có độ Support lớn hơn
Min Support và đưa tập Large 1-Item vào F1
– Bước 2: Đưa toàn bộ các Tid của giao dịch cùng các Items vào C’1 dưới dạng
<Tid,{X1}>
– Bước 3: Xây dựng các cặp 2-items từ F1 đưa vào tập ứng viên C2 Quét tất cả
các giao dịch trong C’1 để tìm tất cả các tập Large 2-Item từ C2 đưa vào C’2dưới dạng <Tid,{X2}>, đồng thời đưa các tập Large 2-Item ứng viên vào F2
– Bước 4: Phát sinh Luật Xây dựng các cặp k items từ Fk-1 đưa vào tập ứng viên
Ck Quét tất cả các giao dịch trong C’k-1 để tìm tất cả các tập Large k-Item từ
Ck và đưa vào C’k dưới dạng <Tid,{Xk}>, đồng thời đưa các tập Large k-Itemvào Fk Lặp lại Bước 4 cho đến khi hết ứng viên mới
Trang 113 NỘI DUNG THUẬT TOÁN APRIORI-TID
– Mỗi tập ItemSet ứng viên sẽ được gán cho một mã số duy nhất, gọi là ID Mỗi
tập ItemSet Ck được lưu trong một mảng Một thành viên của C k bây giờ cĩdạng <TID, ID >, mỗi C k được lưu trong một cấu trúc tuần tự
– Hàm Apriori_Gen phát sinh một tập các k-ItemSet ứng viên Ck bằng cách kết hai
tập Large (k-1)-ItemSets Mỗi ItemSet ứng viên ta thêm hai trường:
(i) generators.
(ii) extensions.
– Trường generators của tập ItemSet ck lưu các ID của hai tập Large (k-1)-ItemSet
kết với nhau để phát sinh ck
– Trường extensions của tập ItemSet ck lưu những ID của các tập Large
(k+1)-ItemSet kết với nhau để phát sinh ck
– Khi một ItemSet ck ứng viên được phát sinh bằng cách kết 11
k-1 và 12
k-1, thì các IDcủa 11
k-1 và 12
k-1 sẽ được lưu vào trường generators của ck, đồng thời ID của ck
được lưu vào trường extension của 11
k-1.– Với cấu trúc lưu trữ này thì câu lệnh
Trang 12Ct = c Ck | (c-c[k]) t.Set_of_ItemSets (c-c[k-1] t.Set_of_ItemSets; sẽ được thực hiện như sau: trường t.Set-of-ItemSets của bản ghi t thuộc C k 1 lưu
các ID của tập ứng viên (k-1)-ItemSet chứa trong giao tác t.TID Với mỗi ck-1,
trường extensions chứa tập Tk là tập các ID của tất cả các tập k-ItemSet ứng viên
được mở rộng từ ck-1 Mỗi ck trong Tk, trường generators chứa các ID của hai tập
ItemSet dùng để phát sinh ra ck Nếu những tập itemSet này nằm trong danh sách các tập ItemSet của bản ghi t, thì có thể kết luận ck thuộc giao tác t.TID, và ck đượcthêm vào tập Ct
5 MINH HỌA THUẬT TOÁN APRIORI-TID:
Cho một ví dụ tập các giao dịch Tid với các Items như sau:
Trang 13Lấy toàn bộ <Tid,{X1}> đưa vào C’1
Tính tập Large 2-Item, ta có F2
Tập 2-Item Số lần xuất hiện
Trang 14Xác định ứng viên từ C3 khi duyệt Tid trong C’2 và đưa vào C’3
Tid Tâp 3-Itims
200 {{2, 3, 5}}
300 {{2, 3, 5}}
Tính tập Large 3-Item, ta có F3:
Tập 3- Item Số lần xuất hiện
Ở bước kết Từ F3 ta có tập C4 gồm các cặp 4-item là {}
Thuật toán kết thúc.
6 SO SÁNH THUẬT TOÁN APRIORI VÀ APRIORI-TID
Khuyết điểm của apriori:
Để xác định độ Support của các tập ứng viên, thuật toán luôn luôn phải quétlại toàn bộ các giao tác trong CSDL Do vậy sẽ tiêu tốn rất nhiều thời gian khi sốk-items tăng (số lần xét duyệt các giao tác tăng)
Khuyết điểm của apriori-Tid:
Trong quá trình xét duyệt khởi tạo, kích thước của C’k là rất lớn và hầu hết
là tương đương với kích thước của CSDL gốc Do đó thời gian tiêu tốn cũng sẽbằng với thuật toán apriori, ngoài ra thuật toán apriori-Tid còn phải gánh chịuthêm chi phí phát sinh nếu C’k vượt quá bộ nhớ trong mà phải sử dụng kèm bộnhớ ngoài
Trang 15IV THUẬT TOÁN APRIORI-HYBRID
Thuật toán Apriori-Hybrid được coi như kết hợp giữa Thuật toán Apriori vàthuật toán Apriori-TID Trong thuật toán Apriori-Hybrid, được sử dụng khi tổchức lặp và chuyển sang Apriori-TID khi đã chắc chắn rằng tập C k đã vào bộ nhớchính Thuật toán Apriori-Hybrid được coi là tốt hơn so với Apriori vàAprioriTID Nhờ có nhận xét tinh tế là thuật toán Apriori chạy khá nhanh ởnhữngbước đầu tiên, còn thuật toán Apriori-TID chạy nhanh ở những bước sau(chạy khá chậm ở những bước đầu tiên), Agrawal đề nghị phương án lai ghép:không nhất thiết phải chạy tất cả các bước cùng một thuật toán giống nhau Nhữngbước đầu tiên, ông cho chạy thuật toán Apriori, sau đó khi tập các ứng cử viên khálớn, sắp chứa đầy trong bộ nhớ tính toán, mới dùng thuật toán Apriori-TID.Srikant đưa ra thêm một nhận xét: thời gian chuyển từ thuật toán Apriori sangthuật toán Apriori-TID tương đối tốn kém
Trang 16V THUẬT TOÁN FP_GROWTH
Như ta đã biết thuật toán Apriori là một bước đột phá về khai thác các tậpmục thường xuyên bằng cách sử dụng kỹ thuật tỉa để rút gọn kích thước của cáctập mục ứng cử Tuy nhiên, trong trường hợp số tập mục nhiều, tập mục dài hoặcngưỡng độ hỗ trợ nhỏ thì thuật toán gặp phải hai chi phí lớn:
– Sinh ra số lượng khổng lồ các tập mục ứng cử Hơn nữa, để phát hiện ra các tậpmục thường xuyên có kích thước n, thuật toán phải kiểm tra 2n-2 các tập mụcthường xuyên tiềm ẩn
– Phải duyệt qua cơ sở dữ liệu nhiều lần Số lần duyệt cơ sở dữ liệu của thuật toánApriori bằng độ dài của tập mục thường xuyên dài nhất tìm được.Trong trườnghợp tập mục thường xuyên dài và cơ sở dữ liệu lớn thì không thể thực hiện được.Thuật toán Apriori phù hợp với cơ sở dữ liệu thưa, còn với cơ sở dữ liệu dày thìthuật toán kém hiệu quả
– Để khắc phục những chi phí lớn của thuật toán Apriori năm 2000 Jiawei Han,Jian pei và Yiwen Yin đã đưa ra thuật toán mới được gọi là FP_growth để tìmtập mục thường xuyên bằng cách không sinh các tập mục ứng cử từ các tập mụcthường xuyên trước mà vẫn hiệu quả bằng cách sử dụng ba kỹ thuật sau:
Thứ nhất, thuật toán sử dụng cấu trúc cây mẫu thường xuyênFP_Tree để nén dữ liệu Cấu trúc FP_Tree là mở rộng của cấu trúc câyprefix Những nút trong cây là các mục có độ dài là 1, được gán nhãn bởitên mục và được sắp xếp theo tần suất xuất hiện của các mục để các mục có
số lần xuất hiện nhiều thì sẽ chia sẻ nhiều hơn
Thứ hai, khai thác phát triển từng đoạn mẫu dựa trên FP_Tree, bắtđầu từ mẫu thường xuyên có kích thước 1 và chỉ kiểm tra trên cơ sở mẫuphụ thuộc (conditional pattern base), khởi tạo FP_Tree của mẫu phụ thuộc,thực hiện khai thác đệ quy trên cây này Mẫu kết quả nhận được qua việckết nối mẫu hậu tố với mẫu mới được sinh ra từ FP_Tree phụ thuộc
Thứ ba, dùng kỹ thuật tìm kiếm phân hoạch không gian tìm kiếm
và chia để trị để chia nhiệm vụ khai thác thành những nhiệm vụ nhỏ hơn vàgiới hạn lại các mẫu làm giảm không gian tìm kiếm
Trang 171 BẢN CHẤT
– Khai thác tập phổ biến không sử dụng hàm tạo ứng viên
– Nén cơ sở dữ liệu thành dạng cấu trúc cây FP (Frequent Patern)
– Duyệt đệ qui cây FP để tạo tập phổ biến
2 THUẬT TOÁN XÂY DỰNG CÂY FP
– Bước1: Duyệt CSDL, lấy ra tập các item phổ biến F và tính độ phổ biến của
chúng Sắp xếp các item trong tập F theo thứ tự giảm dần của độ phổ biến, tađược tập kết quả là L
– Bước2: Tạo nút gốc cho cây T, và tên của nút gốc sẽ là Null.
Sau đó duyệt CSDL lần thứ hai Ứng với mỗi giao tác trong CSDL thực hiện 2công việc sau:
Chọn các item phổ biến trong các giao tác và sắp xếp chúng theothứ tự giảm dần độ phổ biến trong tập L
Gọi hàm Insert_tree([p|P],T) để đưa các item vào trong cây T– Thủ tục thêm các mục thường xuyên vào cây FP_Tree:
1 Procedure Insert_Tree(string[p|P], Tree T){
2 //Trong đó p là mục đầu tiên của dãy và P là phần còn lại của dãy
3 If cây T có nút con N mà N.Item_name = p Then N.count++