Thuật toán FP-Growth

Một phần của tài liệu (LUẬN văn THẠC sĩ) tư vấn trong thương mại điện tử dựa trên phân tích mẫu phổ biến từ dữ liệu nhật ký truy cập của khách hàng 04 (Trang 26 - 30)

CHƢƠNG 2 LÝ THUYẾT KHAI PHÁ MẪU PHỔ BIẾN VÀ LUẬT KẾT HỢP

2.4. Thuật toán tìm kiếm tập phổ biến và luật kết hợp

2.4.1. Thuật toán FP-Growth

Thuật toán FP-Growth [39][40] đƣợc đề xuất bởi Han và cộng sự, nhƣ đã biết qua về ý tƣởng của thuật toán này ở phần giới thiệu hƣớng tiếp cận ở trên, trong phần này luận văn sẽ đi sâu vào chi tiết. Thuật toán sẽ gồm hai bƣớc là xây dựng cây FP-Tree để cấu trúc dữ liệu, và sau đó là khai phá các mẫu phổ biến trên cây.

Những khái niệm riêng và đặc tính của thuật toán:

 FP-Tree (Frequent pattern tree) là cây mẫu phổ biến có cấu trúc gồm nút gốc root

đƣợc gán nhãn „null‟, tập các cây con tiền tố item (itemprefix). Mỗi nốt trong cây tiền tố chứa ba trƣờng: item-name, node-linkcount. Với item-name định dạng tên item (có thể là ID, tên…) ở nốt đó, count là số transaction trong riêng đƣờng đi tới nốt đó, node-link liên kết tới nốt nào tiếp theo trong cây mang cùng item-name, nếu không có sẽ để „null‟. Mỗi khi đi vào bảng header chứa hai trƣờng là item- namehead của node-link chỉ với nốt đầu tiên trong FP-Tree mang item-name

 Không tính nút gốc thì kích cỡ của FP-Tree giới hạn bởi số lƣợng những item phổ biến, và có chiều cao giới hạn bởi số item phổ biến tối đa có thể có trong

transaction.

 Thuộc tính của node-link: Bất kỳ item phổ biến 𝑖𝑘 nào, tất cả các mẫu phổ biến có thể đều chứa 𝑖𝑘 lấy ra đƣợc bởi theo node-link bắt đầu từ head của 𝑖𝑘trong header

của FP-Tree.

 Thuộc tính của đƣờng tiền tố (prefix path): để tính mẫu phổ biến cho nốt 𝑖𝑘 trong

path P, chỉ đƣờng tiền tố con của nốt 𝑖𝑘 đƣợc xem xét lấy ra, số đếm tần xuất của mọi nốt trong cây tiền tố nên mang bằng 𝑖𝑘.count.

 Sự tăng mảnh (Fragment growth) với a là một itemset trong DB (Database), B là mẫu cơ sở điều kiện của a, và b là một itemset trong B, support của a b =support

của b trong B Sự tăng mẫu (pattern growth) với a là một itemset trong DB, B là mẫu cơ sở điều kiện của a, và b là một itemset trong B, thì a b là phổ biến trong

DB nếu và chỉ nếu b là phổ biến trong B.

 Sinh mẫu đƣờng FP-Tree đơn (single FP-Tree path): một FP-Tree T single path P, tập đầy đủ các mẫu phổ biến của T có thể đƣợc sinh ra bởi liệt kê ra tất cả các tổ hợp của các đƣờng con subpathcủa P với support support nhỏ nhất của item

chứa trong subpath đó.

Bƣớc 1: Xây dựng cây FP-Tree

Đầu vào: CSDL giao dịch DB và ngƣỡng độ hỗ trợ tối thiểu (minsup) Đầu ra: Cây FP-Tree

Thực hiện:

Bƣớc 1: Duyệt DB một lần tìm tập phổ biến dựa vào độ hỗ trợ của nó. Sắp xếp giảm dần nhƣ L là danh sách những item phổ biến đƣợc sắp xếp.

Bƣớc 2: Tạo cây FP-Tree

Khởi tạo một nút gốc là T có nhãn là „null‟.

Với mỗi transaction trong DB: xếp item phổ biến theo thứ tự trong 𝐹1thành dàn [p|P] với p là phần tử đầu tiên và P là phần tử còn lại.

Thủ tục chèn vào cây insertTree([p,P],Tr):

If Tr có nút con NN.item-name = p.item-name

Then N.count++

Else tạo nốt mới N với N.count ==1 và thêm vào children-list của Tr. Nếu P

không rỗng, gọi insertTree(P,N) đệ quy

Trƣớc hết diễn giải việc xây dựng cây FP-Tree: Lần duyệt dữ liệu đầu tiên sẽ đếm số lần xuất hiện của các sản phẩm item trong giao dịch transaction. Lần thứ hai là duyệt để sắp xếp lại giao dịch theo thứ tự và loại những sản phẩm nào có độ hỗ trợ dƣới ngƣỡng minsup. Danh sách này đƣợc biết đến là bảng nhãn (header table). Tất cả

những độ hỗ trợ riêng này đƣợc xếp theo thứ tự và sử dụng con trỏ trong cây mẫu phổ biến. Sau đó bắt đầu khởi tạo cây, từng giao dịch trong bảng header table cho lần lƣợt các item đƣợc xếp lần lƣợt thêm vào cây theo cơ chế từ nút (node) gốc (root) duyệt xuống, nếu chƣa có thì tạo nốt mới, nếu có rồi thì cộng bộ đếm tại nút đó lên 1. Một liên kết đƣợc duy trì kiểu con trỏ để chỉ những sản phẩm giống nhau trên cây, theo thứ tự đầu vào ở header table. Trong bảng nhãn con trỏ trỏ đến vị trí đầu tiên của mỗi

item.

Việc sử dụng cấu trúc cây để lƣu trữ dữ liệu các sản phẩm phổ biến là một cách nén, chứa đủ thông tin cần thiết mà không phải duyệt đi duyệt lại nhiều lần nhƣ cấu trúc mảng của thuật toán Apriori.

Bƣớc 2: Khai phá mẫu phổ biến trong cây FP-Tree bằng FP-growth (pattern fragment growth)

Đầu vào: FP-Tree, minsup

Đầu ra: Những tập mẫu phổ biến đầy đủ Phƣơng pháp: FP-growth (FP-Tree, null) FP-growth (tree, a) {

If (Tree chứa đƣờng path P đơn) thì

for each kết hợp của các nốt trong P

sinh mẫu ba với supportminsup của các nốt trong b

Else for each ai trong header của Tree

Sinh mẫu b=aia với support - ai.support

Tạo cơ sở mẫu điều kiện (conditional pattern base) của b và sau đó là

Treeb điều kiện của b

If (Treeb khác trỗng) thì gọi FP-growth (Treeb, b) }

Diễn giải nhƣ sau: Thuật toán tìm tập đầy đủ những tập mục phổ biến trong DB với ngƣỡng độ hỗ trợ minsup. Nếu FP-Tree chứa một đƣờng đơn, những mẫu đƣợc sinh từ nó là tổ hợp những nốt trong đƣờng path với độ hỗ trợ là bằng của nốt có độ hỗ trợ nhỏ nhất trong suppath (đường con). Cách khác trong thuật toán sẽ là tạo mẫu cơ sở điều kiện và khai phá FP-Tree điều kiện của nó cho mỗi tập mục phổ biến 𝑎𝑖.

Chứng minh cho tính đúng và đầy đủ của việc chuyển đổi đƣờng tiền tố là việc sinh mẫu ở đƣờng đơn, cơ sở mẫu điều kiện lƣu đủ thông tin cho việc khai phá mẫu phổ biến. Thuộc tính tăng mảnh (fragment growth) có đề cập ở trên chỉ rõ rằng độ hỗ trợ của những phân mảnh đƣợc tổ hợp là độ hỗ trợ của những tập mục phổ biến đƣợc sinh trong mẫu cơ sở điều kiện.

Sau quá trình tìm tập phổ biến là quá trình sinh luật XY. Với mỗi k-itemset phổ biến có thể tìm đƣợc 2𝑘 − 2 luật (không tính luật X∅∅ Y), và nếu chỉ quan tâm

đến luật có X=1-itemset thì sẽ có k luật tìm đƣợc. Các luật tìm đƣợc còn phải đƣợc lọc một lần nữa là luật mạnh tức là có độ tin cậy vƣợt ngƣỡng cho trƣớc.

For each k-itemset phổ biến: 𝑓𝑘 (k>2){

𝐻1={i| i ∈ 𝑓𝑘} sinhLuat(𝑓𝑘,𝐻1) }

sinhLuat(𝑓𝑘,𝐻𝑚){

k =|𝑓𝑘| //kích cỡ của itemset

m = |𝐻𝑚| //kích cỡ của Y trong luật

if (k>m+1){

𝐻𝑚 +1= sinh(𝐻𝑚)// sinh 𝐻𝑚 +1từ 𝐻𝑚

For each ℎ𝑚 ∈ 𝐻𝑚{

Confidence= support (𝑓𝑘)/support (𝑓𝑘 − ℎ𝑚 +1)

If confidence>= minconf then tạo luật (𝑓𝑘 − ℎ𝑚 +1)ℎ𝑚 +1

Else xóa ℎ𝑚 +1 từ 𝐻𝑚 +1 }

Gọi sinhLuat(𝑓𝑘, 𝐻𝑚 +1) }

}

Sau đây xem xét đến một vài vấn đề mở rộng khi nghiên cứu thuật toán FPGrowth:

Cải tiến một số nhƣợc điểm của thuật toán FPGrowth [30] đã đề xuất thuật toán AFOPT [30] có ý nghĩa thích nghi đối với từng bộ dữ liệu dựa trên mật độ và độ lớn. Thuật toán cũng khai phá hiệu quả các tập phổ biến đóng và tập phổ biến tối đa.

Có một vài hƣớng đi nhằm cải thiện thuật toán nhƣ xây dựng cấu trúc cây, hay cách duyệt cây nhằm giảm thời gian tính toán và bộ nhớ cần sử dụng.

Khi dữ liệu lớn hay khi độ hỗ trợ thấp không thể xây dựng cây FP-Tree, giải pháp là chia nhỏ bộ dữ liệu ra và sau đó tạo cây và khai phá cho từng bộ dữ liệu con đó (projected database – CSDL đƣợc phân hoạch) dựa vào danh sách L- danh sách item phổ biến, đây là danh sách các item sắp xếp theo thứ tự giảm dần về độ hỗ trợ, những

item có cùng độ hỗ trợ sẽ đƣợc xếp ngẫu nhiên.

Cách thức phân hoạch hay chia nhỏ có thể làm theo cách sau: chia tập transaction tổng DB thành các tập giao dịch của những item sản phẩm phổ biến, ví dụ chia tập giao dịch theo sản phẩm phổ biến i ký hiệu là i-projected database, đây là tập hợp các giao dịch chứa item i, khi thêm vào sẽ loại bỏ những item không phổ biến và cả item i

khỏi những giao dịch này vì không cần thiết trong quá trình khai phá, chỉ giữ lại trong giao dịch những item đứng trƣớc item i trong danh sách L, có nghĩa là giữ lại những

item có độ hỗ trợ lớn hơn. Việc phân hoạch này sẽ tạo đƣợc những cây FP-Tree điều kiện nhỏ hơn so với cây FP-Tree tổng. Nếu cây FP-Tree điều kiện đã đƣợc phân hoạch nhỏ hơn vẫn quá lớn với bộ nhớ xử lý, có thể phân tiếp thành các tập nhỏ hơn đến khi cây FP-Tree điều kiện vừa với bộ nhớ xử lý.

Định nghĩa lại cơ sở dữ liệu đƣợc phân hoạch: với i là một item phổ biến trong CSDL giao dịch DB, tập dữ liệu đƣợc phân hoạch theo i: i-projected database là tập dữ liệu chứa tất cả những transaction chứa i và đã loại bỏ những item không phổ biến, tất cả các item phổ biến đứng sau i trong danh sách L và chính item i.

Với item j là một item phổ biến trong i-projected database (hoặc bất kỳ tập giao dịch đã đƣợc phân hoạch nào). Khi đó tập giao dịch đƣợc phân nhỏ hơn j-i-projected database sẽ là tập transaction lấy ra từ tập i-projected database sẽ bao gồm những

transaction chứa item j và đã loại bỏ trong đó những item không phổ biến, đứng sau j

trong L và cả j.

Có hai phƣơng pháp cho phân hoạch CSDL: phân theo song song (parallel projection) và phân vùng (partition projection).

Phân hoạch song song đƣợc thực hiện nhƣ sau: duyệt CSDL một lần, lần lƣợt từng

transaction, ví dụ với transaction t, mỗi item phổ biến i trong t, phân t vào i-projected database, tiếp tục phân vào những nhóm item phổ biến khác. Nhƣ vậy với một lần duyệt sẽ đƣợc phân vào tất cả những tập con, mà không phải duyệt lại. Cách thức này dễ thực hiện nhƣng gặp một vấn đề là nếu những transaction dài chứa nhiều item phổ biến sẽ đƣợc phân vào rất nhiều tập con, khiến kích cỡ của tổng các tập con đƣợc phân tăng gấp nhiều lần với database gốc. (Đƣợc chứng minh là tăng hơn (l-1)/2 lần, với l là số item phổ biến trong transaction [41]). Một cách khác là phân vùng: khi duyệt CSDL gốc hoặc một tập đã đƣợc phân hoạch nào đó, mỗi một transaction t đƣợc phần vào một i-projected database chỉ khi i là một item phổ biến trong t và không các item nào khác sau i trong L xuất hiện trong transaction. Khi đó mỗi transaction chỉ đƣợc phân vào một tập duy nhất trong lần duyệt đó. dẫn đến tổng kích thƣớc của toàn bộ các tập

transation con nhỏ hơn so với CSDL gốc, sẽ sử dụng ít bộ nhớ hơn. Tuy nhiên thứ tự chạy thực thi cho những database con đƣợc phân hoạch sẽ là vấn đề quan trọng. vấn đề này sẽ không đƣợc xét kỹ trong luận văn, nhƣng chi tiết có thể tìm thấy ở [41].

Một phần của tài liệu (LUẬN văn THẠC sĩ) tư vấn trong thương mại điện tử dựa trên phân tích mẫu phổ biến từ dữ liệu nhật ký truy cập của khách hàng 04 (Trang 26 - 30)

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

(65 trang)