Tải bản đầy đủ (.pdf) (6 trang)

Thuật toán song song khai thác tập sinh tối thiểu của tập phổ biến đóng

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 (319.96 KB, 6 trang )

Thuật Toán Song Song Khai Thác
Tập Sinh Tối Thiểu của Tập Phổ Biến Đóng
Phan Thành Huấn1,2
1

Bộ môn Tin học, Trường Đại học Khoa học Xã hội và Nhân văn, ĐHQG.HCM-VN
2
Khoa Toán – Tin học, Trường Đại học Khoa học Tự nhiên, ĐHQG.HCM-VN
Email:

Tóm tắt - Trong khai thác dữ liệu, khai thác luật kết hợp là một
trong những kỹ thuật quan trọng và được nghiên cứu nhiều. Đặc
biệt là kỹ thuật khai thác luật kết hợp chính xác và không dư
thừa, một số tác giả đã đề xuất khai thác luật kết hợp này từ tập
sinh tối thiểu của tập phổ biến đóng. Trong bài viết này, chúng
tôi đề xuất thuật toán song song MCP-mGCFI khai thác nhanh
tập sinh tối thiểu của tập phổ biến đóng trên bộ xử lý đa nhân.
Thuật toán đề xuất dễ dàng mở rộng trên nhiều hệ thống tính
toán phân tán như Hadoop, Spark. Kết quả thực nghiệm trên bộ
dữ liệu thực của UCI và bộ dữ liệu giả lập của trung tâm nghiên
cứu IBM Almaden, cho thấy thuật toán đề xuất hiệu quả.
Từ khóa - Bộ xử lý đa nhân, luật kết hợp, tập sinh tối thiểu, tập
phổ biến đóng, thuật toán song song MCP-mGCFI.

I.
GIỚI THIỆU
Năm 1993, R.Agrawal đã đề xuất mô hình cơ bản khai
thác luật kết hợp từ dữ liệu giao dịch dạng nhị phân theo hai
giai đoạn [1]: sinh tập phổ biến (Frequent Itemset - FI) và sinh
luật tin cậy kết hợp từ tập phổ biến. Khi đó, số lượng tập mục
phổ biến được sinh ra rất lớn và chiếm rất nhiều thời gian. Một


số tác giả trên thế giới đã đề xuất thuật toán sinh tập phổ biến
đóng (Closed Frequent Itemset - CFI) [2-3], đây là tập không
dư thừa và có kích thước nhỏ hơn FI rất nhiều lần (CFI ⊆ FI).
Tuy nhiên, để sinh các luật kết hợp chính xác cũng như không
dư thừa, một số tác giả đã đề xuất khai thác tập sinh tối thiểu
của tập phổ biến đóng (minimal Generators Closed Frequent
Itemset – mGCFI) [4-9] như thuật toán SSMG[4], Zart[5],
MG-CHARM[6], và DefMe[9]. Các thuật toán trên tựa
Apriori, tìm kiếm theo chiều sâu và sử dụng cấu trúc SETree, IT-Tree – các thuật toán này tốn nhiều bộ nhớ và đọc
dữ liệu nhiều lần; cũng như không hiệu quả trên các loại dữ
liệu có mật độ dày hoặc thưa.
Trong bài viết này, chúng tôi đề xuất thuật toán khai thác
song song tập sinh tối thiểu. Thuật toán đề xuất theo hướng
tiếp cận song song dữ liệu và cả chức năng, dưới đây là các
thuật toán liên quan trong bài viết:
- Xây dựng mảng Index_COOC chứa itemset đồng xuất
hiện và itemset xuất hiện ít nhất trong một giao dịch của
từng item hạt nhân;
- Dựa trên Index_COOC xây dựng cây nLOOC-Tree;
- Thuật toán tuần tự SEQ-mGCFI khai thác tập sinh tối
thiểu của tập phổ biến đóng dựa trên cây nLOOC-Tree;
- Thuật toán song song MCP-mGCFI khai thác nhanh tập
sinh tối thiểu của tập phổ biến đóng trên BXLĐN.
Trong phần 2, bài báo trình bày các khái niệm cơ bản về tập
phổ biến, tập phổ biến đóng và tập sinh tối thiểu. Phần 3, xây

dựng thuật toán xác định mảng chứa itemset xuất hiện ít nhất
trong một giao dịch của từng item hạt nhân, thuật toán sinh cây
nLOOC-Tree và thuật toán tuần tự SEQ-mGCFI khai thác
tập sinh tối thiểu. Phần 4, nhóm tác giả dựa trên thuật toán tuần

tự ở Phần 3 để xây dựng thuật toán song song MCP-mGCFI
khai thác hiệu năng của bộ xử lý đa nhân. Kết quả thực nghiệm
được trình bày trong phần 5 và kết luận ở phần 6.
II.

CÁC KHÁI NIỆM CƠ BẢN

A. Tập phổ biến
Cho I = {i1, i2,..., im} là tập gồm m mục hàng, mỗi mục
hàng gọi là item. Tập các item X ={i1, i2,..., ik}, ∀ij ∈ I (1≤ j ≤
k) gọi là itemset, itemset có k item gọi là k-itemset. Ɗ là dữ
liệu giao dịch, gồm n bản ghi gọi là tập các giao dịch T = {t1,
t2,..., tn}, mỗi giao dịch tk ={ik1, ik2,..., ikm}, ikj ∈ I (1≤ kj ≤ m).
Định nghĩa 1: Độ phổ biến (support) của itemset X ⊆ I, ký
hiệu sup(X), là số các giao dịch trong Ɗ có chứa X.
Định nghĩa 2: Cho X ⊆ I, X gọi là itemset phổ biến nếu
sup(X) ≥ minsup, với minsup là ngưỡng phổ biến tối thiểu.
Cho dữ liệu giao dịch Ɗ trong Bảng 1.
Bảng 1. Dữ liệu giao dịch Ɗ cho ví dụ
Mã giao dịch
t1

A

C

t2
t3

A


C

t4
t5
t6

A
A

t7
t8

A
A

B

t9
t10

A
A

B

Tập item
E F
G
E


C
C
C
C
C
C

D

H
F

G
G

E
E
E
D
E
E

F

G
G

Dữ liệu ở Bảng 1, có 8 items I ={A, B, C, D, E, F, G, H}
và 10 giao dịch T = {t1, t2, t3, t4, t5, t6, t7, t8, t9, t10}.

Định nghĩa 3: Cho X ⊆ I, X được gọi là itemset phổ biến
đóng nếu X là itemset phổ biến và không có tập cha cùng độ
phổ biến. Tập hợp chứa các itemset phổ biến đóng gọi là tập
phổ biến đóng, ký hiệu là CFI.
Định nghĩa 4: Cho X ⊆ I, X ∈CFI, tất cả các itemset con
thực sự của X có cùng độ phổ biến với X được gọi là itemset
sinh của itemset phổ biến đóng X. Tập hợp chứa các itemset
sinh của các itemset phổ biến đóng gọi là tập sinh của tập phổ
biến đóng, ký hiệu là GCFI.

176


Định nghĩa 5: Cho X ⊆ I, ∀ X ∈ mGCFI ⊆ GCFI, không
tồn tại tập con của X có cùng độ phổ biến với X. Ta nói
mGCFI là tập chứa các itemset sinh tối thiểu của các itemset
phổ biến đóng.
Bảng 2. Tập CFI, GCFI và mGCFI trên Ɗ với minsup = 3
CFI
#CFI=6

k-itemset
1

E

2

AC


3

FAC, GAC, EAC

4

GEAC

GCFI
#GCFI=13
F, G, A, C
FA, FC, GE, GA,
GC, EA, EC
GEA, GEC

mGCFI
#mGCFI=7
F, G, A,C
GE, EA, EC

Trong Bảng 2, cho thấy tập phổ biến đóng CFI, tập sinh
GCFI và tập sinh tối thiểu mGCFI của tập phổ biến đóng
chứa k-itemset lần lượt có số lượng CFI = 6, GCFI =13,

mGCFI = 7, tỷ suất mGCFI GCFI = 7 13 × 100% = 54% .
Qua đó, ta dễ dàng thấy mGCFI ⊆ GCFI.
B. Tổ chức lưu trữ dữ liệu giao dịch
Lưu trữ dữ liệu giao dịch dạng bit là cấu trúc dữ liệu hiệu
quả trong [10]. Chuyển dữ liệu giao dịch thành một ma trận
nhị phân BiM, trong đó mỗi dòng tương ứng với một giao

dịch và mỗi cột tương ứng với một item. Nếu item thứ ik xuất
hiện trong giao dịch tj thì bit thứ i của dòng tj trong BiM sẽ
mang giá trị 1, ngược lại sẽ mang giá trị 0.
III.

CÁC THUẬT TOÁN ĐỀ XUẤT

A. Tập chiếu và items xuất hiện ít nhất trên cùng một giao
dịch với item hạt nhân có thứ tự
Tập chiếu của item ik trên dữ liệu giao dịch Ɗ: π (ik)={t∈
Ɗ│ik ∈t} là tập các giao dịch có chứa item ik.
sup(ik) = |π ( ik)|
(1)
Tập chiếu của itemset X={i1, i2,..., ik}, ∀ij ∈ I (1 ≤ j ≤ k):
π(X) = {π(i1) ∩ π(i2)… π(ik)}.
sup(X) = |π(X)|
(2)
Ví dụ 1: Theo Bảng 1, có π (A) = {t1, t2, t4, t5, t7, t8, t9,
t10} và π (B) = {t7, t9}. Khi đó, π (AB) = π (A)∩π (B)= {t1,
t2, t4, t5, t7, t8, t9, 10}∩{t7, t9} = {t7, t9}, π (B) ⊆ π (A) và
π (AB) ⊆ π (A).
Để tránh trùng lặp không gian sinh, chúng tôi đưa ra Định
nghĩa 6 và 7– các item có thứ tự theo độ phổ biến:
Định nghĩa 6: (Rút gọn không gian tìm kiếm) Cho ik ∈ I
(i1 ≺ i2 ≺ … ≺ im) thứ tự theo độ phổ biến, ta gọi ik là item hạt
nhân. Tập Xlexcooc ⊆ I gọi đồng xuất hiện có thứ tự với item ik:
Xlexcooc là tập các item xuất hiện cùng ik và π ( ik) ≡ π ( ik
∪xlexcooc) , ∀ Xlexcooc∈ Ƥ≥1(Xlexcooc). Ký hiệu, Xlexcooc =
lexcooc(ik).
Định nghĩa 7: Cho ik ∈ I (i1 ≺ i2 ≺ … ≺ im) thứ tự theo độ

phổ biến, ta gọi ik là item hạt nhân. Tập Ylexlooc ⊆ I chứa các
item xuất hiện có thứ tự cùng với ik ít nhất trong một giao dịch,
nhưng không đồng xuất hiện: 1≤|π ( ik∪ylexlooc) | < |π ( ik)| ,
∀ ylexlooc∈ Ƥ≥1(Ylexlooc). Ký hiệu, Ylexlooc = lexlooc(ik).
Ví dụ 2: Xem item G là item hạt nhân, ta xác định được các
item xuất hiện cùng với item B ít nhất trong một giao dịch là
looc(G) = {B, D, E, F} có π (G) = {t2, t4, t5, t9, t10} và π (GB)
= {t9}, π (GE) = {t5, t9, t10}.

Trong phần này, chúng tôi trình bày thuật toán sinh các
item đồng xuất hiện và xuất hiện ít nhất trong một giao dịch
với item hạt nhân, được lưu trữ vào mảng Index_COOC. Mỗi
phần tử trong Index_COOC gồm có 4 thành phần thông tin:
- Index_COOC[k].item: item hạt nhân thứ k;
- Index_COOC[k].sup:độ phổ biến của item hạt nhân thứ k;
- Index_COOC[k].cooc: các item đồng xuất hiện cùng item
hạt nhân thứ k dạng bit;
- Index_COOC[k].looc: các item xuất hiện cùng item hạt
nhân thứ k ít nhất trong một giao dịch dạng bit;
Mã giả thuật toán 1. Xây dựng Index_COOC
Đầu vào: Dữ liệu giao dịch Ɗ
Đầu ra: Ma trận BiM, mảng Index_COOC

1.
2.
3.
4.
5.
6.
7.

8.
9.
10.
11.
12.
13.
14.
15.
16.

Với mỗi phần tử k của mảng Index_COOC:
Index_COOC[k].item = ik
Index_COOC[k].sup = 0
Index_COOC[k].cooc= 2m - 1
Index_COOC[k].looc= 0
Với mỗi giao dịch ti thực hiện:
Lưu giao dịch ti vào ma trận BiM
Với mỗi item k có trong giao dịch ti thực hiện:
Index_COOC[k].cooc &= vectorbit(ti)
Index_COOC[k].looc |= vectorbit(ti)
Index_COOC[k].sup + +
Sắp xếp mảng Index_COOC tăng dần theo sup
Với mỗi phần tử k của mảng Index_COOC:
Index_COOC[k].cooc= lexcooc(ik)
Index_COOC[k].looc= lexlooc(ik)
Trả về mảng Index_COOC, ma trận BiM

Minh họa thuật toán 1: thực hiện từ dòng 1 đến 11
Khởi tạo mảng Index_COOC: (thành phần cooc và looc
được biểu diễn dạng bit) số item là m = 8.

item
sup
cooc
looc

A
0

B
0

C
0

D
0

E
0

F
0

G
0

H
0

11111111


11111111

11111111

11111111

11111111

11111111

11111111

11111111

00000000

00000000

00000000

00000000

00000000

00000000

00000000

00000000


G
0

H
0

Duyệt lần lượt từng giao dịch từ t1 đến t10:
Đọc t1: {A, C, E, F} có dạng bit là 10101100
A
B
C
D
E
F
item
0
0
1
1
1
1
sup )
cooc
looc

10101100

11111111


10101100

11111111

10101100

10101100

11111111

11111111

10101100

00000000

10101100

00000000

10101100

10101100

00000000

00000000

Duyệt … đến t10: {A, C, E, F, G} có dạng bit là 10101110
item

sup
cooc
looc

A
8

B
2

C
8

D
2

E
7

F
3

G
5

H
1

10100000


11101000

10100000

10110000

00001000

10100100

10100010

00001001

11111110

11101010

11111110

10110110

11101111

10111110

11111110

00001001


Dòng 10, sắp xếp theo độ phổ biến của item, ta có
Index_COOC như sau:
item
sup
cooc
looc

H
1

B
2

E

D
2

A, C, E A, C

Ø

G

F, G

F
3

G

5

E
7

A
8

C
8

A, C

A, C

Ø

C

A

D, E, G

B, D, E, F

A, B, C, F, G, H

B, D, E, F, G

B, D, E, F, G


Thực hiện rút gọn ở dòng 13, 14 và 15, ta có Bảng sau:
Bảng 3. Index_COOC có thứ tự theo độ phổ biến của item
item
sup
cooc
looc

H
1
E
Ø

B
2
A, C, E
G

D
2
A, C
F, G

F
3
A, C
G, E

G
5

A, C
E

E
7
Ø
A, C

A
8
C
Ø

C
8
Ø
Ø

Bảng 3, minh họa kết quả trả về mảng Index_COOC từ
thuật toán 1. Mảng Index_COOC có các thành phần cooc và
looc được biểu diễn theo item.
B. Thuật toán sinh cây nLOOC-Tree
Từ Index_COOC xây dựng các cây chứa các mẫu xuất
hiện ít nhất trong một giao dịch với item hạt nhân. Mỗi cây có

177


nút gốc là item hạt nhân và các nút con là items xuất hiện ít
nhất trong một giao dịch với item hạt nhân. Mỗi nút có 2

thành phần:
- nLOOC_Tree[k].item: item xuất hiện ít nhất với item
hạt nhân (nút gốc);
- nLOOC_Tree[k].sup: độ phổ biến của item xuất hiện
cùng với item hạt nhân;
Mã giả thuật toán 2: Xây dựng cây nLOOC-Tree
Đầu vào: Ma trận BiM, Mảng Index_COOC
Đầu ra: Danh sách cây nLOOC-Tree
1. Với mỗi phần tử k của mảng Index_COOC:
2. nLOOC_Tree[k].item = Index_COOC[k].item
3. nLOOC_Tree[k].sup = Index_COOC[k].sup

4. Với mỗi item ik ∈ giao dịch tℓ :
5. Với mỗi item ij ∈ Index_COOC[k].looc:
6. Nếu ij ∉ nút con của nút gốc nLOOC-Tree[k] thì
Thêm nút con ij vào nút gốc nLOOC-Tree[k]
7.
8. Ngược lại
Thêm nút con ij vào nút gốc nLOOC-Tree[k]
9.
10.
Cập nhật sup của nút con ij của nút gốc nLOOC-Tree[k]
11.Trả về danh sách cây nLOOC-Tree

Hình 1. Cây nLOOC-Tree theo Index_COOC ở Bảng 3.
Cây nLOOC-Tree có các đặc trưng như sau:
- Chiều cao của cây nhỏ hơn hoặc bằng số lượng các item
xuất hiện ít nhất trong một giao dịch với item hạt nhân
(các item có thứ tự theo độ phổ biến).
- Mỗi đường đi đơn (single-path) là một mẫu có thứ tự từ

nút gốc (item hạt nhân) đến nút lá và độ phổ biến của một
mẫu là độ phổ biến của nút lá (ik→ik+1→…→iℓ).
- Mỗi phân đoạn đường đi đơn (sub-single-path) từ nút gốc
đến nút con bất kỳ trong đường đi đơn là một mẫu thứ tự
và độ phổ biến của mẫu là độ phổ biến của nút con ở cuối
của phân đoạn đường đi đơn.
Ví dụ 3: Xét item hạt nhân F, có đường đi đơn {F → G →
E} và sup(FGE) = 1; phân đoạn đường đi đơn {F → G} và
sup(FG) = 2 là độ phổ biến của nút con G.
C. Thuật toán tuần tự khai thác tập sinh tối thiểu
Thuật toán SEQ-mGCFI (SEQuential-minimal Generators
Closed Frequent Itemsets): khai thác tuần tự tập sinh tối thiểu
dựa trên cây nLOOC-Tree chứa các item xuất hiện ít nhất
trong một giao dịch với từng item hạt nhân.
Trong phần này, chúng tôi trình bày các bổ đề dùng để loại
bỏ các item hạt nhân không có itemset sinh tối thiểu của
itemset phổ biến đóng.

Bổ đề 1: Xlexcooc = lexcooc(ik) thì sup(ik ∪ xsub) = sup(ik), ∀
xsub ∈ Ƥ≥1(Xlexcooc).
Chứng minh: lexcooc(ik) = Xlexcooc, ∀ xsub ∈ Ƥ≥1(Xlexcooc).
Theo Định nghĩa 6, ta có π(ik ∪ xsub) = π(ik) ∩ π(xsub) = π(ik) và
theo phương trình (1), (2) thì sup(ik ∪ xsub) = sup(ik), ∀ xsub ∈
Ƥ≥1(Xlexcooc) ■.
Ví dụ 4: Xét item F, với sup(F) = 3. Ta có, lexcooc(F) =
{A, C} thì 3 itemset kết hợp {A, C, AC} và sup(F) = sup(FA)
= sup(FC) = sup(FAC) = 3.
Bổ đề 2: ∀ik ∈ mGCFI, Xlexcooc = lexcooc(ik) thì {ik ∪ xsub}
∉ mGCFI, ∀ xsub ∈ Ƥ≥1(Xlexcooc).
Chứng minh: lexcooc(ik) = Xlexcooc, ∀ xsub ∈ Ƥ≥1(Xlexcooc).

Theo bổ đề 1, ta có thì sup(ik ∪ xsub) = sup(ik) mà ik ∈ mGCFI,
nên {ik ∪ xsub} ∉ mGCFI (Định nghĩa 5)■.
Ví dụ 5: Xét item F với minsup = 3. Ta có, {F}∈ mGCFI
và lexcooc(F) = {A, C} thì sup(F) = sup(FA) = sup(FC) =
sup(FAC) = 3, nên {FA, FC, FAC}∉ mGCFI.
Hệ quả 1: (theo bổ đề 2) ∀ ik ∈ I, nếu sup(ik) ≥ minsup và
lexcooc(ik) = {∅} thì ik ∉ mGCFI.
Bổ đề 3: ∀ ik ∈ I, Ylexlooc = lexlooc(ik): sup(ik ∪ ylexlooc) <
sup(ik), ∀ ylexlooc ∈ Ƥ≥1(Ylexlooc).
Chứng minh: sup(ik∪ ylexlooc) < sup(ik), theo định nghĩa 7,
hiển nhiên π(ik∪ ylexlooc) = π(ik) ∩ π(i1) ∩ …∩ π(ij) ⊂ π(ik), ∀
i1,j∈ ylexlooc■.
Ví dụ 6: Xét item G ≺ E, E∈lexlooc(G)={E}. Ta có,
sup(GE) = 3 < sup(G)= 5.
Hệ quả 2: (theo bổ đề 1, 3 và định nghĩa 5) ∀ sspj ∈
nLOOC-Tree(ik) ⊆ Ƥ≥1(lexlooc(ik)), nếu sup(sspj) ≥ minsup và
sup(sspj+1) < minsup thì sspj ∈ mGCFI.
Ví dụ 7: Xét item F, minsup = 2. Các đường đi con sup(F
→ G) = sup(F → E) = 2 ≥ minsup, nên {FG, FE}∈ mGCFI.
Hệ quả 3: (tập sinh tối thiểu từ các item đồng xuất hiện
hoàn toàn) ∀ ik-1 ≺ ik ∈ I, nếu sup(ik-1) = sup(ik) và ik ∈
lexcooc(ik-1) thì itemsets sinh tối thiểu từ item hạt nhân ik-1,
∀{ik-1∪X} ∈ mGCFI được sinh thêm bằng cách thay thế bởi
item hạt nhân ik, ∀{ik∪X}∈ mGCFI.
Mã giả thuật toán 3: SEQ-mGCFI
Đầu vào: Index_COOC, minsup
Đầu ra: Tập sinh tối thiểu mGCFI
1. Với mỗi Index_COOC[k].sup ≥ minsup
2.
Nếu (Index_COOC[k].cooc ≠{∅}) thì //hệ quả 1

3.
mGCFI[k]=mGCFI[k]∪
∪Index_COOC[k].item
4.
Nếu (Index_COOC[k].looc ≠{∅}) thì
5.
6.

nLOOC_Tree(Index_COOC[k].item)
SSP ← GenPath(Index_COOC[k].item)
7.
Với mỗi sspj ∈ SSP
8.
Nếu (sup(sspj)≥minsup)∧(sup(sspj+1)9.
mGCFI[k] = mGCFI[k]∪{sspj}
10. Nếu Full(Index_COOC[k].item, Index_COOC[k-1].item)thì
Replace(mGCFI[k], mGCFI[k-1])//hệ quả 3
11.
12. Trả về tập sinh tối thiểu mGCFI

Ví dụ 8: Cho dữ liệu giao dịch Ɗ trong Bảng 1 và minsup
= 3. Sau khi thực hiện thuật toán 1, ta có mảng
INDEX_COOC chứa các item xuất hiện ít nhất trong một giao
dịch với item hạt nhân, như trong Bảng 3.
Dòng 1 và 2: các item F, G, A là item sinh tối thiểu theo bổ
đề 1 và hệ quả 1;

178



Xét item F, có sup(F) = minsup = 3. Khi đó, các itemset tối
thiểu sinh từ item F là mGCFI[F] = {(F, 3)}.
Xét item G, nLOOC-Tree(G) có đường đi đơn {G → E},
sup(GE) = 3 ≥ minsup . Ta có, mGCFI[G] = {(G, 5), (GE, 3)}.
Xét item E, nLOOC-Tree(E): có đường đi đơn {E → A →
C}, sup(EAC) = 5 ≥ minsup. Ta có, mGCFI[E] = {(EA, 5),
(EC, 5)} và theo hệ quả 1 thì {(E, 7)} ∉ mGCFI[E].
Xét item A, xem cây nLOOC-Tree(A) = {∅}: theo bổ đề 2
thì itemset tối thiểu sinh từ item A là mGFI[A] = {(A, 8)}.
Xét item C, theo hệ quả 3 thì item C đồng xuất hiện hoàn
toàn cùng với item A: mGFI[C] = {(C, 8)}.
Bảng 4. Tập sinh tối thiểu mGCFI trên Ɗ với minsup = 3
Item hạt nhân
Tập sinh tối thiểu mGCFI
(F, 3)
F
G
(G, 5)
(GE, 3)
(EC, 5)
E
(EA, 5)
A

(A, 8)

C

(C, 8)


IV.

THUẬT TOÁN SONG SONG MCP-MGCFI

Hình 2. Sơ đồ song song hóa cho Pha 1

Hình 2, phân chia dữ liệu Ɗ thành c tập dữ liệu con Ɗ1,
Ɗ2,…, Ɗc-1, Ɗc ứng với từng nhân Ci thực hiện thuật toán 1 với
đầu vào là dữ liệu Ɗi và đầu ra là mảng Index_COOCi tương
ứng. Để tính mảng Index_COOC cho Ɗ, thực hiện phép tính:
Index_COOC = Index_COOC1 ⊕Index_COOC2⊕…(3)
Sau đó, sắp xếp mảng Index_COOC tăng dần theo sup và
chuẩn hóa theo dòng 13, 14 và 15 của thuật toán 1.
Ví dụ 9: Giả sử Ɗ được chia thành 2 tập - Ɗ1 có 5 giao
dịch {t1, t2, t3, t4, t5} và Ɗ2 có 5 giao dịch {t6, t7, t8, t9, t10}.
Ɗ1 chạy thuật toán 1 trên nhân C1 và trả về Index_COOC1:
A
4
10100000

B
0
11111111

C
4
10100000

D

1
10110110

E
3
00001000

F
2
10100100

G
3
10100010

H
1
00001001

10111110

00000000

10111110

10110110

10101111

10111110


10111110

00001001

Ɗ2 chạy thuật toán 1 trên nhân C2 và trả về Index_COOC2:
item
sup
cooc
looc

item
sup
cooc
looc

A
8
10100000

B
2
11101000

C
8
10100000

D
2

10110000

E
7
00001000

F
3
10100100

G
5
10100010

H
1
00001001

11111110

11101010

11111110

10110110

11101111

10111110


11111110

00001001

Bước thứ hai, song song hóa Pha 2 theo sơ đồ sau:

Hình 3. Sơ đồ song song hóa cho Pha 2

Ngày nay, nhiều máy tính cá nhân có trên hai nhân cho
phép nhiều luồng xử lý được thực hiện đồng thời – điều này
làm cho máy tính có được tốc độ xử lý nhanh và khả năng đa
nhiệm tốt hơn. Để tận dụng hiệu năng của bộ xử lý đa nhân
(BXLĐN), cần phân phối xử lý đồng thời trên nhiều nhân cho
nhiều pha/ bài toán để tiết kiệm thời gian/ nâng cao hiệu năng.
Chúng tôi xây dựng thuật toán song song MCP-mGCFI
(Multi Core Processor - minimal Generators Closed Frequent
Itemsets) khai thác tập sinh tối thiểu trên BXLĐN dựa trên
thuật toán tuần tự SEQ-mGCFI.
Thuật toán tuần tự SEQ-mGCFI, gồm 2 pha chính:
- Pha 1: Xây dựng mảng Index_COOC;
- Pha 2: Thuật toán SEQ-mGCFI khai thác tập sinh tối
thiểu từ mảng Index_COOC.
Bước thứ nhất, song song hóa Pha 1 theo sơ đồ dưới đây:

item
sup
cooc
looc

Tính mảng Index_COOC cho Ɗ: Index_COOC =

Index_COOC1 ⊕ Index_COOC2

A
4
10100000

B
2
11101000

C
4
10100000

D
1
10110000

E
4
00001000

F
1
10101110

G
2
10101010


H
0
11111111

11111110

11101010

11111110

10110000

11101110

10101110

11101110

00000000

Hình 3, phân chia mảng Index_COOC từ i1 đến im thành c
phần ứng với từng nhân Cj thực hiện thuật toán SEQ-mGCFI
với đầu vào là mảng Index_COOC từ phần tử thứ [(j-1)*(m
div c)+1] đến phần tử thứ [j*(m div c)] và đầu ra là tập sinh
tối thiểu mGCFIj tương ứng. Tập sinh tối thiểu cho tập dữ liệu
giao dịch Ɗ, ta thực hiện theo phương trình:
mGCFIƊ = mGCFI1∪ mGCFI2…∪ mGCFIc
(4)
Ví dụ 10: Cho dữ liệu Ɗ trong Bảng 1, minsup = 3. Sau khi
thực hiện song song hóa Pha 1 trên 2 nhân, ta có như Bảng 3.

Nhân C1 chạy thuật toán SEQ-mGCFI từ item F đến E
khai thác itemset sinh tối thiểu mGCFI1 như sau:
mGCFI[F]
mGCFI [G]
mGCFI [E]

(F, 3)
(G, 5)

mGCFI [A]
mGCFI [C]

(A, 8)
(C, 8)

(GE, 3)
(EA, 5)

(EC, 5)

Nhân C2 chạy thuật toán SEQ-mGCFI từ item A đến C
khai thác itemset sinh tối thiểu mGCFI2 như sau:
Tập sinh tối thiểu mGCFI trên dữ liệu giao dịch Ɗ với
minsup = 3 được tính mGCFIƊ = mGCFI1∪mGCFI2, ta có kết
quả như Bảng 4.
V. KẾT QUẢ THỰC NGHIỆM
Thực nghiệm trên máy Panasonic CF-74, Core Duo 2.0
GHz (2 core, 2 thread), 4GB RAM, cài đặt trên C#, VS 2010.
Nghiên cứu thực nghiệm trên 2 nhóm dữ liệu:
Nhóm dữ liệu thực mật độ dày đặc: sử dụng dữ liệu thực từ

kho dữ liệu về học máy của trường Đại học California
(Lichman, M. (2013). UCI Machine Learning Repository
[ Irvine, CA: University of
California, School of Information and Computer Science) gồm
2 tập Chess và Mushroom.
Nhóm dữ liệu giả lập mật độ thưa: sử dụng phần mềm phát
sinh dữ liệu giả lập của trung tâm nghiên cứu IBM Almaden
(IBM Almaden Research Center, San Joe, California 95120,
U.S.A
[])
gồm
2
t ập
T10I4D100K và T40I10D100K.
Bảng 5. Dữ liệu thực nghiệm
Ɗ
Chess
Mushroom
T10I4D100K
T40I10D100K

Số
item
75
119
870
942

Số item nhỏ
Số item lớn nhất/ Số item trung Mật độ

nhất/giao dịch
giao dịch
bình/ giao dịch
(%)
37
37
37
49,3
23
23
23
19,3
1
29
10
1,1
4
77
40
4,2

Trong bài viết này, chúng tôi đề xuất thuật toán khai thác
song song tập sinh tối thiểu. Đây là đề xuất đầu tiên theo

179


Chess

Zart


1000

DefMe
SEQ-mGCFI

100

MCP-mGCFI

0.1

0.15

0.2

0.25

0.3

Minsup (% )

Hình 6. Thời gian thực hiện khai thác mGCFI trên T10I4D100K

Hình 6 là kết quả thực nghiệm trên tập dữ liệu giả lập
T10I4D100K có mật độ thấp (1,1%), ta thấ y thuật toán tuần tự
SEQ-mGCFI nhanh hơn thuật toán Zart, DefMe và thuật
toán chạ y trên BXLĐN là MCP-mGCFI có thời gian thực
hiện nhanh hơn thuật toán tuần tự SEQ-mGCFI. Hiệu suất
trung bình của MCP-mGCFI là 79,5% và độ lệch 0,9%.


1000000

T40I10D100K

100000

Zart

10000000

DefMe

10000

SEQ-mGCFI

1000

MCP-mGCFI

100
50

55

60

65


70

Minsup (% )

Hình 4. Thời gian thực hiện khai thác mGCFI trên Chess

Hình 4 là kết quả thực nghiệm trên tập dữ liệu Chess có
mật độ dày đặc (49,3%), ta thấ y thuật toán tuần tự SEQmGCFI nhanh hơn thuật toán Zart, DefMe và thuật toán chạ y
trên BXLĐN là MCP-mGCFI có thời gian thực hiện nhanh
hơn thuật toán tuần tự SEQ-mGCFI. Hiệu suất trung bình của
thuật toán MCP-mGCFI là 75,7% và độ lệch chuẩn 1,5%.

Mushroom
100000
Thời gian (mili giây)

10000

10

Thời gian (mili giây)

Thời gian (mili giây)

10000000

T10I4D100K
100000
Thời gian (mili giây)


hướng tiếp cận song song, nên chưa có thuật toán cùng hướng
tiếp cận để so sánh hiệu năng thuật toán. Vì vậy, chúng tôi đề
xuất so sánh hiệu năng thuật toán song song như sau: so sánh
thuật toán tuần tự SEQ-mGCFI với thuật toán Zart [5] và
thuật toán DefMe [9]. Sau đó, chúng tôi so sánh hiệu suất của
thuật toán song song MCP-mGCFI với thuật toán tuần tự
SEQ-mGCFI. Trong thực nghiệm, chúng tôi tiến hành so sánh
theo từng ngưỡng minsup và cả 4 thuật toán đều cho cùng kết
quả số lượng itemsets sinh tối thiểu.
Hiệu suất thực hiện thuật toán song song trên BXLĐN:
T  T 

(5)
HS = 1 −  TM − S   S 
c   c 

Trong đó:
- TS: thời gian thực hiện tuần tự
- TM: thời gian thực hiện song song trên BXLĐN
- c: số lượng nhân của CPU (số core)
Phương trình (5) - đánh giá hiệu suất của thuật toán song
song MCP-mGCFI so với thuật toán tuần tự SEQ-mGCFI.

10000
Zart

1000

DefMe
SEQ-mGCFI


100

MCP-mGCFI
10
25

30

35

40

45

1000000
100000
Zart

10000

DefMe

1000

SEQ-mGCFI

100

MCP-mGCFI


10
0.5

0.6

0.7

0.8

0.9

Minsup (% )

Hình 7. Thời gian thực hiện khai thác mGCFI trên T40I10D100K

Hình 7 là kết quả thực nghiệm trên tập dữ liệu giả lập
T40I10D100K có mật độ thấp (4,2%), ta thấ y thuật toán tuần
tự SEQ-mGCFI nhanh hơn thuật toán Zart, DefMe và thuật
toán chạ y trên BXLĐN là MCP-mGCFI có thời gian thực
hiện nhanh hơn thuật toán tuần tự SEQ-mGCFI. Hiệu suất
trung bình của thuật toán MCP-mGCFI là 81,3% và độ lệch
chuẩn 1,9%.
Kết quả trên cho thấ y thuật toán song song khai thác tập
sinh tối thiểu MCP-mGCFI trên BXLĐN tốt hơn rất nhiều so
với thuật toán Zart, DefMe. Thuật toán MCP-mGCFI cần
được thực nghiệm thêm trên các dữ liệu giao dịch cỡ lớn và so
sánh thêm với các thuật toán chạ y trên hệ thống tính toán phân
tán Hadoop, Spark. Ngoài ra, ta còn thấ y rõ thuật toán MCPmGCFI hoàn toàn là thuật toán song song.


Minsup (% )

VI.

Hình 5. Thời gian thực hiện khai thác mGCFI trên Mushroom

Hình 5 là kết quả thực nghiệm trên tập dữ liệu Mushroom
có mật độ cao (19,3%), ta thấ y thuật toán tuần tự SEQmGCFI nhanh hơn thuật toán Zart, DefMe và thuật toán chạ y
trên BXLĐN là MCP-mGCFI có thời gian thực hiện nhanh
hơn thuật toán tuần tự SEQ-mGCFI. Hiệu suất trung bình của
thuật toán MCP-mGCFI là 77,1% và độ lệch chuẩn 1,4%.

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Bài viết đã đề xuất thuật toán tuần tự SEQ-mGCFI khai
thác nhanh tập sinh tối thiểu trên mảng itemset xuất hiện ít nhất
trong một giao dịch của từng item hạt nhân. Từ thuật toán tuần
tự SEQ-mGCFI, chúng tôi mở rộng và song song hóa thực
hiện trên BXLĐN gọi là thuật toán MCP-mGCFI. Hiệu suất
trung bình khi song song hóa trên 4 tập dữ liệu thực nghiệm là
78,4% và độ lệch chuẩn 2,6%.

180


Trong các nghiên cứu tiếp theo, nhóm tác giả sẽ mở rộng
thuật toán MCP-mGCFI để có thể khai thác nhanh tập sinh tối
thiểu trên hệ thống điện thoại thông minh đa lõi có tài nguyên
hạn chế, cũng như thực nghiệm mở rộng trên hệ thống phân tán
phổ biến hiện nay như Hadoop, Spark.

LỜI CẢM ƠN
Tác giả cảm ơn sự hỗ trợ từ Trường Đại học Khoa học Xã
hội và Nhân văn; Trường Đại học Khoa học Tự nhiên, Đại học
Quốc gia Tp.HCM.
TÀI LIỆU THAM KHẢO
[1]

[2]

[3]

R. Agrawal, T. Imilienski, A. Swami, “Mining association rules between
sets of large databases,” Proceedings of the ACM SIGMOD
International Conference on Management of Data, Washington, DC,
(1993), 207-216.
Y. Bastide, N. Pasquier, R. Taouil, G. Stumme, L.Lakhal: Mining
Minimal Non-Redundant Association Rules using Closed Frequent
Itemssets. In: 1st International Conference on Computational Logic,
(2000), 972 - 986.
M. J. Zaki, “Mining Non-Redundant Association Rules,” Data Mining
and Knowledge Discovery, 9, (2004), 223–248.

[4]

G. Dong, C. Jiang, J. Pei, J. Li, L. Wong, “Mining Succinct Systems of
Minimal Generators of Formal Concepts,” In: Zhou, L., Ooi, B.-C.,
Meng, X. (eds.) DASFAA 2005. LNCS, Springer, Heidelberg, 3453,
(2005), 175–187.
[5] L. Szathmary, A. Napoli, S. O. Kuznetsov, “ZART: AMultifunctional
Itemset Mining Algorithm,” Proc. of the 6th Intl. Conf. on Concept

Lattices and Their Applications (CLA ’08), (2008), 47–58.
[6] V. Bay, L. Bac, “Fast Algorithm for Mining Minimal Generators of
Frequent Closed Itemsets and TheirApplications,” In: The IEEE 39th
International Conference on Computers & Industrial Engineering,
Troyes, France, (2009), 1407 – 1411.
[7] T. Hamrouni, “Key roles of closed sets and minimal generators in
concise representations of frequent patterns,” Intell. Data Anal, 2012,
16(4), (2012), 581 – 631.
[8] L. Szathmary, P. Valtchev, A. Napoli, R. Godin, A. Boc, and V.
Makarenkov, “A fast compound algorithm for mining generators, closed
itemsets, and computing links between equivalence classes,” Annals of
Mathematics and Artifcial Intelligence, Springer Verlag, 70 (1-2),
(2014), 81 - 105.
[9] A. Soulet, F. Rioult, “Efficiently Depth-First Minimal Pattern Mining,”
In: Tseng V.S., Ho T.B., Zhou ZH., Chen A.L.P., Kao HY. (eds)
Advances in Knowledge Discovery and Data Mining. PAKDD 2014.
Lecture Notes in Computer Science. Springer, Cham, 2014, 8443,
(2014), 28 – 39.
[10] Phan Thành Huấn, Lê Hoài Bắc, “Nâng cao hiệu năng cho thuật toán
khai thác tập hiếm tối thiểu,” Hội nghị Quốc gia REV-ECIT lần thứ
XXI, (2018), 207-211.

181



×