Thuật toán PHP (Perfect Hash and Pruning)

Một phần của tài liệu khai phá dữ liệu trên cơ sở phương pháp luật kết hợp và ứng dụng (Trang 63 - 65)

Khi kích thước của cơ sở dữ liệu tăng lên, thì thuật toán DHP thực hiện tốt hơn thuật toán Apriori [11]. Tuy nhiên, việc thực hiện của thuật toán DHP còn phụ thuộc lớn vào kích thước của bảng băm [18].

Trong thuật toán DHP, nếu chúng ta có thể định nghĩa được một bảng băm lớn sao cho mỗi itemset khác nhau được ánh xạ vào một vị trí khác nhau trong bảng băm, thì giá trị các ngăn chứa của bảng băm chính là support count của các itemset. Do đó, chúng ta không thực hiện lại việc tìm support count cho các itemset. Với ý tưởng đó, thuật toán PHP được cải tiến từ thuật toán DHP như sau: Thuật toán PHP sử dụng một bảng băm đầy đủ (perfect hashing) được sinh ra cho mỗi bước quét và đồng thời cũng giảm kích thước của cơ sở dữ liệu [18].

Hoạt động của thuật toán:

Trong bước quét đầu tiên, thuật toán tạo ra bảng băm có kích thước bằng số item trong CSDL. Mỗi item của CSDL được ánh xạ vào một vị trí khác nhau của bảng băm. Phương thức thêm (add) của bảng băm sẽ thêm một item x vào bảng băm và gán độ đếm (count) của nó là 1 nếu nó chưa có trong bảng băm, ngược lại tăng độ đếm của nó lên 1. Sau bước quét đầu tiên, bảng băm chứa tần số xuất hiện của

54

Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

item. Bằng việc chỉ duyệt qua bảng băm một lần, thuật toán có thể tìm được các frequent 1 – itemset. Sau thao tác này, phương thức tỉa (prune) của bảng băm sẽ loại bỏ tất cả các phần tử mà độ hỗ trợ của nó nhỏ hơn min_sup.

Trong các bước tiếp theo, thuật toán cắt tỉa CSDL bằng cách loại bỏ những giao dịch mà nó không chứa một frequent itemset nào cả và cũng cắt bỏ những item không là frequent khỏi các giao dịch. Thuật toán sinh các k – itemset ứng cử viên và đếm tần số xuất hiện của nó cùng một lúc. Sau mỗi bước quét, Dk chứa CSDL đã được cắt tỉa, Hk chứa tần số xuất hiện của các k – itemset ứng cử viên, Lk là tập frequent k – itemset. Quá trình này được thực hiện cho đến khi Lk = .

Thuật toán PHP:

Input: Cơ sở dữ liệu D, min_sup_count. Output: L tập các frequent itemset trong D

// items là tập các item. // Tạo bảng băm H1

For each transaction T D do For each item x in T do

H1.add (x);

// Sinh tập frequent 1- itemset L1

For each item y in H1do

If H1.hasssupport (y) then

L1 = L1  y;

// xoá các giá trị băm nhỏ hơn min_sup_count H1.prune (min_sup_count); D1 = D; // Dk là CSDL đã được cắt tỉa K = 2; Repeat Dk = ; Lk = ;

55

Số hóa bởi Trung tâm Học liệu - Đại học Thái Nguyên http://www.lrc-tnu.edu.vn

For each transaction T Dk+1do begin

// w là tập có (k-1) phàn tử của items trong T.

If ww  Lk-1 then

Skip t;

Else

Items = ;

For each k-itemset y in Tdo

If ( z z = (k-1) subset of y)  (Hk- 1.hasssupport(z))

Then Hk.add (y); Items=items  y;

end

Dk = Dkt ; (adsbygoogle = window.adsbygoogle || []).push({});

end

for each itemset y in Hkdo if Hk.hasssupport (y) then

Lk = Lk y;

end

// xoá các giá trị băm nhỏ hơn min_sup_count từ Hk

Hk.prune (min_sup_count );

k++;

Until Lk-1 = ;

Return L =kLk;

Một phần của tài liệu khai phá dữ liệu trên cơ sở phương pháp luật kết hợp và ứng dụng (Trang 63 - 65)