Một số thuật toán luật kết hợp

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu luật kết hợp và ứng dụng trong bài toán xây dựng hệ hỗ trợ học sinh trung học phổ thông (Trang 27)

2.3.1 Thuật toán Fp_Growth

Thuật toán kinh điển Apriori tìm tập mục phổ biến thực 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 tình huống mà số các mẫu nhiều, mẫu dài hoặc độ hỗ trợ cực tiểu thấp, các thuật toán Apriori gặp phải chi phí lớn.

Chi phí cho số lƣợng khổng lồ các tập ứng cử. Ví dụ: nếu cứ 10^4 tập 1- mục phổ biến thì thuật toán Apriori sẽ cần sinh ra hơn 10^7 các ứng cử 2-item 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 số mẫu phổ biến kích thƣớc (độ dài) là l, thuật toán phải kiểm tra (2^l-2 ) các mẫu phổ biến tiềm năng. Ví dụ l=100, chẳng hạn là {a1,a2,....,a100}, nó phải sinh ra tổng số 2^100 =10^30 các ứng cử (đấy chính là số tập con của tập có 100 phần tử).

Đòi hỏi lặp lại nhiều lần duyệt CSDL để kiểm tra tập rất lớn các ứng cử. Số lần duyệt CSDL 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. Trong trƣờng hợp mẫu phổ biến dài hơn và CSDL lớn, có nhiều bản ghi, điều này là không thể thực hiện đƣợc. Thuật toán Apriori chỉ thích

hợp cho các CSDL thƣa (sparse), với các CSDL dày (dense) thì thuật toán thực hiện kém hiệu quả hơn.

Thuật toán tìm các tập phổ biến hiệu quả hơn thuật toán Apriori là thuật toán Fp-tree và Fp-Growth.

2.3.2 Thuật toán Fp_Tree

Đƣợc gọi là cây mẫu phổ biến (frequent pattern tree hoặc gọi tắt là FP- tree) dùng để nén dữ liệu thích hợp. Chỉ có các mục độ dài l (l-item) ở trong cây và các nút của cây đƣợc sắp đặt để các nút 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. CSDL lớn đƣợc nén chặt tới cấu trúc dữ liệu nhỏ hơn (FP-tree), tránh đƣợc chi phí lặp lại duyệt qua CSDL.

Thuật toán xây dựng FP-tree:

Input: Cơ sở dữ liệu giao dịch DB và ngƣỡng hỗ trợ tối thiểu là ξ.

Output: Cây FP-Tree, cây chứa các mẫu phổ biến.

FP-tree được xây dựng theo các bước sau đây:

B1. Duyệt DB lần đầu để thu đƣợc tập F gồm các đối tƣợng phổ biến (frequent item) và độ hỗ trợ (support count) của chúng. Sắp xếp các đối tƣợng (item) trong F giảm dần theo supprort count ta đƣợc danh sách L.

B2. Tạo nút gốc T.

Tạo bảng Header H có |F| dòng và đặt tất cả các node –link chỉ đến null. B3. For each giao tác G thuộc DB

a. Chọn các đối tƣợng phổ biến của G và sắp xếp theo thứ tự của danh sách L đƣợc dạng [p, P], trong đó p là phần tử đầu tiên và P là danh sách còn lại.

2.3.3 Thuật toán Fast Algorithm for Discovering Frequent Itemsets (FIT)

Khai phá luật kết hợp là một vấn đề khai phá dữ liệu quan trọng đã đƣợc nghiên cứu rông rãi. Một thuật toán nhanh và đơn giản cho danh sách các thuộc tính giao nhau sử dụng Bảng dữ liệu hỏng đƣợc trình bày. FIT đƣợc thiết kế để tính toán một cách hiệu quả tất cả các tập phổ biến trong cơ sở dữ liệu lớn. Nó triển khai các ý tƣởng tƣơng tự nhƣ Eclat nhƣng có hiệu suất tính toán tốt hơn nhiều so với Eclat do hai khía cạnh:

1) FIT có tổng số các phép so sánh ít hơn cho từng hoạt động giao nhau giữa hai danh sách thuộc tính,

2) FIT giảm đáng kể tổng số hoạt động giao nhau. Các kết quả thực nghiệm chứng minh rằng hiệu suất của FIT là tốt hơn nhiều so với các thuật toán Apriori và Eclat

Với một cơ sở dữ liệu D, và minsup, mô tả chính thức của các phƣơng pháp đơn giản đƣợc thể hiện nhƣ sau :

Bƣớc 1)

Chuyển đổi D vào các thuộc tính định dạng danh sách và tính toán

L1. Sắp xếp tài liệu và danh sách thuộc tính tƣơng ứng trong L1 vào trật

tự không tăng theo số lƣợng các thuộc tính trong danh sách. Đánh dấu tất cả các tập phổ biến ở L1 không truy cập

Bƣớc 2)

Thiết lập một bảng băm (hb) với | D | mục. Thiết lập từng mục trong hb đến -1. Đặt k đến 1. Bƣớc 3)

Nếu tất cả các tập phổ biến trong Lk đã đƣợc truy cập, và k bằng 1, các tính toán chấm dứt. Nếu tất cả các tập phổ biến trong Lk đã đƣợc truy

cập, và k không bằng 1, giảm k bằng 1. Bƣớc 4)

Quét các danh sách thuộc tính của các tập phổ biến không truy cập đầu tiên (X) trong Lk ,. Đối với mỗi thuộc tính (vx) bộ hb [vx] tới 1. Đánh dấu X truy cập.

Bƣớc 5)

Quét các danh sách thuộc tính của bất kỳ của các tập phổ biến khác (Y) theo sau X trong Lk. Đối với mỗi thuộc tính (ty), nếu hb [vy] bằng 0, loại bỏ ty. Nếu hb [vy] bằng 1, đặt vy vào danh sách thuộc tính kết quả. Nếu số lƣợng các thuộc tính trong danh sách thuộc tính kết quả là không ít hơn minsup, đặt các tập phổ biến (XY) và danh sách thuộc tính kết quả vào Lk + 1. Đánh dấu các tập phổ biến XY không truy cập trong Lk + 1

Bƣớc 6)

Thiết lập lại các mục trong hb đến -1. Nếu Lk+1 không phải là trống, tăng

k bằng 1 và quay trở lại bƣớc 4). Nếu không, đi đến bƣớc 3).

2.3.4 Thuật toán NSFIALGORITHM

Khai thác tập phổ biến là một yếu tố cơ bản liên quan đến nhiều vấn đề khai thác dữ liệu hƣớng vào việc tìm kiếm mô hình thú vị trong dữ liệu. Gần đây các thuật toán PrePost, một thuật toán mới cho khai thác tập phổ biến dựa trên ý tƣởng của N-list, mà trong nhiều trƣờng hợp làm tốt hơn. Tác giả đã đề xuất một phiên bản cải tiến của PrePost, N-list và bao hàm dựa trên thuật toán khai thác tập phổ biến (NSFI) thuật toán có sử dụng một bảng băm để tăng cƣờng quá trình tạo ra các N-list liên kết với 1 tập phổ biến và tồn tại đƣợc cải thiện N-list thuật toán giao nhau. Hơn nữa, hai định lý mới đƣợc đề xuất để xác định '' bao hàm index '' của thƣờng xuyên 1-tập phổ biến dựa trên khái niệm N-list. Sử dụng chỉ số bao hàm, NSFI có thể xác định các nhóm của tập phổ biến mà không xác định N-list ch liên kết với chúng. Kết quả cho thấy NSFI nhanh hơn so PrePost về thời gian chạy và sử dụng bộ nhớ và nhanh hơn so với clat triển về mặt thời gian chạy.

Deng et al. [3] đề xuất một chức năng giao điểm N-danh sách để xác định giao điểm của hai N-danh sách đó là O (n + m + k) trong đó n, m và k là độ dài của đầu tiên, thứ hai và kết quả là N-danh mục (chức năng di chuyển qua danh sách N- kết quả nhƣ vậy là để hợp nhất cùng PP-mã). Trong phần này chúng tôi trình bày một chức năng giao điểm N-list đƣợc cải tiến để cung cấp cho O (n + m). Chức năng cải tiến này cung cấp những lợi thế mà nó không đi qua các kết quả N-list để hợp nhất các mã PP- cùng. Hơn nữa, chúng tôi cũng đề xuất một chiến lƣợc đầu bỏ bao gồm ba bƣớc: (i) xác định tổng tần số đầu tiên và thứ hai N-danh sách ký hiệu là SF, (ii) cho mỗi Ci PP-mã, mà không thuộc về kết quả N-list, cập nhật SF = SF - C.frequency, và (iii) nếu SF giảm xuống dƣới \ minSup xn] dừng lại (các tập phổ biến hiện đang đƣợc coi là không thƣờng xuyên). Với các chức năng trên giao điểm N-list cải thiện

Thuật toán N-list cải tiến

function NL_intersection (PS1, PS2)

1. let PS3←∅, sF ← σ(PS1) + σ (PS2), i = 0, j = 0 and f = 0 2. while i < |PS1 | and j < |PS2| do

3. if PS1[i].pre < PS2[j].pre then 4. if PSi[i].post > PS2[j].post then

5. if |PS3| > 0 and pre value of the last element in PS3 equal to PS1[i].pre then

6. increase the frequency value of the last element in PS3 by PS2[j ] .frequency

7. else

8. add the tuple (PS1[i].pre, PS1[i].post, PS2[j]. frequency) to PS3

9. increase f by PS2[j ].frequency and increase j by 1 10. else

12. else

13. sF = sF - PS2[j].frequency and increase j by 1 14. if sF < threshold then

15. return null // stop the procedure 16. return PS3 and f

procedure Find_Subsume (l1) // chỉ số bao hàm thủ tục

1. for i ← 1 to | l1 | - 1 do

2. for j ← i - 1 to 0 do

3. if j ϵl1 [i] .Subsumes then continue

4. if checkSubsume (l1 [i] N-list, l1 [j ] .N-list) is true then 5. add l1 [ j ] . name and its index, j, to l1[i].Subsumes 6. . add all elements in l1[j ]. Subsumes to l1[i] . Subsumes function checkSubsume (Na, Nb)

1. . let i = 0 and j = 0

2. while j < | Na | and i < |Nb| do

3. if Nb [i] .pre < Na[j] .pre and Nb[i].post > Na[j].post then 4. increase j by 1

5. else increase i by 1 6. if j = |Na| then 7. return true 8. return false

Định lý đƣợc đề xuất trong Song et al, đƣợc đại diện trong phái. 2.5, cũng đã đƣợc thông qua trong thuật toán NSFI để tăng tốc độ Thông qua hoạt động của định lý này cũng giúp làm giảm nhu cầu sử dụng bộ nhớ các thuật toán của NSFI, bởi vì nó không phải là cần thiết để xác định và lƣu trữ các N- danh sách liên kết với một nhóm các tập phổ biến để xác định ngƣỡng hỗ trợ.

Đầu tiên các thuật toán NSFI tạo PPC-cây, sau đó đi qua cây này để tạo ra N-danh sách liên quan đến việc thƣờng xuyên 1-itemset. Sau đó, một chiến

lƣợc chia-và-chinh phục, cùng với khái niệm chỉ số bao hàm, đƣợc sử dụng để tôi tập phổ biến. Đối với mỗi phần tử X, nếu chỉ số bao hàm của nó có các yếu tố, tập hợp các tập phổ biến đƣợc sản xuất bằng cách kết hợp với các yếu tố X trong chỉ số bao hàm của nó là thƣờng xuyên và có sự hỗ trợ tƣơng tự nhƣ X. Đối với mỗi nguyên tố còn lại không đƣợc chứa trong các bao hàm chỉ số của X, thuật toán sẽ kết hợp chúng với X để tạo ra các tập phổ biến ứng cử viên thƣờng xuyên. Lƣu ý rằng đối với 2 tập phổ biến hoặc nhiều hơn, thuật toán không sử dụng các chỉ số bao hàm.

Thuật toán NSFI ALGORITH Input: A dataset DB and minSup

Output: FIs, the set of all frequent itemsets

1. Construct_PPC_tree (DB, minSup) to generate R., l1, H1 and threshold

2. Generate_NList (R, l1)

3. Find_Subsume (l1)

4. let FIsl1 and Subsume ← {} 5. Find_FIs (l1, Subsumes)

6. return FIs

procedure Generate_NList (R, l1)

1. let C ← (R.pre, R.post, R. frequency) 2. add C to H1[R. .name] .N-list

3. increase H1 [R. .name] . frequency by C. frequency 4. for each child in R. .children do

5. Generate_NList(child) procedure Find_FIs (Is, S)

1. for i ←Is. size - 1 to 0 do 2. let FIsnext ← 0

4. let S be the set of subset generated from all elements of

Is [i] . Subsumes

5. for each s in S do

6. add (s. Is [i] . frequency) to FIs //using theorem 4 7. else if |Is[i] | = 1 then

8. S← {}

9. indexS = |Is [i] .Subsumes | - 1 10. for j ←i - 1 to 0 do

11. if indexS ≥ 0 and Is [i].Subsumes[indexS] = j then 12. indexS = indexS - 1 and continue

13. let efirst be the first item of Is[j] 14. FI ← { efirst } + Is[i]

15. (FI.N-list and FI. frequency) ← NL_intersection (Is [j ] .N-list, Is [i] .N-list)

16. if FI.N-list = null then continue 17. if(FI.frequency ≥ threshold) then 18. add FI to FIs

19. insert FI at first in FIsnext

20. for each subsume in S do 21. let f = FI + subsume

22. f.frequency = FI.frequency 23. add f to FIs // using theorem 4 24. Find_FIS (FIsnext, S)

2.4 Thuật toán FSM

Năm 2005, Yu-Chiang Li và đồng nghiệp tại Khoa Khoa học máy tính và Kỹ thuật thông tin của Đại học Chung Chen, Đài Loan giới thiệu thuật toán FSM (Fast Share Measure), đây là một thuật toán hiệu quả tìm ra tất cả các tập mục cổ phần cao. Thay vì khai thác tính chất Apriori, thuật toán FSM sử dụng một số tính chất của tập mục cổ phần cao để rút gọn các tập mục ứng viên.

2.4.1 Cơ sở lý thuyết của thuật toán FSM

Ký hiệu:

 Giá trị cổ phần tối thiểu(minimum local measure value) là min_lmv, min_lmv= minShare x Tmv;

 Độ dài cực đại (maximum length) của các giao tác trong cơ sở dữ liệu là

ML,

MLmaxTq |TqDB;

 Giá trị cực đại (maximum value) của tất cả các mục trong cơ sở dữ liệu là MV,

 

max ( ,p q) | p q q

MVmv i T i   T T DB .

Cơ sở lý thuyết của thuật toán đƣợc thể hiện trong mệnh đề sau: Cho minShare và k-itemset X không là tập mục cổ phần cao. Nếu:

( )

( ) lmv X ( ) min_

lmv X MV ML k lmv

k

    

thì tất cả các tập cha của X không là tập mục cổ phần cao. Đặt CF X( ) lmv X( ) lmv X( ) MV (ML k)

k

     , CF(X) gọi là hàm tới hạn. Mệnh đề trên đảm bảo rằng: nếu X không là tập mục cổ phần cao và

( )

CF Xmin_lmv thì không có tập cha nào của X là tập mục cổ phần cao. Thuật toán FSM dựa vào mệnh đề này để tỉa các tập mục ứng viên.

2.4.2 Nội dungcơ bản của thuật toán FSM

Thuật toán duyệt nhiều lần CSDL, ở lần duyệt thứ k, Ck lƣu các tập mục

ứng viên, RCk lƣu các tập mục nhận đƣợc sau khi kiểm tra hàm tới hạn CF, Fk

lƣu các tập mục cổ phần cao nhận đƣợc.

Giống nhƣ thuật toán Apriori, ban đầu mỗi mục dữ liệu là một ứng viên. Trong lần duyệt thứ nhất, thuật toán duyệt cơ sở dữ liệu, tính giá trị của mỗi mục dữ liệu. Mỗi ứng viên 1- tập mục X sẽ bị tỉa nếu CF(X)< min_lmv. Trong mỗi lần duyệt tiếp theo, các tập mục ứng viên đƣợc tạo ra bằng cách nối hai (k-

1)-itemset trong RCk-1 nếu chúng có (k-2) mục đầu giống nhau và nhận đƣợc k-

itemset, kết nạp vào tập Ck (giả sử các mục của cơ sở dữ liệu đã đƣợc sắp thứ

tự). Tất cả k tập con với độ dài (k-1) của mỗi k-itemset trong Ck là phải thuộc

RCk-1 , nếu không k-itemset này sẽ bị tỉa. Sau khi Ck đƣợc sinh ra, xóa tập RCk-1

. Tiếp theo, thuật toán duyệt cơ sở dữ liệu để tìm tập mục cổ phần cao. Với mỗi tập mục X trong Ck , nếu tập mục này có lmv X min lmv_ thì X là tập mục cổ phần cao và đƣợc thêm vào Fk; Ngƣợc lại, xét hàm tới hạn CF, nếu

( )

CF Xmin_lmv thì tập ứng viên X bị loại khỏi RCk. Quá trình trên cứ lặp cho đến khi không có tập mục ứng viên nào đƣợc sinh ra.

2.4.3. Một số khái niệm của thuật toán

Cho tập các mục (item) I i i1, ,...,2 in. Một giao tác (transaction) T là một tập con của I, TI. Cơ sở dữ liệu là một tập các giao tác DBT T1, 2,...,Tm. Mỗi giao tác đƣợc gán một định danh TID. Một tập mục con XI, gồm k mục phân biệt đƣợc gọi là một k-itemset. Giao tác T gọi là chứa tập mục X nếu XT .

MV (Measure Value – Giá trị tập mục trong giao tác): Ta ký hiệu giá trị của mục ip trong giao tác Tq là mv i T( ,p q), mv i T( ,p q) có giá trị là số tự nhiên (nhƣ số lƣợng đã bán của một mặt hàng trong giao tác), tức là, mv i T( ,p q)0

nếu ipTqmv i T( ,p q) 1 nếu ipTq.

TMV (Transaction Measure Value – Giá trị giao tác): Giá trị của giao tác

Tq là tổng giá trị các mục dữ liệu trong giao tác, ký hiệu là tmv(Tq), tức là

p q

q p q i T

tmv(T ) = mv(i ,T )

 . Tổng giá trị các mục dữ liệu trong cơ sở dữ liệu DB, ký hiệu là Tmv, p p i (i , ) q q q T DB T Tmv mv T  

   . Tƣơng tự, với cơ sở dữ liệu con

dbDB, p p i ( ) (i , ) q q q T db T Tmv db mv T      .

Ví dụ 2.1 : Cho cơ sở dữ liệu bảng 2.1, mv(D,T01)=1, mv(C,T03)=3, tmv(T01)=7, tmv(T03)=10, Tmv(DB) = 56. TID A B C D E F G H tmv T01 1 1 1 1 1 0 1 1 7 T02 0 0 0 0 0 4 0 3 7 T03 0 4 3 3 0 0 0 0 10 T04 0 0 4 0 1 0 0 0 5 T05 0 3 0 2 0 0 0 0 5 T06 0 3 2 1 0 0 0 0 6 T07 0 3 4 1 2 0 0 0 10 T08 4 0 0 0 0 1 1 0 6 lmv 5 14 14 8 4 5 2 4 56 Bảng 2.1. Cơ sở dữ liệu

Ký hiệu dbX là tập các giao tác chứa tập mục X,

 | 

X q q q

dbT TDB X T .

IMV (Itemset Measure Value): Cho giao tác Tq chứa tập mục X. Giá trị của tập mục X trong Tq, ký hiệu imv X T , q, là tổng giá trị của các mục ip trong Tq

thuộc X, ( , ) ( , ) p q p q i X imv X T mv i T    , với XTq.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu luật kết hợp và ứng dụng trong bài toán xây dựng hệ hỗ trợ học sinh trung học phổ thông (Trang 27)