6. Cỏc thuật toỏn khai phỏ dữ liệu nhờ luật kết hợp:
6.1.4. Khai phỏ tậpmục phổ biến khụng sinh cỏc ứng cử:
Thuật toỏn kinh điển Apriori tỡm tập mục phổ biến nhƣ đó trỡnh bày ở trờn hiện tốt bởi rỳt gọn kớch thƣớc cỏc tập ứng cử nhờ kỹ thuật tỉa. Tuy nhiờn trong trƣờng hợp số cỏc mẫu nhiều, mẫu dài hoặc độ hỗ trợ cực tiểu thấp thỡ thuật toỏn này lại gặp phải cỏc vấn đề cơ bản sau:
- Đú là số lƣợng cỏc tập ứng cử lớn. Nếu cú 104 tập 1-mục phổ biến thỡ thuật toỏn Apriori sẽ cần sinh ra hơn 107
cỏc ứng cử 2-mục và thực hiện kiểm tra sự xuất hiện của chỳng. Hơn nữa, để khỏm phỏ đƣợc một mẫu phổ biến kớch thƣớc (độ dài) là l, thuật toỏn phải kiểm tra (21-2) cỏc mẫu phổ biến tiềm năng chẳng hạn nếu l=100 thỡ nú phải sinh ra tổng số 2100 tức khoảng 1030cỏc ứng cử.
- Đú là duyệt cơ sở dữ liệu quỏ nhiều lần để kiểm tra cỏc tập ứng cử. Số lần duyệt cơ sở dữ liệu của thuật toỏn Apriori bằng độ dài của mẫu phổ biến dài nhất tỡm đƣợc. Nhƣ thế trong trƣờng hợp mẫu phổ biến dài và cơ sở dữ liệu lớn với hàng chục triệu bản ghi trở lờn sẽ dẫn khả năng việc tớnh toỏn khụng khả thi.
Sau đõy ta sẽ trỡnh bày một thuật toỏn xuất hiện gần đõy, để tỡm cỏc tập mục phổ biến rất hiệu quả và dựng kỹ thuật khụng sinh cỏc ứng cử.
Thuật toỏn cú tờn FP-growth đƣợc giới thiệu bởi Jiawei Han, Jian Pei và Yiwen năm 2000. Thuật toỏn này hiệu quả hơn Apriori bởi 3 kỹ thuật chớnh sau:
- Nú mở rộng cấu trỳc cõy prefix đƣợc gọi là cõy mẫu phổ biến (frequent pattern hoặc gọi tắt FP-tree) dựng để nộn tới cấu trỳc dữ liệu nhỏ hơn. Cỏc nỳt của cõy đƣợc sắp đặt sao cho cỏc nỳt phổ biến hơn xuất hiện thƣờng xuyờn hơn để cú thể dễ dàng chia sẻ với cỏc nỳt xuất hiện ớt hơn.
- Phƣơng phỏp khai phỏ phỏt triển (growth) từng đoạn dựa trờn FP-tree gọi là phƣơng phỏp FP-growth. Bắt đầu từ mẫu phổ biến cú độ dài 1, FP-growth xem xột mẫu
phụ thuộc của nú nhƣ là cơ sở dữ liệu con bao gồm tập cỏc mục phổ biến cú cựng hậu tố, xõy dựng FP-tree phụ thuộc tƣơng ứng của nú và thực hiện khai phỏ đệ quy trờn cõy này. Mẫu phỏt triển là nhận đƣợc qua việc nối mẫu hậu tố với một đoạn mới đƣợc sinh ra từ FP-tree phụ thuộc. Khai phỏ dựa trờn FP-tree thực hiện theo cỏch phỏt triển cỏc đoạn mẫu để trỏnh chi phớ trong việc sinh ra số lớn cỏc ứng cử.
- Kỹ thuật tỡm kiếm đƣợc dựng ở đõy là dựa vào nguyờn tắc chia để trị, phõn dó nhiệm vụ khai phỏ thành tập cỏc nhiệm vụ nhỏ và luụn chỉ cần duyệt cơ sở dữ liệu 2 lần.
Thuật toỏn FP-growth đƣợc thực hiện nhƣ sau:
1. Đầu tiờn, duyệt cơ sở dữ liệu để tớnh độ hỗ trợ của từng mục (đếm số lần xuất hiện của từng mục).
2. Loại những mục khụng đủ độ hỗ trợ.
3. Cỏc mục cũn lại đƣợc sắp theo thứ tự giảm dần của độ hỗ trợ (tức là giảm dần theo số lần xuất hiện trong cơ sở dữ liệu) ta nhận đƣợc danh sỏch L cỏc mục đó sắp.
4. Duyệt cơ sở dữ liệu lần thứ 2, với mỗi tỏc vụ t ta loại cỏc mục khụng đủ độ hỗ trợ, cỏc mục cũn lại theo thứ tự giống nhƣ xuất hiện trong L (tức là thứ tự giảm dần theo độ hỗ trợ) đƣợc cất vào cõy FP-tree (xõy dựng FP-tree tại lần duyệt thứ 2).
5. Cuối cựng, tỡm cỏc mẫu phổ biến trờn cõy FP - tree đó xõy dựng đƣợc mà khụng cần duyệt cơ sở dữ liệu thờm một lần nào nữa.
Ta xột vớ dụ cụ thể đƣợc cho trong bảng 2.6 sau để minh họa cho thuật toỏn này. Giả sử ta xột với cơ sở dữ liệu đƣợc sau đõy và với độ hỗ trợ cực tiểu minsupp=60%
Bảng 2.6. Minh họa kết quả bƣớc 1 của thuật toỏn EP-growth. ID Cỏc mục Cỏc mục phổ biến đó sắp 1 a,c,d,f,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,p,s c,b,p 5 a,c,e,f,l,m,n,p f,c,a,m,p
Bước 1: Duyệt cơ sở dữ liệu, đếm số lần xuất hiện của từng mục, loại cỏc mục
khụng đủ độ hỗ trợ.
Bước 2: Sắp cỏc mục đỏp ứng yờu cầu về độ hỗ trợ theo thứ tự giảm dần của độ
Bảng 2.7- Danh sỏch L cỏc mục đó đƣợc sắp xếp Mục Tần số f 4 c 3 a 3 m 3 p 3
Bước 3: Duyệt lại cơ sở dữ liệu lần thứ hai và xõy dựng FP-tree. Cõy này đƣợc
xõy dựng nhƣ sau:
Khởi tạo cõy T, gốc của cõy cú nhón null.
Duyệt cơ sở dữ liệu lần thứ 2, với mỗi tỏc vụ, loại cỏc mục khụng phổ biến, cỏc mục cũn lại sắp theo thứ tự giảm dần của số lần xuất hiện (xem bảng 2.6), dóy cỏc mục phổ biến đú đƣợc thờm vào cõy cựng với thay đổi số đếm của cỏc mục trờn cõy cho phự hợp. Quỏ trỡnh xõy dựng cõy nhƣ hỡnh sau:
null null null
f:1 c:1 a:1 m:1 p:1 f:2 c:2 a:2 m:1 p:1 f:3 c:2 a:2 m:1 p:1 b:1 b:1 m:1 b:1 m:1 Hỡnh 3 Hỡnh 4 Hỡnh 5
Trong đú:
- Hỡnh 3 - Cõy FP-tree đƣợc xõy dựng khi đƣa tỏc vụ thứ 1 vào - Hỡnh 4 - Cõy FP-tree đƣợc xõy dựng khi đƣa thờm tỏc vụ thứ 2 vào - Hỡnh 5 - Cõy FP-tree đƣợc xõy dựng khi đƣa thờm tỏc vụ thứ 3 vào. - Hỡnh 6 - Cõy FP-tree đƣợc xõy dựng khi đƣa thờm tỏc vụ thứ 4 vào - Hỡnh 7 - Cõy FP-tree đƣợc xõy dựng khi đƣa thờm tỏc vụ thứ 5 vào Cuối cựng ta cú cõy FP-tree sau khi xõy dựng xong là:
Hỡnh 2.7: Bảng cỏc đầu mục liờn kết và FP-tree với CSDL D - Gốc của cõy cú nhón null, cỏc đƣờng đi trờn cõy biểu diễn item prefixs. - Cỏc liờn kết trờn cõy: liờn kết cỏc mục xuất hiện cú tờn giống nhau.
null null f:3 c:2 a:2 m:1 p:1 c:1 b:1 p:1 f:4 c:3 a:3 m:2 p:2 b:1 Hỡnh 6 Hỡnh 7 b:1 c:1 b:1 p:1 b:1 m:1 b:1 m:1 f null c a b m p f:4 c:3 a:3 m:2 p:2 b:1 c:1 b:1 p:1 b:1 m:1 Mục (Item) Nỳt liờn kết
- Mỗi nỳt (trừ nỳt gốc) bao gồm:
Tờn mục (item identifier)
Số đếm (count)
Liờn kết đến nỳt tiếp theo trờn cõy cú cựng tờn (Node link). - Bảng cỏc đầu mục phổ biến (header table): Bắt đầu cho cỏc liờn kết
Trờn cơ sở mụ tả nhƣ trờn, thủ tục thờm một dóy cỏc mục (giảm dần theo độ hỗ trợ) của cỏc tỏc vụ vào cõy thực hiện đệ quy nhƣ sau:
Đầu vào:
Dóy cỏc mục thuộc một tỏc vụ nào đú đó đƣợc sắp: string P=N1N2...Nm
Cõy T với 01 nỳt gốc cú giỏ trị null. Mỗi nỳt trờn cõy cú cỏc thuộc tớnh sau NodeName: Tờn mục
Frequent: Tần số
ParentID: Liờn kết tới nỳt cha Đầu ra:
- Cõy T là FP-tree của cơ sở dữ liệu D (đó đƣợc sắp và loại bỏ cỏc mục khụng thỏa món độ hỗ trợ)
Procedure create_tree (string P, tree cú gốc T)
Var i,j,k: Integer; Var varNode: Node;
Begin
IF T.NodeCount=1 then //Chỉ cú một nỳt gốc For i := 1 to P.Count //Chỉ độ dài của chuỗi
varNode.ID=T.Nodes.Count+1;
varNode.NodeName=P[i]//Tờn trựng với tờn mục varNode.Frequent=1//Số đếm bằng 1
varNode.ParentID=T.Nodes(i-1).ID//Liờn kết tới nỳt cha T.Nodes.Add varNode
Next Else
//Duyệt cõy tỡm xem trong cõy cú nỳt nào cú tờn trựng với tờn mục đầu tiờn //trong chuỗi khụng.
For i =0 to T.Nodes.Count -1
T.Nodes(i).Frequent=T.Nodes(i).Frequent+1; For j := 2 to P.Count varNode.ID=T.Nodes.Count+1; varNode.NodeName=P[i] varNode.Frequent=1 If j= 2 then varNode.ParentID=T.Nodes(i).ID Else varNode.ParentID=k; End if; k=Varnode.ID; T.Nodes.Add varNode Next
Exit For;//Khụng cần duyệt cõy nữa End if;
Next
If i>= T.Nodes.Count Then //Khụng cú nỳt nào trựng tờn For i := 1 to P.Count //Chỉ độ dài của chuỗi
varNode.ID=T.Nodes.Count+1;
varNode.NodeName=P[i]//Tờn trựng với tờn mục varNode.Frequent=1//Số đếm bằng 1
If i=1 then
varNode.ParentID=T.Nodes(0).ID//Liờn kết tới cha Else varNode.ParentID=k; End IF k=varNode.ID T.Nodes.Add varNode Next End if; End
Tỡm cỏc tập mục phổ biến:
Sau khi đó xõy dựng xong cõy, ta dựng thuật toỏn FP-growth để tỡm cỏc tập mục phổ biến. Thuật toỏn cụ thể nhƣ sau:
Bắt đầu từ dƣới lờn (bắt đầu từ mục cú tần suất nhỏ tới cỏc mục cú tần suất lớn hơn) của bảng header và cõy, với mỗi mục A:
Sử dụng bảng Header ta biết đƣợc số nỳt trờn cõy cú tờn trựng với A
Với mỗi nỳt trờn cõy cú tờn trựng với tờn mục A, sử dụng thuộc tớnh ParentID ta sẽ lấy ra đƣợc tất cỏc mục nằm trờn đƣờng đi từ gốc tới tới nỳt này.
varnode=T.Nodes(T.Nodes(“A”).ParentID)
path =””//Phần đƣờng đi từ gốc tới nỳt cú tờn là A (trừ nỳt A) Do while varnode.Name <> “”
path =path & varNode.Name
varnode=T.Nodes(varnode.ParentID) Loop
Vớ dụ: Đầu tiờn xột mục p, sau đú đến m… nhƣ sau: Mục p:
Cú 2 đƣờng:
- f:4, c:3, a:3, m:2, p:2 - c:1, b:1, p:1
Từ đú suy ra cơ sở mẫu phụ thuộc của p là: - f:2, c: 2, a:2, m:2
- c:1, b:1
Cỏc tập phổ biến chứa p là đƣợc xỏc định dựa vào mẫu cơ sở phụ thuộc này.
Xõy dựng đệ quy cõy FP-tree phụ thuộc đối với mẫu trờn và cỏc tập mục phổ biến trờn cõy đú sau đú thờm p vào tất cả chỳng. Ở đõy mẫu cơ sở phụ thuộc là:
- f:2, c:2, a:2, m:2 - c:1, b:1
FP-tree phụ thuộc của m chỉ cú 1 đƣờng: - c:3
Tập phổ biến tỡm đƣợc là cp Mục m:
- f: 4, c:3, a:3, m:2 - f:4, c:3, a:3, b:1, m:1
(ở đõy ta đó bỏ qua p vỡ cỏc tập phổ biến chứa nú đó tỡm rồi).
Từ đú suy ra cơ sở mẫu phụ thuộc của m là: - f:4, c:3, a:3
- f:4, c:3, a:3, b:1
Cỏc tập phổ biến chƣa m là đƣợc xỏc định bởi cơ sở mẫu phụ thuộc này.
FP-tree phụ thuộc của m chỉ cú 1 đƣờng: - f:3, c:3, a:3
Tớnh chất của cõy phụ thuộc đối với mẫu cơ sở phụ thuộc:
Nỳt liờn kết: Với mọi mục phổ biến ai thỡ mọi tập mục phổ biến cú thể chứa ai cú thể nhận đƣợc bằng cỏch dựa theo thuộc tớnh liờn kết của ai, bắt đầu từ ai trờn bảng header của FP-tree ban đầu
Phần đầu của đƣờng dẫn chứa ai: Để tớnh toỏn số tập mục phổ biến đối với nỳt ai trờn đƣờng dẫn P, chỉ cú tập con của tập những nỳt thuộc phần đầu của đƣờng dẫn P chứa ai mới cần phải liệt kờ và độ hỗ trợ của chỳng bằng độ hỗ trợ của ai
Tƣơng tự đối với a, c và f tỡm theo cỏch đệ quy cỏc mẫu phổ biến trờn FP-tree phụ thuộc, đầu tiờn cho a sau đú cho c và f. Cõy FP-tree phụ thuộc của m nhƣ hỡnh vẽ sau:
Hỡnh 8: FP-tree phụ thuộc của "m"
f null c a f:4 c:3 a:3 m:2 p:2 b:1 c:1 b:1 p:1 b:1 m:1 (Item) Head of node link
Header table null
f:3
c:3
a:3 (f:2,c:2,a:2)
(f:1,c:1,a:1,b:1)
Do FP-tree phụ thuộc của m chỉ cú một đƣờng đơn nờn ta cú thể liệt kờ tất cả cỏc tập mục phổ biến của chứa m là:
m;
fm; cm; am; fcm;cam;fam; fcam;
Thuật toỏn FP-growth:
Khai phỏ FP-tree đƣợc thực hiện bởi gọi lần đầu FP-growth (FP-tree T, null), thực hiện nhƣ sau:
Procedure FP-growth (FP-tree T, X) (1) Nếu cõy T chứa một đƣờng đơn thỡ
(2) Với tất cả cỏc tổ hợp Y của cỏc mục trong đƣờng đi
(3) Lấy ra tập X Y và số đếm nhỏ nhất trong số cỏc nỳt trong Y; (4) Ngƣợc lại: Với mỗi mục A trong header table của T
(5) Lấy ra Z:=X{A} và số đếm là A.count; (6) Xõy dựng FP-tree phụ thuộc của Z là TZ; (7) Nếu Tz thỡ gọi FP-growth (TZ,Z)
Đỏnh giỏ thuật toỏn FP-growth:
Nhƣ đó phõn tớch ở trờn, thuật toỏn này hiệu quả hơn thuật toỏn Apriori, thực hiện rất tốt cho mẫu phổ biến ngắn cũng nhƣ dài. Sau đõy là một số nhận xột đỏnh giỏ về thuật toỏn này.
- Độ phức tạp về thời gian:
Chỉ duyệt cơ sở dữ liệu 2 lần
Thời gian xõy dựng cõy là O (n), với n là số cỏc tỏc vụ của cơ sở dữ liệu - tức là tuyến tớnh với số cỏc tỏc vụ.
- Độ phức tạp về khụng gian:
O(n) với n là số cỏc tỏc vụ của cơ sở dữ liệu.
Độc ao của cõy đƣợc giới hạn bởi kớch thƣớc của tỏc vụ lớn nhất.
- Thuật toỏn khụng bao giờ bị ngắt bởi một mẫu dài nào của mọi tỏc vụ. Cõy FP-
tree duy trỡ đầy đủ thụng tin cho khai thỏc cỏc mẫu phổ biến. Đồng thời thuật toỏn cũng rỳt gọn hợp lý cỏc thụng tin cần thiết - cỏc mục khụng phổ biến đó bị loại bỏ ngay.
- Kỹ thuật sắp theo trật tự giảm dần của tần số, điều đú dẫn đến cỏc mục phổ biến hơn đƣợc chia sẻ nhiều hơn. Cõy FP-tree khụng bao giờ lớn hơn cơ sở dữ liệu gốc.