.11 SOTrieIT của dữ liệu ở bảng 1.1

Một phần của tài liệu Phát triển thuật toán khai phá luật kết hợp dựa vào sự phân lớp dữ liệu (Trang 35)

Thủ tục RARM

Thủ tục RARM tìm các tập mục dữ liệu thường xuyên qua hai bước.

Root B:7 A:6 C:6 D:2 E:2 C:4 E:3 D:2 B:4 C:4 E:2 D:1 E:1

xuyên và độ hỗ trợ là mục dữ liệu và số đếm của nút. Duyệt trên các nút mức 2, bắt đầu từ nút trái nhất, nếu tại nút có số đếm lớn hơn ngưỡng thì trích ra tập mục dữ liệu có 2 phần tử gồm phần tử tại nút và phần tử ở nút mức 1 tương ứng, độ hỗ trợ của tập này là số đếm ở nút mức 2. Tiếp tục các nút bên phải cho đến khi gặp một nút có số đếm nhỏ hơn ngưỡng hay hết nút. Việc duyệt trên nút mức 1 cũng từ trái sang phải cho đến khi gặp một nút có số đếm nhỏ hơn ngưỡng hay hết nút.

Bước 2: Từ tập các tập thường xuyên có 1 và 2 mục dữ liệu, dùng thuật tốn

Apriori để tìm ra các tập thường xun có nhiều hơn 2 mục dữ liệu.

Thuật tốn RARM có thể lưu SOTrieIT ra bộ nhớ ngồi vào khơi phục lại cây khi cần thiết. Khi dữ liệu gia tăng, có thể thêm dữ liệu vào cây và sắp xếp lại. Thuật toán này giải quyết được vấn đề dữ liệu gia tăng, tuy nhiên việc tìm các tập mục dữ liệu thường xun có hơn 2 mục dữ liệu thì gặp lại vấn đề của Apriori là có thể bùng nổ tập ứng viên và số lần duyệt cơ sở dữ liệu.

1.4.4 Thuật toán Partition_P_Tree

Năm 2006, Shakil Ahmed và đồng nghiệp thuộc khoa Khoa học Máy tính trường Đại học Liverpool phát triển và cơng bố thuật tốn Partition_P_Tree

[17]. Nội dung cơ bản của thuật toán này gồm các bước: 1) Xác định một thứ tự cho các mục dữ liệu thường xuyên.

2) Chia danh sách các mục dữ liệu đã có thứ tự thành h nhóm và đánh số 1, 2, 3, …, h.

3) Phân chia cơ sở dữ liệu giao tác thành j phân đoạn, sao cho mỗi phân đoạn có thể đưa hết vào bộ nhớ trong.

4) Ứng với mỗi phân đoạn, xây dựng h PP_Tree ở bộ nhớ trong, cuối cùng lưu kết quả ra bộ nhớ ngồi. Q trình xây dựng này chỉ cần một lần duyệt dữ liệu gốc.

5) Ứng với nhóm 1, đọc cây PP1 của mọi phân đoạn vào bộ nhớ rồi áp dụng thuật tốn Apriori-TFP tạo một T_Tree để tìm các tập mục dữ liệu thường xuyên

trong nhóm này. Giai đoạn này, trên mỗi phân đoạn chỉ đọc các cây PP1 đúng một lần. T_Tree giữ trong bộ nhớ trong suốt quá trình xử lý, cuối cùng được lưu lên đĩa.

6) Lặp lại bước 5 cho các nhóm 2, 3, …, h.

Hướng tiếp cận này có nhiều ưu điểm, tuy vẫn cịn hạn chế:

1) Khi xây dựng các PP_Tree trên mỗi phân đoạn dữ liệu phải đếm số lần xuất hiện của tất cả các tập mục dữ liệu trong từng nhóm để đưa vào cây, dẫn đến việc xây dựng các PP_Tree là phức tạp.

2) Khi tìm tập các tập thường xuyên ở bước 5 bằng cách dùng thuật toán

Apriori-TFP tạo T_Tree, cây T_Tree phải lưu giữ trong suốt q trình tính tốn,

điều này gặp khó khăn trong trường hợp dữ liệu lớn.

3) Đặc biệt, hướng tiếp cận này khơng thể xử lý đồng thời để có kết quả nhanh. Để khắc phục hạn chế của các cách tiếp cận trên, tác giả Nguyễn Hữu Trọng trong [2] đã đề xuất thuật toán Phân hoạch kép (PHK) để tìm các tập mục dữ liệu thường xuyên dựa trên kỹ thuật hai lần phân hoạch dữ liệu.

1.4.5 Thuật toán phân hoạch kép

Nội dung của thuật toán Phân hoạch kép bao gồm các bước:

1) Duyệt qua cơ sở dữ liệu lần thứ nhất để tính độ hỗ trợ của tất cả các mục dữ liệu.

2) Phân hoạch lần thứ nhất: Duyệt qua cơ sở dữ liệu lần thứ hai để phân hoạch các giao tác: Ứng với mỗi giao tác, tạo một danh sách gồm các mục dữ liệu trong giao tác và sắp xếp các mục này theo thứ tự giảm dần của độ hỗ trợ, xi là mục dữ liệu đầu tiên trong danh sách. Lưu danh sách này vào tập tin FPDi.

3) Phân hoạch lần thứ hai: Ứng với mỗi tập tin FPDi, xây dựng cấu trúc SP_Tree, là cấu trúc cây nhị phân để chuyển tập tin FPDi vào bộ nhớ trong. Duyệt

4) Dùng thủ tục SPP_Mining để khai phá tập thường xuyên theo ngưỡng S0. SPP_Mining dùng thuật toán tựa Apriori (Thuật toán Apriori trên cơ sở dữ liệu giao tác có trọng số) để tìm tất cả các tập thường xuyên trong từng FPPj, là tập hậu tố của

xj. Nối xj vào các tập thường xuyên trong FPPj ta được tập các danh sách mục thường xuyên bắt đầu xj của T. Tập các danh sách mục dữ liệu thường xuyên trên toàn cơ sở dữ liệu là hội tất cả các tập danh sách mục dữ liệu thường xuyên bắt đầu

xj với 1 ≤ j ≤ n.

Chi tiết thuật tốn được trình bày trong [2].

Thuật tốn PHK có khối lượng tính tốn nhỏ hơn, chạy nhanh hơn các thuật

tốn Apriori và Partition_P_Tree vì các lý do sau:

1) Thuật tốn Phân hoạch kép chỉ có hai lần duyệt qua cơ sở dữ liệu. Sau khi

xây dựng xong các SP_Tree, một lần duyệt qua cây là xác định được tất cả các độ hỗ trợ của các mục dữ liệu trong phân hoạch, không phải đếm số lần chúng xuất hiện trong từng giao tác.

2) Trong q trình giải bài tốn, khi phân hoạch dữ liệu ở bước 2 và 3, thuật toán PHK chưa xét đến độ hỗ trợ, đến bước 4, tìm các tập mục dữ liệu thường xuyên mới xét đến độ hỗ trợ và chỉ xử lý trên các tập dữ liệu phân hoạch. Do đó, trong q trình khai phá dữ liệu với các độ hỗ trợ khác nhau, nếu dữ liệu chưa thay đổi thì khơng phải phân hoạch lại dữ liệu, giảm thiểu thời gian đáng kể.

3) Thuật toán PHK chia nhỏ dữ liệu và xử lý trên tập tin nên độ lớn dữ liệu tùy thuộc vào dung lượng bộ nhớ ngồi, do đó, khi giải bài tốn khơng cần đến máy tính có bộ nhớ trong lớn.

4) Mỗi phần tử của tập FPPj là một bộ (X, Sup_X), với Sup_X là độ hỗ trợ của X trong T, số phần tử của FPPj (là tập các hậu tố của xj, khơng có mục dữ liệu

xj) nhỏ hơn nhiều so với T. Hơn nữa, có nhiều xj khơng có hậu tố, tức FPPj rỗng, khi

áp dụng thuật toán Apriori để khai phá tập thường xun sẽ giảm khối lượng tính tốn rất lớn.

5) Khi tìm các tập mục dữ liệu thường xuyên, PHK tìm trên từng tập FPPi

riêng rẽ nên dễ dàng cài đặt chương trình đồng thời thực hiện trên các máy tính đa bộ xử lý hoặc trên n máy độc lập, do đó tốc độ xử lý nhanh chóng hơn, hiệu quả hơn.

1.5 KẾT LUẬN

Hơn một thập niên, từ năm 1993, R. Agrawal, T. Imielinski và A.N. Swami đưa ra những khái niệm đầu tiên về tập thường xuyên, luật kết hợp, khai phá dữ liệu,… rất nhiều nhà nghiên cứu đã đưa ra nhiều giải thuật khác nhau nhằm cải tiến tốc độ tính tốn, tối ưu việc sử dụng bộ nhớ và giảm thiểu số lần truy cập đĩa để tìm tất cả các tập thường xuyên.

Tuy nhiên, chỉ một số rất nhỏ những nhà nghiên cứu công khai mã nguồn của

những giải thuật của họ, do đó việc đánh giá và so sánh thực nghiệm giữa các giải thuật thật là khó khăn.

5. CHƯƠNG 2. PHÁT TRIỂN THUẬT TOÁN KHAI PHÁ LUẬT KẾT HỢP DỰA VÀO SỰ PHÂN LỚP DỮ LIỆU

Trong chương này, tác giả đề xuất phương án phân lớp cơ sở dữ liệu giao tác bằng cách thêm ”trọng số” cho mục dữ liệu nhằm rút gọn không gian xử lý và lưu trữ. Đưa ra thuật toán cải tiến thuật toán Apriori và FP_Growth để tìm tập thường

xuyên trên cơ sở dữ liệu đã phân lớp.

2.1 PHÂN LỚP DỮ LIỆU

2.1.1 Một số định nghĩa trên CSDL giao tác

a. Định nghĩa 1: CSDL giao tác có trọng số

Cho I = {x1, x2, …, xn} là tập hợp các mục dữ liệu. Một bộ ti = ((xi1,wi1), (xi2, w i2), …, (xik, wik)) với {xi1, xi2, …, xik} ⊆ I và w ij ∈ N, j =1..k gọi là một giao tác

có trọng số trên I, wij là trọng số của mục dữ liệu xij trong ti. Một bảng gồm m giao tác có trọng số T = {t1, t2, …, tm} gọi là một CSDL giao tác có trọng số trên I.

b. Định nghĩa 2: CSDL giao tác có trọng số được sắp

Cho T = {t1, t2, …, tm} là một CSDL giao tác có trọng số trên I = {x1, x2, …, xn}. Ta định nghĩa: SuppW(xi) là tổng các trọng số của xi trong tất cả các giao tác

của T.

𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆(𝑥𝑥𝑖𝑖) = � 𝑤𝑤𝑖𝑖𝑗𝑗

𝑚𝑚 𝑗𝑗=1 �𝑥𝑥𝑖𝑖𝑗𝑗,𝑤𝑤𝑖𝑖𝑗𝑗�∈𝑡𝑡𝑗𝑗; 𝑥𝑥𝑖𝑖=𝑥𝑥𝑖𝑖𝑗𝑗

Một giao tác ti = ((xi1,wi1), (xi2, w i2), …, (xik, wik)) có SuppW(xi1) ≥

SuppW(xi2) ≥ … ≥SuppW(xik) được gọi là một giao tác có trọng số được sắp trên I.

Một CSDL giao tác có trọng số trên I mà mọi giao tác đều được sắp được gọi là một CSDL giao tác có trọng số được sắp trên I.

c. Định nghĩa 3: Quan hệ nửa tương đương

1) ∀ a ∈ A: aRa

2) ∀ a, b, c ∈ A: nếu aRb và bRc thì aRc

d. Định nghĩa 4: Quan hệ

Cho T = {t1, t2, …, tm} là CSDL giao tác có trọng số được sắp trên I. Trên T ta

định nghĩa một quan hệ ≈ như sau:

∀ti, tj ∈ T: ti = ((xi1,wi1), (xi2, wi2), …, (xis, wis)), tj = ((xj1, wj1), (xj2, wj2), …, (xjr, wjr )),

ti ≈ tj ⇔ s ≤ r và xi1 = xj1, xi2 = xj2, …, xis = xjs.

2.1.2 Phân lớp CSDL giao tác

a. Lớp tương đương

Ta thấy rằng quan hệ ≈ trong định nghĩa 4 là quan hệ nửa tương đương trên T. Ta định nghĩa lớp nửa tương đương trên T như sau:

[ti]≈ =�tj�ti≈ tj�

b. CSDL giao tác có trọng số được sắp rút gọn

Cho T = {t1, t2, …, tm} là CSDL giao tác có trọng số được sắp trên I. Khi đó,

ta gọi T = {[ti]≈|ti∈T} là CSDL giao tác có trọng số được sắp rút gọn trên I.

c. Định nghĩa 5: Phép toán ⊕T

Cho T = {t1, t2, …, tm} là CSDL giao tác có trọng số được sắp trên I. Trên T ta

định nghĩa một phép toán ⊕T như sau:

∀ti, tj ∈ T: ti = ((xi1,wi1), (xi2,wi2), …, (xis,wis)), tj = ((xj1,wj1), (xj2,wj2), …, (xjr,wjr )).

2.2 THUẬT TOÁN PHÂN LỚP DỮ LIỆU2.2.1 Mơ tả bài tốn 2.2.1 Mơ tả bài tốn

Đầu vào: CSDL giao tác T = {t1, t2, …, tm} trên tập mục dữ liệu I = {x1, x2, …, xn}. Đầu ra: CSDL giao tác có trọng số được sắp rút gọn trên I: T = {t’1, t’2, …, t’k}.

2.2.2 Xử lý

Quá trình phân lớp bao gồm hai bước:

a. Bước 1: Duyệt CSDL giao tác T lần thứ nhất để tính độ hỗ trợ cho mỗi

mục dữ liệu.

Ta được: wj = Supp(xij) với j=1..n.

Sắp xếp wj thành một dãy có thứ tự giảm dần: w1 ≥ w2 ≥… ≥ wn

b. Bước 2: Duyệt CSDL giao tác T lần thứ hai, sắp xếp các mục dữ liệu

trong giao tác theo thứ tự giảm dần của độ hỗ trợ T’.

Với t = (xi1, xi2, …, xik) ∈ T’ , có Supp((xi1) ≥ Supp((xi2) ≥ … ≥Supp((xik)

c. Bước 3: Tạo cây trọng số W_Tree.

Hình 2.112Cây trọng số W_Tree

xi1 xi2 xin

t11 t12 t1r x11|w11 x21|w21 xk1|wk1 x12|w12 x22|w22 xs2|ws2 xr1|wr1 xr1|wr2 xp1|wrp Root

Cây W_Tree là một cây có nhiều thành phần.

Các nút cấp 1: Xâu các nút, mỗi nút chứa mục dữ liệu xij thỏa:

Supp((xi1) ≥ Supp((xi2) ≥ … ≥ Supp((xin) Pt_1=^Node_1; Node_1=Record Inf:Item; Right:Pt_1; Left:Pt_2; End;

Mỗi nút xij có con trỏ trỏ đến các nút cấp 2, là các lớp tương đương của giao tác bắt đầu là xij.

Các nút cấp 2: Xâu các nút, mỗi nút chứa một lớp tương đương [tij]≈. Tại một

nút cấp hai có một con trỏ trỏ đến một xâu các nút cấp 3, là các mục dữ liệu và trọng số của nó trong lớp tương đương.

Pt_2=^Node_2; Node_2=Record Inf:Transaction; Right:Pt_2; Left:Pt_3; End;

Node_3=Record

ItemName:Transaction; ItemCount:Integer; Next:Pt_3;

End;

Trong cây trên có nghĩa là:

t11= ((x11,w11), (x21,w21), …, (xk1,wk1)) thỏa w11 ≥ w21 ≥ … ≥ wk1

Để tạo cây, ta duyệt qua cơ sở dữ liệu T’, với mỗi t ∈ T’, gọi thủ tục

Insert_Tree(t,Root) chèn giao tác t vào cây.

Thủ tục Insert_Tree(t, Root) làm việc như sau:

- Lấy xij là mục dữ liệu đầu tiên của t, duyệt trên các nút cấp 1 của cây đến nút xij, - Nếu nút xij chưa có nút con cấp 2 thì tạo nút P, là nút con cấp 2 của nút xij, và gán P^.Inf:=t. Gọi thủ tục InsertItem_1(t, P)

- Ngược lại, nút xij có nút con P, gọi thủ tục InsertItem_2(t, P);.

Thủ tục InsertItem_1(t, P) thực hiện như sau: Tạo một xâu các nút Nk con

cấp 3 của P, theo thứ tự xuất hiện của các mục dữ liệu trong t, với xij ∈ t, gán

Nk.ItemName:=xij và Nk.ItemCount:=1.

Thủ tục InsertItem_2(t, P) thực hiện như sau:

- Nếu P^.Inf ⊆ t thì tăng các ItemCount trong các nút con cấp 3 của P có

ItemName là một mục dữ liệu của t lên 1 đơn vị. Tạo các nút Nk tiếp theo cho các mục dữ liệu xij ∈ t và xij∉P^.Inf, gán Nk.ItemName:=xij và Nk.ItemCount:=1.

- Nếu t ⊆ P^.Inf thì tăng các ItemCount trong các nút con cấp 3 của P có

ItemName là một mục dữ liệu của t lên 1 đơn vị.

- Nếu không thuộc hai trường hợp trên, duyệt trên các nút phải của P để tìm nút P1 có P1^.Inf ⊆ t hay t ⊆ P1^.Inf. Nếu có thì gọi InsertItem_2(t, P1),

ngược lại tạo tiếp nút P1 là nút con cấp 2 sau P, Gọi thủ tục InsertItem_1(t, P1).

d. Bước 4: Chuyển dữ liệu từ cây W_Tree ra tập dữ liệu: Duyệt qua cây, ứng

với mỗi tij, lưu tij ra file kết quả.

2.3 PHÁT TRIỂN THUẬT TỐN TÌM TẬP THƯỜNG XUN TRÊN CSDL

ĐÃ PHÂN LỚP

2.3.1 Phát triển thuật toán xây dựng FP_Tree

− Duyệt qua CSDL giao tác đã được phân lớp T, loại bỏ những mục dữ liệu

không thường xuyên và rút gọn một lần nữa ta được T’ bằng cách: Nếu tồn tại ti, tj ∈ T: ti = ((xi1,wi1), (xi2,wi2), …, (xis,wis)), tj = ((xj1,wj1), (xj2,wj2), …, (xjr,wjr )) thỏa (xi1, xi2, …, xis) ≈ (xj1 xj2, …, xjr) thì thay ti, tj bởi t = ti⊕T tj

− Ứng với mỗi t=[(xi1,wi1), (xi2,wi2),…, (xik,wik)] ∈ T’, Khi chèn X:= (xij,wij) vào vào

nút P thay vì P.ItemCount:= P.ItemCount +1 ta thay P.ItemCount:= P.ItemCount +wij;

2.3.2 Thuật toán Apriori

Với ngưỡng tối thiểu s0, thuật tốn Apriori trên CSDL có trọng số có hai bước để tìm ra tất cả các tập mục dữ liệu thường xuyên:

Bước 1: Khi xây dựng CSDL giao tác có trọng số được sắp rút gọn T, ta lưu

lại độ hỗ trợ của các mục dữ liệu. Duyệt qua T, loại bỏ những mục dữ liệu không thường xuyên và rút gọn một lần nữa ta được T’ như ở phần thuật toán xây dựng

PF_Tree. Ở bước 2 ta duyệt trên T’

Trên T’, để tính supp của tập mục dữ liệu X ta thực hiện: Duyệt qua T’, ứng với mỗi t = [(xi1,wi1), (xi2,wi2), …, (xik,wik)] ∈ T’: Nếu X ⊆ {xi1, xi2,…, xik} thì

Supp(X) := Supp(X)+ Min{wi1, wi2,…, wik}.

1. C'k là tập các tập k mục dữ liệu có được bằng cách hợp từng hai tập k-1 mục

dữ liệu thường xuyên trong Lk-1 có k-2 mục dữ liệu đầu tiên giống nhau, mục thứ k-1

khác nhau.

2. Lập tập ứng viên Ck bằng cách loại bỏ những tập trong C'k có một tập con k- 1 mục dữ liệu nhưng không là tập k-1 mục dữ liệu thường xuyên.

3. Ứng với mỗi tập ứng viên k mục dữ liệu trong Ck, tính độ hỗ trợ của nó để xem tập này có phải là tập thường xun hay khơng, ta được tập Lk.

Lặp bước 2 cho đến khi tập k mục dữ liệu thường xuyên là rỗng.

Với thuật tốn Apriori, chi phí nhiều nhất là duyệt qua CSDL để tính độ hỗ trợ của các tập ứng viên. Với CSDL giao tác có trọng đã phân lớp, số giao tác đã rút gọn rất nhiều lần nên thời gian thực hiện giảm đi rất nhiều lần.

2.4 VÍ DỤ MINH HỌA Cho CSDL giao tác T: Cho CSDL giao tác T: Giao tác Mục dữ liệu t1 A, B, E t2 B t3 B, C t4 A, B, D t5 A, C t6 B, C t7 A, C t8 A, B, C, E t9 A, B, C t10 A, B, E, G Bảng 2.1 CSDL giao tác mẫu

2.4.1 Phân lớp dữ liệu

a. Bước 1: Duyệt CSDL T lần thứ nhất để tính độ hỗ trợ cho mỗi mục dữ liệu :

(B:8; A:7; C:6; E:3; D:1; G:1)

b. Bước 2: Duyệt CSDL T lần thứ hai, sắp xếp các mục dữ liệu trong giao tác

Một phần của tài liệu Phát triển thuật toán khai phá luật kết hợp dựa vào sự phân lớp dữ liệu (Trang 35)

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

(63 trang)