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

Các tập mục thường xuyên trong khai phá dữ liệu và ứng dụ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 (676.69 KB, 67 trang )

ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ




HOÀNG MINH QUANG



CÁC TẬP MỤC THƯỜNG XUYÊN
TRONG KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG





LUẬN VĂN THẠC SỸ





Hà Nội, 2010
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ




HOÀNG MINH QUANG





CÁC TẬP MỤC THƯỜNG XUYÊN
TRONG KHAI PHÁ DỮ LIỆU VÀ ỨNG DỤNG


Ngành: Công nghệ thông tin
Chuyên ngành: Hệ thống thông tin
Mã số: 60 48 05


LUẬN VĂN THẠC SỸ
NGƯỜI HƯỚNG DẪN: PGS. TS. Vũ Đức Thi




Hà Nội, 2010
1


MỤC LỤC
MỤC LỤC 1
DANH MỤC VIẾT TẮT VÀ KÝ HIỆU 2
DANH MỤC BẢNG BIỂU, HÌNH ẢNH 3
GIỚI THIỆU 4
I. KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN 5
I.1.


Mở đầu 5

I.2.

Một số khái niệm cơ bản về tập mục 6

I.3.

Tập mục thường xuyên và luật kết hợp 7

I.4.

Mô tả bài toán khai phá luật kết hợp 9

I.5.

Một số thuật toán khai phá tập mục thường xuyên và luật kết hợp 14

I.6.

Thuật toán Apriori 16

I.7.

Thuật toán FP-Growth 20

II.

CÁC BÀI TOÁN MỞ RỘNG KHAI PHÁ TẬP MỤC
THƯỜNG XUYÊN 27


II.1.

Một số nghiên cứu chuyên sâu về khai phá luật kết hợp 27

II.2.

Khai phá tập mục cổ phần cao 28

II.3.

Khai phá tập mục lợi ích cao 45

III.

CÀI ĐẶT ỨNG DỤNG THỬ NGHIỆM KHAI PHÁ TẬP
MỤC LỢI ÍCH CAO 54

KẾT LUẬN 62

TÀI LIỆU THAM KHẢO 64






2



DANH MỤC VIẾT TẮT VÀ KÝ HIỆU
Các ký hiệu:
I={I
1
,I
2
,…,I
n
}. Tập n mục dữ liệu
DB={T
1
,T
2
, …, T
m
}. Cơ sở dữ liệu có m giao tác
db: Cơ sở dữ liệu giao tác con của DB, db ⊆ DB
i
p
: Mục dữ liệu thứ p
T
q
: Giao tác thứ q
n: Số mục dữ liệu trong một cơ sở dữ liệu giao tác
m: Số giao tác của một cơ sở dữ liệu giao tác
A, B, C…: Tên các mục dữ liệu trong cơ sở dữ liệu
X, Y,…: Tập con của tập mục dữ liệu I; X, Y ⊆ I
X = ABC thay cho X = {A,B,C} trong cơ sở dữ liệu giao tác
minsup: Ngưỡng độ hỗ trợ tối thiểu
minShare: Ngưỡng cổ phần tối thiểu

minutil: Ngưỡng lợi ích tối thiểu
|X|: Số phần tử của tập hợp X
Viết tắt:
CSDL: Cơ sở dữ liệu
DB: Cơ sở dữ liệu giao tác
DL: Dữ liệu


3


DANH MỤC BẢNG BIỂU, HÌNH ẢNH
Bảng 1. Biểu diễn cơ sở dữ liệu giao tác ngang 6

Bảng 2. Biểu diễn cơ sở dữ liệu giao tác dọc 7

Bảng 4. Cơ sở dữ liệu minh họa thực hiện thuật toán COFI-tree 22

Bảng 5. Các mục dữ liệu và độ hỗ trợ 22

Bảng 6. Các mục dữ liệu thường xuyên đã sắp thứ tự 22

Bảng 7. Các mục dữ liệu trong giao tác sắp xếp giảm dần theo độ hỗ trợ 23

Hình 1. Hình cây FP-Growth 23

Hình 2. Cây COFI-tree của mục D 24

Hình 3. Các bước khai phá cây D-COFI-tree 25


Bảng 8. Cơ sở dữ liệu giao tác cho khai phá tập mục cổ phần cao 29

Bảng 9. Xét CSDL Bảng 8 với minShare ≥ 30% 30

Bảng 10. Biểu diễn tất cả tập mục cổ phần cao 31

Bảng 11. CSDL minh họa có trường hợp hai hàm tới hạn bằng nhau 39

Bảng 12. CSDL minh họa trường hợp hai hàm tới hạn luôn bằng nhau. 40

Bảng 13. Giá trị của hai hàm tới hạn với k=1. 40

Bảng 14. Các giá trị lmv và hàm tới hạn với k=1. 43

Bảng 15. Các giá trị lmv và hàm tới hạn với k=2. 43

Bảng 16. các giá trị lmv và hàm tới hạn với k=3. 44

Bảng 17. Cơ sở dữ liệu giao tác trong khai phá tập mục lợi ích cao 47

Bảng 18. Bảng lợi ích các mục dữ liệu 47

Bảng 19. Cở sở dữ liệu giao tác lợi ích cao với khai pháp cổ phần cao 49

Giao diện 1. Sheet HUI, dữ liệu được sinh bởi chương trình 54

Giao diện 2. Sheet Profit, dữ liệu nhập vào bằng tay 54

Giao diện 3. Giao diện chương trình chính 55


Giao diện 4. Kết quả thực hiện với ngưỡng lợi ích 30% 56


4


GIỚI THIỆU
Sự phát triển nhanh chóng các ứng dụng CNTT và Internet vào nhiều lĩnh
vực đời sống, xã hội, quản lý kinh tế, khoa học kỹ thuật,… đã tạo ra nhiều cơ sở
dữ liệu khổng lồ. Để khai thác hiệu quả nguồn thông tin từ các cơ sở dữ liệu
lớn, hỗ trợ tiến trình ra quyết định, bên cạnh các phương pháp khai thác thông
tin truyền thống, các nhà nghiên cứu đã phát triển các phương pháp, kỹ thuật và
phần mềm mới hỗ trợ tiến trình khám phá, phân tích, tổng hợp thông tin.
Khai phá dữ liệu và khám phá tri thức (Data mining and knowledge
discovery) là một lĩnh vực quan trọng của ngành Công nghệ thông tin. Đây là
lĩnh vực đã thu hút đông đảo các nhà khoa học trên thế giới và trong nước tham
gia nghiên cứu. Khai phá tập mục thường xuyên được biết đến như một bài toán
con của khai phá luật kết hợp được giới thiệu bởi Agrawal vào năm 1993 khi
phân tích cơ sở dữ liệu bán hàng của siêu thị, phân tích sở thích mua của khách
hàng bằng cách tìm ra những mặt hàng khác nhau được khách hàng mua trong
cùng một lần mua. Những thông tin như vậy giúp người quản lý kinh doanh tiếp
thị chọn lọc và thu xếp không gian bày hàng hợp lý hơn, giúp cho việc kinh
doanh hiệu quả hơn.
Khai phá tập mục thường xuyên gặp khó khăn khi xử lý cơ sở dữ liệu lớn.
Vì thế đã có nhiều nghiên cứu về cách thức mở rộng, ứng dụng. Rất nhiều kết
quả nghiên cứu đã được công bố nhưng vấn đề khai phá tập mục thường xuyên
vẫn được coi là bài toán khó.
Với mục đích đóng góp vào lĩnh vực sôi động này, tác giả tìm hiểu và
nghiên cứu về các thuật toán khai phá tập mục thường xuyên phổ biến nhất,
đem lại một cái nhìn tổng quát về khai phá tập mục thường xuyên và luật kết

hợp.


5


I. KHAI PHÁ TẬP MỤC THƯỜNG XUYÊN
I.1. Mở đầu
Khai phá tập mục thường xuyên đóng vai trò quan trọng trong nhiều nhiệm
vụ khai phá dữ liệu. Khai phá tập mục thường xuyên xuất hiện như bài toán con
của nhiều lĩnh vực khai phá dữ liệu như khám phá luật kết hợp, khám phá mẫu
tuần tự, phân tích tương quan, phân lớp, phân cụm dữ liệu, khai phá Web,… Bài
toán khai phá tập mục thường xuyên được giới thiệu lần đầu bởi Agrawal vào
năm 1993 khi phân tích cơ sở dữ liệu bán hàng của siêu thị [9] trong mô hình
của bài toán khai phá luật kết hợp. Khai phá luật kết hợp là phát hiện những mối
quan hệ giữa các giá trị dữ liệu trong cơ sở dữ liệu, các mối quan hệ đó chính là
các luật kết hợp.
Khai phá luật kết hợp có hai bước: bước thứ nhất, tìm các tập mục thường
xuyên thỏa mãn ngưỡng độ tối thiểu minsup cho trước, bước thứ hai, từ các tập
mục thường xuyên tìm được, sinh ra các luật kết hợp thỏa mãn ngưỡng độ tin
cậy minconf cho trước. Mọi khó khăn của bài toán khai phá luật kết hợp tập
trung ở bước thứ nhất, đó là khai phá tập mục thường xuyên thỏa mãn ngưỡng
độ hỗ trợ cho trước.
Kể từ khi Agrawa đề xuất, khai phá tập mục thường xuyên đã thu hút được
sự quan tâm của nhiều nhà nghiên cứu, đã có hàng trăm kết quả nghiên cứu
được công bố giới thiệu các thuật toán mới hay đề xuất các giải pháp nâng cao
hiệu quả các thuật toán đã có. Tập mục thường xuyên đã có vai trò quan trọng
trong nhiều ứng dụng thực tế như quản lý quan hệ khách hàng, nâng cao hiệu
quả của thương mại điện tử, trong lĩnh vực tin sinh học, phân tích cấu trúc
Protein và DNA, mở rộng truy vấn, phát hiện xâm nhập mạng…[13, 14, 15, 16].

Mô hình khai phá tập mục thường xuyên cơ bản có nhiều ứng dụng trong
thực tế nhưng có những hạn chế, không đáp ứng đầy đủ yêu cầu của người sử
dụng. Ràng buộc về độ hỗ trợ và độ tin cậy của luật kết hợp chỉ mang ngữ nghĩa
thống kê, không phản ánh được vai trò khác nhau của các thuộc tính cũng như
đặc tính dữ liệu vốn có của chúng trong cơ sở dữ liệu.
6


Để đáp ứng yêu cầu của thực tiễn, khai phá tập mục thường xuyên đã có
nhiều cách thức mở rộng và ứng dụng, từ thay đổi phương pháp luận đến thay
đổi đa dạng các kiểu dữ liệu, mở rộng các nhiệm vụ khai phá và đa dạng các
ứng dụng mới. Trong những năm qua, đã có nhiều hướng mở rộng bài toán
được quan tâm nghiên cứu.
Chương một này sẽ trình bày các vấn đề cơ bản của bài toán khai pháp tập
mục thường xuyên.
I.2. Một số khái niệm cơ bản về tập mục
Định nghĩa 1.1: Cho tập mục (item) I={I
1
,I
2
,…,I
m
}. Một giao tác
(transaction) T là một tập con của I, T⊆ I. Cơ sở dữ liệu giao tác là tập các giao
tác DB={T
1
,T
2
, …, T
m

}. Mỗi giao tác được gán một định danh T
id
.
Một tập mục
con X ⊆ I, gồm k mục phân biệt được gọi là k-tập mục. Giao tác T gọi là chứa
tập mục X nếu X ⊆ T.
Biểu diễn cơ sở dữ liệu giao tác: Cơ sở dữ liệu giao tác thường được biểu
diễn ở dạng biểu diễn ngang, biểu diễn dọc và biểu diễn bởi ma trận giao tác.
Biểu diễn ngang: cơ sở dữ liệu là một danh sách các giao tác. Mỗi giao tác
có một định danh T
id
và một danh sách các mục dữ liệu trong giao tác đó.

Giao tác Mục dữ liệu
T1 A, C, D
T2 B, C, E
T3 A, B, C, E
T4 B, E
Bảng 1. Biểu diễn cơ sở dữ liệu giao tác ngang
Biểu diễn dọc: Cơ sở dữ liệu là một danh sách các mục dữ liệu, mỗi mục
dữ liệu có một danh sách tất cả các định danh của các giao tác chứa mục dữ liệu
này.
7


Mục dữ liệu

Các giao tác

A


T1, T3

B

T2, T3, T4

C

T1, T2, T3

D

T1

E

T2, T3, T4

Bảng 2. Biểu diễn cơ sở dữ liệu giao tác dọc
Biểu diễn ma trận nhị phân: Cơ sở dữ liệu giao tác trên tập mục (item)
được biểu diễn bởi ma trận nhị phân M = (m
pq
)
mxn
ở đó
݉
௣௤
=


1 ݇ℎ݅ ݅

∈ܶ

0 ݇ℎ݅ ݅

∉ܶ



Mục

T1

T2

T3

T4

A

1

0

1

0


B

0

1

1

1

C

1

1

1

0

D

1

0

0

0


E

0

1

1

1

Bảng 3. Biểu diễn cơ sở dữ liệu giao tác ma trận
I.3. Tập mục thường xuyên và luật kết hợp
Định nghĩa 1.2: Cho tập mục X ⊆ I. Độ hỗ trợ (Support) của tập mục X
trong cơ sở dữ liệu giao tác DB, ký hiệu sup(X), là tỷ lệ phần trăm của các giao
tác chứa tập mục X trên tổng số giao tác trong DB, tức là:
||
|}|{|
)sup(
DB
XTDBT
X


=

Định nghĩa 1.3: Cho tập mục X⊆I với ngưỡng hộ trợ tối thiểu (minimum
support) minsup ∈ [0,1] (được xác định trước bởi người sử dụng). X được gọi là
tập mục thường xuyên (frequent itemset hoặc large itemset) với độ hỗ trợ tối
8



thiểu minsup nếu sup(X) ≥ minsup, ngược lại X gọi là tập mục không thường
xuyên.
Định nghĩa 1.4: Một luật kết hợp là một biểu thức dạng X →Y, trong đó
X và Y là các tập con của I, X∩Y=∅; X gọi là tiên đề, Y gọi là kết luận của
luật.
Luật kết hợp có hai thông số quan trọng là độ hỗ trợ và độ tin cậy.
Định nghĩa 1.5: Độ hỗ trợ (support) luật kết hợp, ký hiệu là sup(X →Y),
là độ hỗ trợ của tập mục X∪Y, sup(X →Y) = sup(X∪Y).
Như vậy độ hỗ trợ của luật kết hợp X →Y chính là xác suất P(X∪Y) của
sự xuất hiện đồng thời của X và Y trong một giao tác.
Ta có 0 ≤ sup (X →Y ) ≤ 1
Định nghĩa 1.6: Độ tin cậy (confidence) luật kết hợp, ký hiệu là
conf(X→Y), là tỷ lệ phần trăm giữa số giao tác chứa X∪Y và số giao tác chứa
X trong cơ sở dữ liệu DB.
)sup(
)sup(
)(
X
YX
YXconf

=→

Độ tin cậy của luật kết hợp X →Y chính là xác suất có điều kiện P(X/Y):
)sup(
)sup(
|}|{|
|}|{|
|}|{|

|}|{|
)/(
X
YX
TXDBT
TYXDBT
TXDBT
TYTXDBT
YXP

=
⊆∈



=
⊂∈




=

Và ta có 0 ≤ conf(X →Y ) ≤ 1.
I.3.1. Bài toán khai phá luật kết hợp
Xác định tất cả X⇒
⇒⇒
⇒Y thỏa mãn độ hỗ trợ và độ tin cậy tối thiểu thì luật
X⇒
⇒⇒

⇒Y được gọi là luật kết hợp mạnh.

9


I.3.2. Một số tính chất của tập mục thường xuyên
Cho cơ sở dữ liệu giao tác DB và ngưỡng độ hỗ trợ tối thiểu minsup. Các
tập mục thường xuyên có tính chất sau:
(1) Nếu X, Y là các tập mục và X ⊆ Y thì sup(X) ≥ sup(Y)
(2) Nếu một tập mục là không thường xuyên thì mọi tập cha của nó
cũng là không thường xuyên
(3) Nếu một tập mục là thường xuyên thì mọi tập con khác rỗng của nó
cũng là tập mục thường xuyên
Tính chất (3) là tính chất quan trọng, nó được gọi là tính chất Apriori, tính
chất này là cơ sở để rút gọn không gian tìm kiếm các tập mục thường xuyên.
I.4. Mô tả bài toán khai phá luật kết hợp
Khai phá luật kết hợp là một kỹ thuật quan trọng của khai phá dữ liệu. Vấn
đề này được Rakesh Agrawal, Tomasz Imielinski, Arun Swami đề xuất lần đầu
vào năm 1993 [9]. Sau đó năm 1996 được Rakesh Agrawal, Heikki Mannia,
Ramakrishnan Srikant, Hannu Toivonen, A.Inkeri Verkamo tiếp tục cải tiến.
Ngày nay bài toán khai thác các luật kết hợp nhận được rất nhiều sự quan tâm
của nhiều nhà khoa học. Việc khai thác các luật như thế nào vẫn là một trong
các phương pháp khai thác mẫu phổ biến nhất trong việc khám phá tri thức và
khai thác dữ liệu (KDD – Knowledge Discovery and Data Minning).
Mục đích chính của khai phá dữ liệu là trích rút tri thức một cách tự động,
hiệu quả và “thông minh” từ kho dữ liệu.
Trong hoạt động sản xuất kinh doanh, ví dụ kinh doanh các mặt hàng tại
siêu thị, các nhà quản lý rất thích có được những thông tin mang tính thống kê
như: “90% phụ nữ có xe máy màu đỏ và đeo đồng hồ Thụy Sỹ thì dùng nước
hoa hiệu Chanel” hoặc “70% khách hàng là công nhân thì mua TV thường mua

loại 21 inches”. Những thông tin như vậy rất hữu ích trong việc định hướng
kinh doanh. Vậy vấn đề đặt ra là liệu có tìm được các luật như vậy bằng các
10


công cụ khai phá dữ liệu hay không? Câu trả lời là hoàn toàn có thể. Đó chính là
nhiệm vụ khai phá luật kết hợp.
Giả sử chúng ta có một CSDL D. Luật kết hợp cho biết phạm vi mà trong
đó sự xuất hiện của tập các thuộc tính S nào đó trong các bản ghi (records) của
D sẽ kéo theo sự xuất hiện của một tập những thuộc tính khác U cũng trong
những bản ghi đó. Mỗi luật kết hợp được đặc trưng bởi một cặp tỉ lệ hỗ trợ
(support ration). Mỗi tỉ lệ hỗ trợ được biểu diễn bằng tỉ lệ % những bản ghi
trong D chứa cả S và U.
Vấn đề khám phá luật kết hợp được phát biểu như sau:
Cho trước tỉ lệ hỗ trợ (support ration) θ và độ tin cậy (confidence) β
Đánh số tất cả các luật trong D có các giá trị tỉ lệ hỗ trợ và tin cậy lớn hơn
θ và β tương ứng.
Ví dụ: Gọi D là CSDL mua bán và với θ = 40%, β = 90%
Vấn đề phát hiện luật kết hợp được thực hiện như sau:
Liệt kê (đếm) tất cả những quy luật chỉ ra sự xuất hiện một số các mục kéo
theo một số mục khác.
Chỉ xét những quy luật mà tỉ lệ hỗ trợ lớn hơn 40% và độ tin cậy lớn hơn
90%
Hay chúng ta hãy tưởng tượng, một công ty bán hàng qua mạng Internet.
Các khách hàng được yêu cầu điền vào các mẫu bán hàng để công ty có một
CSDL về các yêu cầu của khách hàng. Giả sử công ty quan tâm đến mối quan
hệ “tuổi, giới tính, nghề nghiệp => sản phẩm”. Khi đó có thể có rất nhiều câu
hỏi tương ứng với luật trên. Ví dụ: trong lứa tuổi nào thì những khách hàng nữ
là công nhân đặt mua mặt hàng gì đó, ví dụ áo dài chẳng hạn là nhiều nhất (thỏa
mãn một ngưỡng nào đó)?

Cho cơ sở dữ liệu giao tác DB, ngưỡng độ hỗ trợ tối thiểu minsup và
ngưỡng độ tin cậy minconf.
11


Yêu cầu: Tìm tất cả các luật kết hợp X  Y trên cơ sở dữ liệu DB sao cho
sup(XY) ≥ minsup và conf(XY) ≥ minconf
Bài toán khai phá luật kết hợp này được gọi là bài toán cơ bản hay bài toán
nhị phân, vì ở đây, giá trị của mục dữ liệu trong cơ sở dữ liệu là 0 hoặc 1 (xuất
hiện hay không xuất hiện)
Bài toán khai phá luật kết hợp được chia thành 2 bài toán con.
Bài toán thứ nhất: Tìm tất cả các tập mục thỏa mãn độ hỗ trợ tối thiểu cho
trước, tức là tìm tất cả các tập mục thường xuyên
Bài toán thứ hai: Sinh ra các luật kết hợp từ các tập mục thường xuyên đã
tìm được thỏa mãn độ tin cậy tối thiểu cho trước
Bài toán thứ hai này đơn giản, mọi khó khăn nằm ở bài toán thứ nhất, hầu
hết các nghiên cứu về luật kết hợp đều tập trung giải quyết bài toán thứ nhất là
tìm các tập mục thường xuyên.
Bài toán thứ hai có thể giải quyết như sau: Giả sử X là tập mục thường
xuyên, ta sinh ra luật kết hợp bằng cách tìm mọi Y là tập con của X, kiểm tra độ
tin cậy của X\Y ⇒
⇒⇒
⇒ Y có thỏa mãn độ tin cậy tối thiểu không.
I.4.1. Một số tiếp cận khai phá tập mục thường xuyên
Các nghiên cứu về khai phá tập mục thường xuyên tập trung vào tìm các
thuật toán mới hoặc đề xuất giải pháp nâng cao hiệu quả các thuật toán đã có.
Phần này sẽ trình bày khái quát các kỹ thuật chính để khai phá tập mục thường
xuyên.
Bài toán khai phá tập mục thường xuyên: tìm các tập mục ứng viên và tìm
các tập mục thường xuyên. Tập mục ứng viên là tập mục mà ta hy vọng nó là

tập mục thường xuyên, phải tính độ hỗ trợ của nó để kiểm tra. Tập mục thường
xuyên là tập mục có độ hỗ trợ lớn hơn hoặc bằng ngưỡng tối thiểu cho trước. Đã
có rất nhiều thuật toán tìm tập mục thường xuyên được công bố, ta có thể phân
chúng theo 2 tiêu chí:
12


- Phương pháp duyệt qua không gian tìm kiếm
- Phương pháp xác định độ hỗ trợ của tập mục
Phương pháp duyệt qua không gian tìm kiếm được phân làm hai cách:
duyệt theo chiều rộng (Breadth First Search - BFS) và duyệt theo chiều sâu
(Depth First Search - DFS)
Duyệt theo chiều rộng là duyệt qua cơ sở dữ liệu gốc để tính độ hỗ trợ của
tất cả các tập mục ứng viên có (k-1) mục trước khi tính độ hỗ trợ của các tập
mục ứng viên có k mục. Với CSDL có n mục, lần lặp thứ k phải kiểm tra độ hỗ
trợ của tất cả C
k
n
tập ứng viên có k mục
Duyệt theo chiều sâu là duyệt qua CSDL đã được chuyển thành cấu trúc
dạng cây, quá trình duyệt gọi đệ quy theo chiều sâu của cây. Với cơ sở dữ liệu
có n mục dữ liệu, không gian tìm kiếm có 2
n
tập con, rõ ràng đây là bài toán NP
khó, do đó cần phải có phương pháp duyệt thích hợp, tỉa nhanh các tập ứng
viên.
Phương pháp xác định độ hỗ trợ của tập mục X được chia làm 2 cách: cách
thứ nhất là đếm số giao tác chứa X trong cơ sở dữ liệu và cách thứ 2 là tính
phần giao của các tập chứa định danh của các giao tác chứa X.
I.4.2. Một số tiếp cận khai phá luật kết hợp

Luật kết hợp nhị phân (binary association rule hoặc boolean associaiton
rule): là hướng nghiên cứu đầu tiên của luật kết hợp. Hầu hết các nghiên cứu ở
thời kỳ đầu về luật kết hợp đều liên quan đến luật kết hợp nhị phân. Trong dạng
luật kết hợp này, các mục (thuộc tính) chỉ được quan tâm là có hay không xuất
hiện trong giao tác của CSDL chứ không quan tâm về “mức độ” xuất hiện. Ví
dụ: Trong hệ thống tính cước điện thoại thì việc gọi 10 cuộc điện thoại và 1
cuộc được xem là giống nhau. Thuật toán tiêu biểu nhất khai phá dạng luật này
là thuật toán Apriori và các biến thể của nó. Đây là dạng luật đơn giản và các
luật khác cũng có thể chuyển về dạng luật này nhờ một số phương pháp như rời
rạc hóa, mờ hóa… Một ví dụ về dạng luật này: “gọi liên tỉnh = ‘yes’ AND gọi
13


di động = ‘yes’ => gọi quốc tế =’yes’ AND gọi dịch vụ 108 = ‘yes’, với độ hỗ
trợ 20% và độ tin cậy 80%.
Luật kết hợp có thuộc tính số và thuộc tính hạng mục (quantitative and
categorial association rule): Các thuộc tính của các CSDL thực tế có kiểu rất đa
dạng (nhị phân – binary, số - quantitative, hạng mục – categorial,…). Để phát
hiện luật kết hợp với các thuộc tính này, các nhà nghiên cứu đã đề xuất một số
phương pháp rời rạc hóa nhằm chuyển dạng luật này về dạng nhị phân để có thể
áp dụng các thuật toán đã có. Một ví dụ về dạng luật này “phương thức gọi” =
‘Tự động’ AND giờ gọi IN [’23:00:39 23:00:59’] AND thời gian đàm thoại IN
[‘200 300’] => gọi liên tỉnh =’có’, với độ hỗ trợ là 23.53% và độ tin cậy là
80%”.
Luật kết hợp tiếp cận theo hướng tập thô (mining association rules base on
rough set): Tìm kiếm luật kết hợp dựa trên lý thuyết tập thô.
Luật kết hợp nhiều (multi – level association rule): với cách tiếp cận theo
luật này sẽ tìm kiếm thêm những luật dạng “mua máy tính PC => mua hệ điều
hành AND mua phần mềm tiện ích văn phòng,…” thay vì chỉ những luật quá cụ
thể như “mua máy tính IBM PC => mua hệ điều hành Microsoft Windows AND

mua phần mềm tiện ích văn phòng Microsoft Office, ”. Như vậy dạng luật đầu
là dạng luật tổng quát hóa của dạng luật sau và tổng quát theo nhiều mức khác
nhau.
Luật kết hợp mờ (fuzzy association rule): với những hạn chế còn gặp phải
trong quá trình rời rạc hóa các thuộc tính số (quantitave attributes), các nhà
nghiên cứu đã đề xuất luật kết hợp mờ nhằm khắc phục các hạn chế trên và
chuyển luật kết hợp về dạng tự nhiên hơn, gần gũi hơn với người sử dụng. Một
ví dụ của dạng này là: “thuê bao tư nhân =’yes’ AND thời gian đàm thoại lớn
AND cước nội tỉnh = ‘yes’ => cước không hợp lệ =’yes’, với độ hỗ trợ là 4% và
độ tin cậy là 85%”. Trong luật trên, điều kiện thời gian đàm thoại lớn ở về trái
của luật là một thuộc tính đã được mờ hóa.
Luật kết hợp với thuộc tính được đánh trọng số (association rule with
weighted items): trong thực tế, các thuộc tính trong CSDL không phải lúc nào
14


cũng có vai trò như nhau. Có một số thuộc tính được chú trọng hơn và có mức
độ quan trọng cao hơn hơn các thuộc tính khác. Ví dụ khi khảo sát về doanh thu
hàng tháng, thông tin về thời gian đàm thoại, vùng cước là quan trọng nhiều hơn
so với thông tin về phương thức gọi… Trong quá trình tìm kiếm luật, chúng ta
sẽ gán thời gian gọi, vùng cước các trọng số lớn hơn thuộc tính phương thức
gọi. Đây là hướng nghiên cứu rất thú vị và đã được một số nhà nghiên cứu đề
xuất cách giải quyết bài toán này. Với luật kết hợp có thuộc tính được đánh
trọng số, chúng ta sẽ khai thác được những luật “hiếm” (tức là có độ hỗ trợ thấp
nhưng có ý nghĩa đặc biệt hoặc mang rất nhiều ý nghĩa).
Khai thác luật kết hợp song song (parallel mining of association rules):
Bên cạnh khai thác luật kết hợp tuần tự, các nhà làm tin học cũng tập trung
nghiên cứu các thuật giải song song cho quá trình phát hiện luật kết hợp. Nhu
cầu song song hóa và xử lý phân tán là cần thiết bởi kích thước dữ liệu ngày
càng lớn đòi hỏi tốc độ xử lý cũng như dung lượng bộ nhớ của hệ thống phải

được đảm bảo. Có rất nhiều thuật toán song song khác nhau đã đề xuất để có thể
không phụ thuộc vào phần cứng. Bên cạnh những nghiên cứu về những biến thể
của luật kết hợp, các nhà nghiên cứu còn chú trọng đề xuất những thuật toán
nhằm tăng tốc độ quá trình tìm kiếm tập phổ biến từ CSDL.
Ngoài ra, còn một số phương pháp nghiên cứu khác về khai thác luật kết
hợp như: khai thác luật kết hợp trực tuyến, khai thác luật kết hợp được kết nối
trực tiếp đến các kho dữ liệu đa chiều (Multidimensional data, data warehouse)
thông qua công nghệ OLAP (Online Analysis Processing), MOLAP
(Multidimensional OLAP), ROLAP (Relational OLAP), ADO (Active X Data
Object) for OLAP…
I.5. Một số thuật toán khai phá tập mục thường xuyên và luật
kết hợp
I.5.1. Thuật toán AIS
Thuật toán hoàn toàn sử dụng chiến lược “vét cạn”, xem xét toàn bộ các
tập mục thường xuyên bằng cách sinh tổ hợp tập các mục và chạy kiểm tra.
15


I.5.2. Thuật toán SETM
Được đề xuất do mong muốn dùng SQL để tìm các tập mục thường xuyên.
Cũng giống như thuật toán AIS, SETM cũng sinh ra các tập ứng viên dựa trên
các giao dịch đọc được từ CSDL. Vì thế, nó sinh ra và đếm mỗi tập mục ứng cử
viên mà thuật toán AIS sinh ra. Tuy nhiên để phép nối (JOIN) chuẩn của SQL,
SETM chia sự phát sinh ứng cử viên từ việc đếm.
I.5.3. Thuật toán CHARM
Thực hiện trên cả không gian các tập phổ biến và không gian các tập định
danh. CHARM không tìm tất cả các tập con có thể của tập mục mà thuật toán
kết hợp tìm tập đóng hiệu quả hơn (bottom – up). Nếu CSDL của tập mục là lớn
và tập mục thường xuyên là dày thì CHARM duyệt cả không gian tập mục và
tập định danh đồng thời sẽ bỏ qua nhiều mức để tìm tập phổ biến đóng thay cho

việc tính toán nhiều tập con không đóng.
I.5.4. Thuật toán APRIORI
Ý tưởng chính của thuật toán này là: sinh ra các tập mục ứng viên từ các
tập mục thường xuyên ở bước trước, sử dụng kỹ thuật tỉa để bỏ bớt đi những tập
mục ứng viên không thỏa mãn ngưỡng hỗ trợ tối thiểu (minsup). Cơ sở của
thuật toán này là tính chất Apriori “Bất kỳ tập con nào của tập mục thường
xuyên cũng phải là tập mục thường xuyên”. Thuật toán giúp tỉa bớt những tập
ứng viên có tập con không thường xuyên trước khi tính độ hỗ trợ. Nhược điểm
của thuật toán là chi phí sinh ra số lượng khổng lồ tập ứng viên và phải duyệt
CSDL nhiều lần.
I.5.5. Thuật toán FP-Growth
Phát triển từ thuật toán Apriori, J.Han, J Pei, Y.Yin và R.Mao đã đề xuất
thuật toán FP-growth [14] nhằm khắc phục những hạn chế của thuật toán
Apriori. Thuật toán này được xây dựng với ba kỹ thuật chính là: Nén dữ liệu
thích hợp vào một cấu trúc cây gọi là FP-tree. Chỉ có 1–tập mục ở trong cây và
các nút của cây được sắp xếp để các nút xuất hiện thường xuyên hơn có thể dễ
dàn chia sẻ với các nút xuất hiện ít hơn; Thực hiện phương pháp khai phá phát
16


triển (growth) từng đoạn dựa trên cây FP-tree gọi là phương pháp FP-growth;
Kỹ thuật tìm kiếm được dùng ở đây là dựa vào sự phân chia, “chia để trị”, phân
rã nhiệm vụ khai phá thành nhiệm vụ nhỏ hơn.
I.6. Thuật toán Apriori
Bước 1: Đếm 1-tập mục
Bước lặp:
- Kết hợp các (k-1)-tập mục sinh ra tập ứng viên C
k

- Tỉa các kết nối để thu được k-tập mục, xác định các tập mục thường

xuyên dựa trên độ hỗ trợ.
I.6.1. Ý tưởng thuật toán Apriori
Apriori là một giải thuật được Rakesh Agrawal, Tomasz Imielinski, Arun
Swami đề xuất lần đầu vào năm 1993 [9]. Thuật toán tìm giao dịch t có độ hỗ
trợ và độ tin cậy thỏa mãn lớn hơn một ngưỡng giá trị nào đó.
Thuật toán được tỉa bớt những tập ứng viên có tập con không thường
xuyên trước khi tính độ hỗ trợ.
Thuật toán Apriori tính tất cả các tập ứng cử của tập k trong một lần duyệt
CSDL. Apriori dựa vào cấu trúc cây băm (hashtree). Tìm kiếm đi xuống trên
cấu trúc cây mỗi khi ta chạm vào lá, ta tìm được một tập ứng cử viên có tiền tố
chung được bao gồm trong các giao dịch. Sau đó các tập ứng cử này được tìm
trong giao dịch đã được ánh xạ trước đó. Trong trường hợp tìm thấy biến đếm
được tăng lên 1.
I.6.2. Thuật toán Apriori
Input: CSDL D, minsup.
Output: Tập các tập mục thường xuyên
L1= {Các 1-tập mục thường xuyên}
17


k=2;
While(L
k-1
!=

)
{ C
k
= apriori_gen(L
k-1

, minsup); //các ứng cử mới theo chương trình con
dưới đây.
for(

giao dịch t

D)
{ C
t
=Subset(C
k
,t);//ứng cử viên được chứa trong t
for(

ứng cử c

C
t
)
c.count++;
}
L
k
={c

C
k
|c.count ≥ minsup}
k++;
}

Return L=

k
L
k

;
//sinh tập ứng viên mới (**)
void apriori_gen(L
k-1
, minsup)
{ for(

itemset l1

L
k-1
)
for(

itemset l2

Lk-1)
if((L1(1)==L2(1)&&L1(2)==L2(2)&&…&&L1(k-2)==L2(k-2)
&&L1(k-1)==L2(k-1))
{ c=L1 kết nối với L2;
if(has_infrequent_subset(c, L
k-1
)) delete c;
else add c to C

k
;
18


}
Return C
k
;
}
Boolean has_infrequent_subset(c,L
k-1
)
{ for(

(k-1)-subset s

c)
if(s

Lk-1)return TRUE;
else return FALSE;
}
I.6.3. Giải thích
Lần duyệt đầu tiên, sẽ tính số lần xuất hiện của mỗi mục để xác định các
1-tập mục thường xuyên. Lần duyệt thứ k (k≥2) sẽ bao gồm 2 giai đoạn:
Giai đoạn 1: tập mục thường xuyên L
k-1
đã tìm thấy ở các lần duyệt thứ
k-1 được sử dụng để sinh ra các tập ứng cử viên bằng việc sử dụng hàm

apriori_gen. Tập các k–tập mục ứng viên C
k
được sinh ra bởi việc kết nối L
k-1

với chính nó. Hai tập mục l
1
và l
2
của L
k-1
được nối nếu chúng có (k-2) mục dữ
liệu đầu bằng nhau, mục dữ liệu thứ k-1 của l
1
nhỏ hơn của l
2
.
(L1(1)==L2(1)&&L1(2)==L2(2)&&…&&L1(k-2)==L2(k-2)&&L1(k-
1)==L2(k-1)
Giai đoạn 2: Dựa vào CSDL, tính độ hỗ trợ của các tập ứng viên trong C
k
.
Các ứng viên trong C
k
mà được chứa trong giao dịch T có thể được xác định
một cách hiệu quả bằng việc sử dụng cây băm được mô tả như sau:
Trong giai đoạn 2 (giai đoạn sửa, tỉa): xóa bỏ các tập c ∈ C
k
sao cho một
vài (k-1)–tập mục con của c không nằm trong L

k-1
. Thủ tục này là đầy đủ đối
với bất kỳ tập nào L
k
với độ hỗ trợ tối thiểu thì các tập con kích cỡ (k-1) cũng
có độ hỗ trợ tối thiểu, do đó nếu ta mở rộng mỗi tập trong L
k-1
với tất cả các tập
19


mục có thể và sau đó xóa tất cả các tập mà (k-1)–tập mục con của nó không
nằm trong L
k-1
, ta sẽ nhận được tập các tập trong L
k
.
Việc kết nối là tương đương với việc mở rộng L
k-1
với mỗi mục nằm trong
CSDL và sau đó xóa bỏ các tập này mà đối với nó (k-1)–tập mục nhận được
bằng việc xóa đi mục thứ (k-1) không nằm trong L
k-1
. Ở giai đoạn này C
k
⊇ L
k
.
Với lập luận như vậy, giai đoạn tỉa là giai đoạn người ta xóa khỏi C
k

tất cả các
tập mà các (k-1) tập con của nó không nằm trong L
k-1
, cũng không xóa bất kỳ
một tập nào có thể nằm trong L
k
.
Hàm Subset: các tập ứng viên C
k
được lưu trữ trong một cây băm. Một nút
của cây này hoặc là chứa một danh sách của các tập (nút lá) hoặc bảng băm
(một nút trong). Trong mỗi nút trong, mỗi bucket của bảng băm chỉ đến một nút
khác. Gốc của cây băm được xem ở độ sâu là 1. Một nút trong ở độ sâu d sẽ dẫn
đến một nút ở độ sâu d+1. Các tập được lưu trữ trong các lá. Khi ta bổ sung
thêm một tập c, ta bắt đầu từ nút gốc và đi xuống cây cho đến khi ta chạm vào
một lá. Tại một nút ở độ sau d, ta quyết định sẽ đi theo cành nào bằng việc áp
dụng hàm băm đối với mục thứ d của tập đó và theo con trỏ trong Bucket tương
ứng. Tất cả các nút ban đầu được tạo ra như là nút lá. Khi số các tập trong một
nút lá vượt quá ngưỡng được chọn, nút lá này được chuyển thành một nút trong.
Bắt đầu từ nút gốc, hàm Subset tìm tất cả các ứng viên được chứa trong
giao dịch t như sau: Nếu ta bắt đầu tại một nút lá, ta tìm những tập trong nút lá
này được chứa trong giao dịch t và bổ sung các mối quan hệ với chúng đối với
tập kết quả mong muốn. Nếu ta đang ở một nút trong và đến được nó bằng việc
băm mục I, ta băm trên mỗi mục đi sau i trong t và áp dụng một cách đệ quy thủ
tục này đó đối với nút này trong Bucket tương ứng. Đối với nút gốc, ta băm
theo mỗi mục trong t.
Để thấy được tại sao hàm Subset trả lại tập các tham khảo mong muốn hãy
để ý đến những gì sẽ xảy ra tại nút gốc. Đối với bất kỳ tập c nào được chứa
trong giao dịch t, mục đầu tiên cần phải có trong t. Tại nút gốc, việc băm mọi
mục trong t đảm bảo được rằng ta chỉ không biết các tập mà nó bắt đầu với một

mục không nằm trong t. Những lý luận tương tự áp dụng cho các mức sâu hơn.
Vì các mục trong bất kỳ tập nào cũng được sắp xếp thứ tự, nếu ta đến được một
20


nút hiện tại bằng việc băm mục I, ta chỉ cần quan tâm đến những mục nhỏ hơn
trong t nó xuất hiện sau i.
//Bước tỉa: Xóa bớt tất cả các tập mục c ∈ Ck mà (k-1) tập con của c
không phụ thuộc L
k-1
.
for(

tập mục c

C
k
)
for(

(k-1 – tập con s của c)
if(s

L
k-1
)
delete c khỏi C
k
;
I.7. Thuật toán FP-Growth

Thuật toán Apriori gặp phải 2 chi phí lớn:
- Chi phí sinh ra số lượng khổng lồ các tập ứng viên. Ví dụ, nếu có 10
4

mục thường xuyên thì thuật toán Apriori sẽ cần sinh ra hơn 10
7
các ứng viên 2-
tập mục và thực hiện kiểm tra độ hỗ trợ của chúng.
- Lặp nhiều lần duyệt CSDL, số lần duyệt CSDL của thuật toán Apriori
bằng độ dài của tập mục thường xuyên dài nhất tìm được. Thuật toán Apriori
chỉ phù hợp với CSDL thưa (sparse), với CSDL dày (dense) thì thuật toán thực
hiện kém hiệu quả.
Để khắc phục nhược điểm trên của thuật toán Apriori, J. Han, J. Pei, Y.
Yin và R. Mao đề xuất thuật toán FP-Growth [14]. Thuật toán FP-Growth được
xây dựng với 3 kỹ thuật chính
- Nén dữ liệu thích hợp vào một cấu trúc cây gọi là cây FP-tree. Chỉ có các
1-tập mục (1-itemset) ở trong cây và các nút của cây được sắp xếp để 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.
- Thực hiện phương pháp khai phá phát triển (growth) từng đoạn dựa trên
cây FP-tree gọi là phương pháp FP-growth
21


- Kỹ thuật tìm kiếm được dùng ở đây là dựa vào sự phân chia, “chia để
trị”, phân rã nhiệm vụ khai phá thành các nhiệm vụ nhỏ hơn.
Do nén CSDL lên cây nên tránh việc duyệt nhiều lần CSDL. Phát triển dần
các mẫu mà không sinh tập ứng viên tránh được khối lượng bộ nhớ lớn. Tuy
nhiên, thuật toán FP-growth khai phá cây FP-tree sử dụng phương pháp đệ quy
nên đòi hỏi khối lượng tính toán lớn. Năm 2003, nhóm tác giả Mohammad El-
Hajj và Osmar R. Zaiane ở đại học Alberta Edmonton, Canada đề xuất thuật

toán không đệ quy khai phá cây FP-tree dựa trên cấu trúc cây COFI-tree [5].
Thuật toán COFI-tree có nhiều ưu điểm hơn thuật toán FP-growth
Thuật toán COFI-tree gồm 2 giai đoạn chính.
- Giai đoạn thứ nhất: Xây dựng cây FP-tree
- Giai đoạn thứ hai: Khai phá cây FP-tree chia thành nhiều bước tương
ứng với các mục dữ liệu trong bảng đầu mục của cây FP-tree, mỗi bước sử dụng
một cấu trúc dữ liệu phụ trợ là cây COFI-tree của mục dữ liệu đó.
Mỗi nút của cây FP-tree gồm 3 trường:
+ Tên mục dữ liệu
+ Độ hỗ trợ
+ Một con trỏ (Con trỏ này trỏ đến nút tiếp theo cùng tên trên cây hoặc là
null nếu không có)
Cây FP-tree có một bảng đầu mục (header table). Mỗi mục của bảng có 3
trường: tên mục dữ liệu, độ hỗ trợ và con trỏ, con trỏ này trỏ đến nút đầu tiên
biểu diễn mục dữ liệu này trong cây.
Cây COFI-tree có bảng đầu mục giống cây FP-tree nhưng các mục dữ liệu
có thứ tự ngược lại. Mỗi mục trong bảng đầu mục chứa 3 trường: tên mục dữ
liệu, độ hỗ trợ địa phương (số lần xuất hiện trong cây COFI-tree) và con trỏ (trỏ
đến nút đầu tiên biểu diễn mục dữ liệu này trong cây). Một danh sách liên kết
được duy trì giữa các nút cùng tên để thuận lợi cho quá trình khai phá. Mỗi nút
22


của cây COFI-tree có 4 trường: tên mục dữ liệu, hai biến s và p (biến s biểu diễn
độ hỗ trợ của nút, biến p cho biết số lần nút đó đã tham gia tạo mẫu), con trỏ
(trỏ đến nút tiếp theo cùng tên trên cây)
Minh họa thuật toán COFI-tree
Xét CSDL với ngưỡng minsup = 3
TID


A

B

C

D

E

F

T01

0

1

1

1

0

0

T02

0


1

1

1

0

0

T03

1

1

0

1

0

0

T04

0

0


1

1

0

1

T05

0

0

1

1

0

0

T06

1

0

1


0

0

0

T07

1

1

1

0

0

1

T08

1

0

1

0


0

0

T09

1

1

0

0

1

0

T10

1

0

0

0

1


0

T11

1

1

1

0

0

0

Bảng 4. Cơ sở dữ liệu minh họa thực hiện thuật toán COFI-tree
Giai đoạn 1. Xây dựng cây FP-tree
Duyệt CSDL lần thứ nhất tính được độ hỗ trợ của mỗi mục dữ liệu, loại bỏ
các mục dữ liệu không thỏa mãn ngưỡng minsup = 3, sắp xếp giảm dần theo độ
hỗ trợ các mục
Mục dữ liệu

Độ hỗ trợ

A

7

B


6

C

8

D

5

E

2

F

2

Bảng 5. Các mục dữ liệu và độ hỗ trợ
Mục dữ liệu

Độ hỗ trợ

C

8

A


7

B

6

D

5

Bảng 6. Các mục dữ liệu thường xuyên đã sắp thứ tự
23


Duyệt cơ sở dữ liệu lần 2. Mỗi giao tác chọn ra các mục dữ liệu thường
xuyên, sắp chúng theo thứ tự giảm dần của độ hỗ trợ và chèn lên cây
Giao tác TID

Các mục dữ liệu

T01

C, B, D

T02

C, B, D

T03


A, B, D

T04

C, D

T05

C, D

T06

C, A

T07

C, A, B

T08

C, A

T09

A, B

T10

A


T11

C, A, B

Bảng 7. Các mục dữ liệu trong giao tác sắp xếp giảm dần theo độ hỗ trợ
Từ bảng này ta có cây FP-tree

Hình 1. Hình cây FP-Growth
Giai đoạn 2. Khai phá cây FP-tree
Xét lần lượt các mục dữ liệu từ dưới lên trong bảng đầu mục cây FP-tree,
với mỗi mục xây dựng cây COFI-tree của nó, khai phá cây này tìm mẫu thường
xuyên, sau khi khai phá xong, loai bỏ cây đó và xây dựng cây COFI-tree cho
mục dữ liệu tiếp theo. Minh họa thuật toán qua xét mục dữ liệu đầu tiên D:
M

c
DL
Đ


hỗ
trợ
Con
trỏ
C

8


A


7


B

6


D

5


G

c

C8

B2

D2

D2

A3

B2


D1

A4

B2

×