BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
GIẢI THUẬT APRIORI
Yêu cầu
Trong phần này, sinh viên cần phải nắm vững các khái niệm sau đây:
- Nguyên lý Apriori.
- Bài toán khai phá luật kết hợp.
- Tìm các tập phổ biến dựa trên giải thuật Apriori .
- Sinh luật kết hợp dựa trên tập phổ biến.
1.Tóm tắt lý thuyết
A. Nguyên lý Apriori
Nguyên lý Apriori có thể phát biểu như sau: “Nếu một tập mục là tập phổ biến thì mọi
tập con khác rỗng bất kỳ của nó cũng là tập phổ biến”.
Chứng minh nguyên lý này rất đơn giản:
Xét tập mục X và một tập con bất kỳ X’ ⊆ X. Ký hiệu p là ngưỡng độ hỗ trợ minsup,
C(X) là số lần xuất hiện của X và C(X’) là số lần xuất hiện của X’ trong cơ sở dữ liệu
giao dịch D. Một điều hiển nhiên là một tập mục xuất hiện bao nhiêu lần thì các tập con
chứa trong nó cũng xuất hiện ít nhất bấy nhiêu lần, nên ta có:
C(X’) ≥ C(X) (1).
Do X là tập phổ biến nên:
( )sup( ) ( ) | | (2)
| |
C XX p C X p D
D
Từ (1) và (2) suy ra:
( ')( ') | | sup( ')
| |
C XC X p D X p
D
Do đó X’ là tập phổ biến (đpcm).
Nguyên lý Apriori được áp dụng trong giải thuật Apriori để loại bỏ nhanh những
tập không phải là tập phổ biến. Nếu một tập mục X có một tập con không phải là tập
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
phổ biến thì ta sẽ kết luận được ngay X không phải là tập phổ biến mà không cần phải
mất công duyệt cơ sở dữ liệu giao dịch D để đếm số lần xuất hiện của X.
B. Bài toán khai phá luật kết hợp
Input: Cơ sở dữ liệu giao dịch D.
Các giá trị ngưỡng minsup, minconf.
Output: Tất cả các luật mạnh.
Để giải quyết bài toán khai phá luật kết hợp bao giờ cũng thường trải qua hai pha:
Pha 1: Sinh tất cả các tập phổ biến có thể có. Ở pha này ta sử dụng giải thuật Apriori.
Pha 2: Ứng với mỗi tập phổ biến K tìm được ở pha 1, tách K thành hai tập X, Y không
giao nhau (K = X ∪ Y và X ∩ Y = ϕ). Tính độ tin cậy của luật X → Y, nếu độ tin cậy
trên ngưỡng minsup thì nó là luật mạnh. Chú ý là nếu tập K có k phần tử thì số tập con
thực sự của K sẽ là 2k-2
tức là từ K ta sẽ sinh được tối đa là 2k-2
luật.
Lưu ý: Trong giải thuật Apriori, để xác định một tập là phổ biến người ta không sử
dụng khái niệm độ hỗ trợ mà sử dụng khái niệm số lần xuất hiện (support count). Nếu
số lần xuất hiện của tập mục trong cơ sở dữ liệu giao dịch lớn hơn một giá trị ngưỡng
nào đấy thì nó là tập phổ biến. Giá trị ngưỡng này được xác định là:
mincount = minsup * | |D
C. Sinh tập phổ biến bằng giải thuật Apriori
Thuật toán Apriori là một thuật toán điển hình áp dụng để tìm các tập phổ biến.
Thuật toán dựa trên nguyên lý Apriori “tập con bất kỳ của một tập phổ biến cũng là một
tập phổ biến”. Mục đích của thuật toán Apriori là tìm ra được tất cả các tập phổ biến có
thể có trong cơ sở dữ liệu giao dịch D. Thuật toán hoạt động theo nguyên tắc quy hoạch
động, nghĩa là từ các tập Fi = { ci | ci là tập phổ biến, |ci| = i} gồm mọi tập mục phổ biến
có độ dài i (1 ≤ i ≤ k), đi tìm tập Fk+1 gồm mọi tập mục phổ biến có độ dài k+1. Các
mục i1, i2,…, in trong tập I được coi là sắp xếp theo một thứ tự cố định.
Thuật toán Apriori:
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
Input: Cơ sở dữ liệu giao dịch D = {t1, t2,…, tm}.
Ngưỡng độ hỗ trợ tối thiểu minsup.
Output: Tập hợp tất cả các tập phổ biến.
mincount = minsup * | |D ;
F1 = { các tập phổ biến có độ dài 1};
for(k=1; Fk != ⍉; k++)
{
Ck+1 = Apriori_gen(Fk);
for each t ∈ D
{
Ct = { c | c ∈ Ck+1 và c ⊆ t};
for each c ∈ Ct
c.count++;
}
Fk+1 = {c ∈ Ck+1 | c.count ≥ mincount}
}
return F = kk
F ;
Thủ tục con Apriori_gen có nhiệm vụ sinh ra (generation) các tập mục có độ dài
k+1 từ các tập mục có độ dài k trong tập Fk. Thủ tục này được thi hành thông qua việc
nối (join) các tập mục có chung các tiền tố (prefix) và sau đó áp dụng nguyên lý Apriori
để loại bỏ bớt những tập không thỏa mãn:
Bước nối: Sinh các tập mục c là ứng viên của tập phổ biến có độ dài k+1 bằng cách
kết hợp hai tập phổ biến li và lj ∈ Fk có độ dài k và trùng nhau ở k-1 mục đầu tiên:
c = li + lj = {i1, i2,…, ik-1, ik, ik’}. Với li = {i1, i2,…, ik-1, ik}, lj = {i1, i2,…, ik-1, ik’}, và
i1 ≤ i2 ≤…≤ ik1 ≤ ik ≤ ik’.
Bước tỉa: Giữ lại tất cả các ứng viên c thỏa thỏa mãn nguyên lý Apriori tức là mọi
tập con có độ dài k của nó đều là tập phổ biến (∀sk ⊆ c và |sk| = k thì sk ∈ Fk).
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
function Apriori_gen(Fk: tập các tập phổ biến độ dài k): Tập ứng viên có độ dài k+1
{
Ck+1 = ⍉;
for each li ∈ Fk
for each lj ∈ Fk
if (li[1]=lj[1]) and (li[2]=lj[2]) … and (li[k-1]=lj[k-1]) and (li[k]<lj[k]) then
{
c = {li[1], li[2], li[3],…, li[k], lj[k]};
if has_infrequent_subset(c, Fk) then
delete c;
else Ck+1 = Ck+1 ∪ {c};
}
return Ck+1;
}
Hàm has_infrequent_subset làm nhiệm vụ kiểm tra xem một ứng viên có độ dài k+1 có
chứa tập không phổ biến hay không, nếu có thì ứng viên lập tức bị loại. Đây là bước tỉa
dựa trên nguyên lý Apriori nhằm loại bỏ nhanh các ứng viên không thỏa mãn. Hàm này
được cài đặt như sau:
function has_infrequent_subset(c: Ứng viên có độ dài k+1, Fk: Tập các tập phổ biến độ
dài k): Boolean
{
for each sk ⊂ c
if sk ∉ Fk then return True;
return False;
}
Trong mỗi bước k, thuật toán Apriori đều phải duyệt cơ sở dữ liệu giao dịch D.
Khởi động thuật toán sẽ tiến hành duyệt D để có được F1 (loại bỏ những mục có độ hỗ
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
trợ nhỏ hơn mincount). Kết quả của thuật toán là tập gồm các tập phổ biến có độ dài từ 1
đến k:
F = F1 ∪ F2 ∪ … ∪ Fk
D. Sinh luật kết hợp từ các tập phổ biến
Để sinh các luật kết hợp thì đối với mỗi tập phổ biến X ∈ F, ta xác định các tập
mục không rỗng là con của X. Với mỗi tập mục con S không rỗng của X ta sẽ thu được
một luật kết hợp là S→(X\S). Nếu độ tin cậy của luật thỏa mãn ngưỡng minconf thì luật
đó là luật mạnh: ( )
conf ( ( \ )) minconf( )
C XS X S
C S .
Thủ tục để sinh luật kết hợp mạnh từ các tập phổ biến thuộc F như sau:
function Rules_Generation(F: Tập các tập phổ biến): Tập các luật kết hợp mạnh
{
R = ⍉;
F=F \ F1; //Các tập phổ biến độ dài 1 không dùng để sinh luật
for each X ∈ F
for each S ⊂ F
if conf(S→(X\S)) ≥ minconf then R = R ∪ { S→(X\S)};
return R;
}
2. Bài tập áp dụng
Bài tập số 1: Cho I = {A, B, C, D, E, F} và cơ sở dữ liệu giao dịch D:
T1 {A, B, C, F}
T2 {A, B, E, F}
T3 {A, C}
T4 {D, E}
T5 {B, F}
Cho ngưỡng minsup = 25% và minconf = 75%. Hãy xác định các luật kết hợp mạnh.
Giải
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
mincount = minsup * |D| 25%*5 1.25 2
Tập mục Số lần
xuất hiện
{A} 3
{B} 3
{C} 2
{D} 1
{E} 2
{F} 3
F3 chỉ có một phần tử nên không thể tiếp tục kết nối để sinh F4. Thuật toán kết thúc.
Ta có tập các tập phổ biến là:
F ={{A}, {B}, {C}, {E}, {F}, {A, B}, {A, C}, {A, F}, {B, F}, {A, B, F}}
F1 Số lần
xuất hiện
{A} 3
{B} 3
{C} 2
{E} 2
{F} 3
F2 Số lần
xuất hiện
{A, B} 2
{A, C} 2
{A, F} 2
{B, F} 3
Tập mục
{A, B}
{A, C}
{A, E}
{A, F}
{B, C}
{B, E}
{B, F}
{C, E}
{C, F}
{E, F}
C2 Số lần
xuất hiện
{A, B} 2
{A, C} 2
{A, E} 1
{A, F} 2
{B, C} 1
{B, E} 1
{B, F} 3
{C, E} 0
{C, F} 1
{E, F} 1
Tập mục
{A, B, C}
{A, B, F}
{A, C, F}
C3 Số lần
xuất hiện
{A, B, F} 2
F3 Số lần
xuất hiện
{A, B, F} 2
Sinh các tập phổ biến có độ dài 1: Loại {D}
vì xuất hiện ít hơn mincount
Sinh các tập mục
có độ dài 2 từ
tập phổ biến F1
Sinh tập ứng
viên C2 Sinh tập phổ
biến F2 từ C2:
Loại các tập
mục không
thỏa ngưỡng
mincount
Sinh các tập mục
có độ dài 3 từ
tập phổ biến F2
Bước tỉa: Loại
bỏ {A, B, C},
{A, C, F} vì
không thỏa mãn
nguyên lý
Apriori
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
Chỉ các tập phổ biến có độ dài 2 trở lên mới dùng để sinh luật kết hợp.
{A, B} có thể sinh các luật: {A}→{B}, {B}→{A}
({ , }) 2conf ({ } { }) 66.7%
({ }) 3
C A BA B
C A
({ , }) 2conf ({ } { }) 66.7%
({ }) 3
C A BB A
C B
{A, C} có thể sinh các luật: {A}→{C}, {C}→{A}
({ , }) 2conf ({ } { }) 66.7%
({ }) 3
C A CA C
C A
({ , }) 2conf ({ } { }) 100%
({ }) 2
C A CC A
C C
{A, F} có thể sinh các luật: {A}→{F}, {F}→{A}
({ , }) 2conf ({ } { }) 66.7%
({ }) 3
C A FA F
C A
({ , }) 2conf ({ } { }) 66.7%
({ }) 3
C A FF A
C F
{B, F} có thể sinh các luật: {B}→{F}, {F}→{B}
({ , }) 3conf ({ } { }) 100%
({ }) 3
C B FB F
C B
({ , }) 3conf ({ } { }) 100%
({ }) 3
C B FF B
C F
{A, B, F} có thể sinh các luật: {A}→{B, F}, {A, B}→{F}, {B}→{A, F}, {B, F}→{A},
{F}→{A, B}, {A, F}→{B}
({ , , }) 2conf ({ } { , }) 66.7%
({ }) 3
C A B FA B F
C A
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
({ , , }) 2conf ({ , } { }) 100%
({ , }) 2
C A B FA B F
C A B
({ , , }) 2conf ({ } { , }) 66.7%
({ }) 3
C A B FB A F
C B
({ , , }) 2conf ({ , } { }) 66.7%
({ , }) 3
C A B FB F A
C B F
({ , , }) 2conf ({ } { , }) 66.7%
({ }) 3
C A B FF A B
C F
({ , , }) 2conf ({ , } { }) 100%
({ , }) 2
C A B FA F B
C A F
Như vậy các luật kết hợp mạnh thu được gồm:
{C}→{A}, {B}→{F}, {F}→{B}, {A, B}→{F}, {A, F}→{B}
Bài tập số 2: Cho I = {A, B, C, D, E, F} và cơ sở dữ liệu giao dịch D:
T1 {D, E}
T2 {A, B, D, E}
T3 {A, B, D}
T4 {C, D, E}
T5 {F}
T6 {B, C, D}
Chọn ngưỡng minsup = 20% và minconf = 70%. Hãy xác định các luật kết hợp mạnh.
Giải
mincount = minsup * |D| 20%*6 1.2 2
Tập mục Số lần
xuất hiện
{A} 2
{B} 3
{C} 2
{D} 5
{E} 3
{F} 1
F1 Số lần
xuất hiện
{A} 2
{B} 3
{C} 2
{D} 5
{E} 3
Sinh các tập phổ biến có độ dài 1: Loại {F}
vì xuất hiện ít hơn mincount
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
F3 chỉ có một phần tử nên không thể tiếp tục kết nối để sinh ứng viên cho F4. Thuật toán
kết thúc. Tập các tập phổ biến thu được:
F = {{A}, {B}, {C}, {D}, {E}, {A, B}, {A, D}, {B, D}, {C, D}, {D, E}, {A, B, D}}
Chỉ các tập phổ biến có độ dài 2 trở lên mới có thể sinh luật:
{A, B} sinh luật: {A}→{B}, {B}→{A}
({ , }) 2conf ({ } { }) 100%
({ }) 2
C A BA B
C A
({ , }) 2conf ({ } { }) 66.7%
({ }) 3
C A BB A
C B
{A, D} sinh luật: {A}→{D}, {D}→{A}
Tập mục
{A, B}
{A, C}
{A, D}
{A, E}
{B, C}
{B, D}
{B, E}
{C, D}
{C, E}
{D, E}
C2 Số lần
xuất hiện
{A, B} 2
{A, C} 0
{A, D} 2
{A, E} 1
{B, C} 1
{B, D} 3
{B, E} 1
{C, D} 2
{C, E} 1
{D, E} 3
F2 Số lần
xuất hiện
{A, B} 2
{A, D} 2
{B, D} 3
{C, D} 2
{D, E} 3
Tập mục
{A, B, D}
C3 Số lần
xuất hiện
{A, B, D} 2
F3 Số lần
xuất hiện
{A, B, D} 2
Sinh các tập mục
có độ dài 2 từ
tập phổ biến F1
Sinh tập ứng
viên C2
Sinh tập phổ
biến F2 từ C2:
Loại các tập
mục không
thỏa ngưỡng
mincount
Sinh các tập mục
có độ dài 3 từ
tập phổ biến F2
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
({ , }) 2conf ({ } { }) 100%
({ }) 2
C A DA D
C A
({ , }) 2conf ({ } { }) 40%
({ }) 5
C A BD A
C D
{B, D} sinh luật: {B}→{D}, {D}→{B}
({ , }) 3conf ({ } { }) 100%
({ }) 3
C B DB D
C B
({ , }) 3conf ({ } { }) 60%
({ }) 5
C B DD B
C D
{C, D} sinh luật: {C}→{D}, {D}→{C}
({ , }) 2conf ({ } { }) 100%
({ }) 2
C C DC D
C C
({ , }) 2conf ({ } { }) 40%
({ }) 5
C C DD C
C D
{D, E} sinh luật: {D}→{E}, {E}→{D}
({ , }) 3conf ({ } { }) 60%
({ }) 5
C D ED E
C D
({ , }) 3conf ({ } { }) 100%
({ }) 3
C D EE D
C E
{A, B, D} sinh luật: {A}→{B, D}, {A, B}→{D}, {B}→{A, D}, {B, D}→{A},
{D}→{A, B}, {A, D}→B
({ , , }) 2conf ({ } { , }) 100%
({ }) 2
C A B DA B D
C A
({ , , }) 2conf ({ , } { }) 100%
({ , }) 2
C A B DA B D
C A B
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
({ , , }) 2conf ({ } { , }) 66.7%
({ }) 3
C A B DB A D
C B
({ , , }) 2conf ({ , } { }) 66.7%
({ , }) 3
C A B DB D A
C B D
({ , , }) 2conf ({ } { , }) 40%
({ }) 5
C A B DD A B
C D
({ , , }) 2conf ({ , } { }) 100%
({ , }) 2
C A B DA D B
C A D
Các luật kết hợp mạnh là:
{A}→{B}, {A}→{D}, {B}→{D}, {C}→{D}, {E}→{D}, {A}→{B, D}, {A,B}→{D},
{A, D}→B
Bài tập số 3: Cho I = {I1, I2, I3, I4, I5} và cơ sở dữ liệu giao dịch D:
Chọn ngưỡng minsup = 22%. Hãy xác định các tập phổ biến.
Giải
mincount = minsup * |D| 22%*9 1.98 2
T1 I1, I2, I5
T2 I2, I4
T3 I2, I3
T4 I1, I2, I4
T5 I1, I3
T6 I2, I3
T7 I1, I3
T8 I1, I2, I3, I5
T9 I1, I2, I3
F1 Số lần xuất hiện
{I1} 6
{I2} 7
{I3} 6
{I4} 2
{I5} 2
Tập mục Số lần xuất hiện
{I1} 6
{I2} 7
{I3} 6
{I4} 2
{I5} 2
Sinh tập phổ
biến độ dài 1
BÀI TẬP MÔN KHAI PHÁ DỮ LIỆU Chương 2: Khai phá luật kết hợp
Giảng viên: Nguyễn Vương Thịnh – Bộ môn: Hệ thống thông tin
Tập các tập phổ biến thu được là:
F = {{I1}, {I2}, {I3}, {I4}, {I5}, {I1, I2}, {I1, I3}, {I1, I5}, {I2, I3}, {I2, I4}, {I2, I5}, {I1, I2,
I3}, {I1, I2, I5}}
---------*&*----------
F2 Số lần
xuất hiện
{I1, I2} 4
{I1, I3} 4
{I1, I5} 2
{I2, I3} 4
{I2, I4} 2
{I2, I5} 2
C2 Số lần
xuất hiện
{I1, I2} 4
{I1, I3} 4
{I1, I4} 1
{I1, I5} 2
{I2, I3} 4
{I2, I4} 2
{I2, I5} 2
{I3, I4} 0
{I3, I5} 1
{I4, I5} 0
Tập mục
{I1, I2}
{I1, I3}
{I1, I4}
{I1, I5}
{I2, I3}
{I2, I4}
{I2, I5}
{I3, I4}
{I3, I5}
{I4, I5}
Tập mục
{I1, I2, I3}
{I1, I2, I5}
{I1, I3, I5}
{I2, I3, I4}
{I2, I3, I5}
{I2, I4, I5}
C3 Số lần
xuất hiện
{I1, I2, I3} 2
{I1, I2, I5} 2
F3 Số lần
xuất hiện
{I1, I2, I3} 2
{I1, I2, I5} 2
Tập mục
{I1, I2, I3, I5} F4 = ⍉
(Thuật toán
kết thúc)
Sinh tập mục
có độ dài 2
bằng cách kết
nối các tập
mục độ dài 1
Tạo tập ứng
viên có độ dài 2
Sinh tập mục có độ
dài 3 bằng cách kết
nối các tập mục có
độ dài 2
Loại bớt (tỉa) các tập mục không
thỏa mãn nguyên lý Apriori
Sinh tập mục có độ
dài 4 bằng cách kết
nối các tập mục có
độ dài 3
Loại bớt
(tỉa) các tập
mục không
thỏa mãn
nguyên lý
Apriori