CHƯƠNG 1 TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU
2.2 THUẬT TOÁN PHÂN LỚP DỮ LIỆU
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ả.