Khai phá các tập mục phổ biến dựa trên Data-cube

Một phần của tài liệu Khai phá dữ liệu phát hiện luật kết hợp và ứng dụng đối với kho dữ liệu của ngân hàng (Trang 38)

Dựa trên công cụ OLAP, chúng ta có thể khai phá tập mục phổ biến đa chiều trực tiếp từ Data-cube mà không cần qua bước trung gian là khai phá tập mục phổ biến nhị phân. Thuật toán thực hiện khai phá tập mục phổ biến được thực hiện hiệu quả hơn nhiều vì độ hỗ trợ của mọi ứng cử đã được tính toán trước và lưu trữ sẵn trong các cell thuộc Data- cube, và do đó chúng ta sẽ không phải thực hiện quét lại toàn bộ CSDL để tính độ hỗ trợ cho các ứng cử nữa. Tuy nhiên có vấn đề xảy ra khi bản thân các mục thuộc cùng một thuộc tính cũng có quan hệ kết hợp với nhau, nói cách khác lúc này sẽ không có cell nào thuộc Data-cube phản ánh mối quan hệ đó, giải pháp trong trường hợp này là tách mỗi mục này thành một Boolean-dimension (nhận giá trị 1 khi mục tồn tại và 0 khi mục đó không tồn tại) và bổ sung các dimension mới này vào Data-cube.

Một trong những thuật toán tiêu biểu khai phá tập mục phổ biến từ Data-cube được đề xuất bởi Hua Zhu [111], về cơ bản giải thuật này tương tự như giải thuật Apriori trong đó tận dụng cấu trúc Data-cube.

Bảng 2.11: Thuật toán tìm tập mục phổ biến từ Data-cube của Hua Zhu.

Input: Data-cube n chiều DC[d1, ..., dn], ngưỡng độ hỗ trợ cực tiểu minsup. Output: Tập L chứa mọi tập mục phổ biến k chiều trong DC.

(1) k = 1; L = ;

(2) Generate candidate 1-itemsets for each dimension

C1 =  C1, di (i = 1 to n), in which C1, di = {all distinct values in dimension di} ; (3) Compute frequent 1-itemsets L1 = Gen_Frequent(1, C1);

(4) repeat {

k = k + 1;

Generate candidate k-itemsets Ck = Gen_Candidate(k, Lk-1);

Compute frequent k-itemsets Lk = Gen_Frequent(k, Ck); L = L Lk;

} until Lk = ; (5) return L;

Function Gen_Frequent(k, Ck)

// Generate frequent k-itemsets Lk from candidates Ck. (1) Lk = ; // Init.

(2) for each candidate I = {i1, ..., ik} Ck do // Scan all candidate {

37

I.frequency = Value of cell (i1, ..., ik) in DC;

if (I.frequency  minsup) Lk = Lk {I};

}

(3) return Lk;

Function Gen_Candidate(k, Lk-1)

// Generate candidates k-itemsets Ck from Lk-1. (1) Ck = ; // Init.

(2) for each itemset I1 Lk-1 do // Scan to join for each itemset I2 Lk-1 do

if (I1 and I2 has (k-2) same dimension-and-value but the other one is different dimension) {

c = I1 join I2;

if ( s is subset (k-1) items of c | s Lk-1) delete c; else add c to Ck;

} (3) return Ck;

Minh hoạ thuật toán tìm tập mục phổ biến từ Data-cube trong Bảng 2.10 với giả định

minsup = 177000 (10%):

(I) Sinh tập ứng cử 1-itemset C1 = C1, di (i = 1 to n), trong đó:

C1, Gender = {Nam (809920), Nữ (960080)};

C1, AgeRank = {Trẻ (214400), Trung bình (665600), Trung niên (648000), Già (242000)}; C1, BalanceRank = {Dư Nhỏ (558000), Dư Vừa phải (824000)

, Dư Lớn (322200), Dư Rất lớn (65800)};

(II) Tìm tập mục phổ biến 1-itemset L1 với minsup = 177000 ta có:

L1 = { Nam (809920), Nữ (960080)

, Trẻ (214400), Trung bình (665600), Trung niên (648000), Già (242000) , Dư Nhỏ (558000), Dư Vừa phải (824000), Dư Lớn (322200)

}

(III) Bước lặp:

// Chú ý: Các mục cùng dimension sẽ không được kết hợp với nhau vì độ hỗ trợ luôn là 0. (1) k = 2, ta có:

C2 = {{Nam, Trẻ} (84720), {Nam, Trung bình} (335200) , {Nam, Trung niên} (280000), {Nam, Già} (110000) , {Nam, Dư Nhỏ} (284000), {Nam, Dư Vừa phải} (356000) , {Nam, Dư Lớn} (120600)

, ...

, {Già, Dư Lớn} (100000) }

=> L2 = {{Nam, Trung bình} (335200), {Nam, Trung niên} (280000) , {Nam, Dư Nhỏ} (284000), {Nam, Dư Vừa phải} (356000) , {Nữ, Trung bình} (330400), {Nữ, Trung niên} (368000) , {Nữ, Dư Nhỏ} (274000), {Nữ, Dư Vừa phải} (468000) , {Nữ, Dư Lớn} (201600)

, {Trung bình, Dư Nhỏ} (270000), {Trung bình, Dư Vừa phải} (340000) , {Trung niên, Dư Vừa phải} (320000)

}

(2) k = 3, ta có:

C3 = {{Nam, Trung bình, Dư Nhỏ} (120000)

, {Nam, Trung bình, Dư Vừa phải} (180000) , ...

, {Nữ, Trung niên, Dư Lớn} (120000) }

=> L3 = {{Nam, Trung bình, Dư Vừa phải} (180000) , {Nữ, Trung niên, Dư Vừa phải} (200000) }

(3) k = 4, ta có:

C4 =  => L4 = 

(IV) Kết quả L = L1  L2  L3;

Nhận xét: giải thuật mà Hua Zhu đề xuất chưa tận dụng tối đa cấu trúc dữ liệu Data- cube, đơn cử chúng ta có thể đề ra giải thuật DataCubeSimpleGenFrequentItemsets tận dụng Data-cube tốt hơn, và hơn hết nó chỉ đơn giản là một truy vấn SQL như sau:

Bảng 2.12: Thuật toán DataCubeSimpleGenFrequentItemsets.

Input: Data-cube n chiều DataCube[d1, ..., dn], ngưỡng độ hỗ trợ cực tiểu minsup. Output: Tập L chứa mọi tập mục phổ biến k chiều trong DC.

select t.ItemList as ItemsSet, t.Value as SupportFrequency into L

from DataCube as t where

39

;

Ở đây để tăng hiệu năng của thuật toán DataCubeSimpleGenFrequentItemsets, ta chỉ cần thực hiện sắp xếp hoặc đặt chỉ mục (Indexing) cho trường Value của DataCube là đủ.

2.4.3. Đánh giá

Trong trường hợp khai phá tập mục phổ biến dựa trên Data-cube, chúng ta cũng dễ thấy tính đúng đắn của thuật toán. Còn về độ phức tạp, ta thấy thuật toán gồm có 2 pha:

- Pha đầu là xây dựng Data-cube, độ phức tạp là O(s).

- Pha sau là khai phá tập mục phổ biến từ Data-cube, độ phức tạp là k*O(s). Trong đó s là kích thước của Data-cube, s = |d1| * ... * |dn|, và 0 < k < 1.

Trong thực tế minsup phải đủ lớn để tập mục là phổ biến và dữ liệu trong Data-cube thường được chỉ mục hoá nên k << 1, do đó ta có thể bỏ qua thời gian thực hiện pha sau mà chỉ quan tâm tới thời gian xây dựng Data-cube.

Thời gian thực hiện xây dựng Data-cube thường rất lâu, thậm chí lâu hơn nhiều so với khai phá trực tiếp tập mục phổ biến bằng giải thuật Apriori do kích thước của Data-cube là khổng lồ, tuy nhiên sau khi sau khi đã xây dựng xong Data-cube thì việc thực hiện khai phá diễn ra cực kỳ nhanh chóng do k << 1 (chỉ phụ thuộc vào minsup). Do đó việc khai phá dữ liệu dựa trên Data-cube chỉ áp dụng trong trường hợp người sử dụng thực hiện khai phá nhiều lần trên cùng một CSDL mà chỉ thay đổi độ hỗ trợ cực tiểu minsup mà thôi, vì vậy nó thường được áp dụng trong khai phá dữ liệu trực tuyến (Online mining) và khai phá dữ liệu trong Data warehouse.

Một phần của tài liệu Khai phá dữ liệu phát hiện luật kết hợp và ứng dụng đối với kho dữ liệu của ngân hàng (Trang 38)

Tải bản đầy đủ (PDF)

(60 trang)