ĐẠI HỌC CÔNG NGHỆ THÔNG TIN CHUYÊN ĐỀ CÔNG NGHỆ TRI THỨC VÀ ỨNG DỤNG BÀI THU HOẠCH MỘT SỐ THUẬT TOÁN KHAI THÁC TẬP PHỔ BIẾN VÀ LUẬT KẾT HỢP GIẢNG VIÊN HƯỚNG DẪN GS... Bài toán khai thá
Trang 1ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
CHUYÊN ĐỀ
CÔNG NGHỆ TRI THỨC VÀ ỨNG DỤNG
BÀI THU HOẠCH
MỘT SỐ THUẬT TOÁN KHAI THÁC TẬP PHỔ BIẾN VÀ LUẬT KẾT HỢP
GIẢNG VIÊN HƯỚNG DẪN
GS TSKH HOÀNG KIẾM
HỌC VIÊN THỰC HIỆN
LÊ CUNG TƯỞNG (CH1101152)
Hồ Chí Minh, 5/2012
Trang 2Mục lục
Mục lục 1
1 Giới thiệu tổng quan 2
1.1 Khai thác dữ liệu 2
1.2 Một số khái niệm 2
1.2.1 Cơ sở dữ liệu giao dịch 2
1.2.2 Tập phổ biến 3
1.2.3 Luật kết hợp 3
1.2.4 Bài toán khai thác tập phổ biến và luật kết hợp 4
2 Các thuật toán tìm tập phổ biến 5
2.1 Thuật toán Apriori 5
2.1.1 Ý tưởng thuật toán 5
2.1.2 Thuật toán 5
2.1.3 Ví dụ minh họa 7
2.1.4 Hạn chế của thuật toán Apriori 8
2.2 Thuật toán FP-tree 8
2.2.1 Giới thiệu 8
2.2.2 Mô tả 9
2.2.3 Nhận xét 9
2.2.4 Thuật toán 10
2.2.5 Ví dụ minh họa 11
2.3 Thuật toán FP-growth 12
2.3.1 Giới thiệu 12
2.3.2 Thuật toán 13
2.3.3 Ví dụ minh họa 14
2.4 Thuật toán FP-growth* 14
2.4.1 Giới thiệu 14
2.4.2 Thuật toán 16
2.4.3 Ví dụ minh họa 17
2.4.4 Nhận xét 17
3 Các thuật toán khai thác luật kết hợp truyền thống 18
3.1 Sinh luật kết hợp dựa vào quan hệ cha con 18
3.1.1 Thuật toán sinh luật từ tập phổ biến 18
3.1.2 Minh họa 19
3.2 Sinh luật kết hợp dựa vào bảng băm 20
3.2.1 Thuật toán 21
3.2.2 Minh họa 21
4 Thực nghiệm 23
Kết luận 24
Tài liệu tham khảo 25
Trang 31 Giới thiệu tổng quan
1.1 Khai thác dữ liệu
Chúng ta đang sống trong thời đại bùng nổ thông tin Thông tin được lưu trữ với khối lượng khổng lồ Điều này đòi hỏi phải có những cơ sở lý thuyết trợ giúp cho con người trong việc rút trích ra các tri thức từ khối lượng dữ liệu này Lĩnh vực khai phá tri thức và khai thác dữ liệu được hình thành và phát triển nhằm đáp ứng nhu cầu này
Hiện nay, lĩnh vực khai thác dữ liệu có 3 bài toán chính được đề cập nhiều nhất, đó là: Khai thác luật kết hợp, phân lớp và gom nhóm dữ liệu Các bài toán này nhằm đáp ứng cho việc khai thác dữ liệu văn bản, khai thác dữ liệu không gian, thời gian, khai thác dữ liệu Web,
Khai thác luật phân lớp là tìm ra các qui luật để từ đó dự đoán nhãn của các mẫu chưa biết trước lớp Một số cách tiếp cận hiện nay như cây quyết định, ILA, phân lớp dựa vào luật kết hợp,
Gom nhóm là gom các đối tượng “tương tự” nhau về cùng một nhóm Một số phương pháp điển hình như phân hoạch, phân cấp, gom nhóm dựa trên mật độ,
Khai thác luật kết hợp là tìm ra các mối quan hệ giữa các item với nhau Vế phải của luật kết hợp có thể chứa một hay nhiều item Vì vậy, độ phức tạp của bài toán khai thác luật kết hợp lớn hơn nhiều so với bài toán khai thác luật phân lớp Đã
có khá nhiều thuật toán được phát triển nhằm làm tăng hiệu quả khai thác luật kết hợp như: Các thuật toán phát triển từ Apriori, các thuật toán phát triển từ FP-tree, các thuật toán phát triển từ IT-tree,
Có thể nói, cùng với sự phát triển mạnh mẽ của công nghệ thông tin và truyền thông thì ngành khai thác dữ liệu cũng đóng một vai trò không nhỏ trong việc khai thác và phân tích dữ liệu nhằm làm tăng tính hiệu quả cho người sử dụng chúng
1.2 Một số khái niệm
1.2.1 Cơ sở dữ liệu giao dịch
Cơ sở dữ liệu (CSDL) giao dịch 𝐷 gồm một bộ đôi {𝐼, 𝑇} trong đó 𝐼 ={𝑖1, 𝑖2, … , 𝑖𝑛} là tập tất cả các item và 𝑇 = {𝑡1, 𝑡2, … , 𝑡𝑛} là một tập các giao dịch Bài thu hoạch dùng một CSDL trong bảng 1.1 làm ví dụ xuyên suốt các phần
Trang 4Bảng 1.1 Cơ sở dữ liệu mẫu
Độ phổ biến: Cho CSDL giao dịch 𝐷 và một itemset 𝑋 ⊆ 𝐼 Độ phổ biến của
𝑋 trong 𝐷, kí hiệu 𝜎(𝑋), là số giao dịch mà X xuất hiện trong D
1345, 𝜎(𝐴𝐷) = 2 vì AD chứa trong các giao dịch 45
Tập phổ biến: 𝑋 ⊆ 𝐼 được gọi là phổ biến nếu 𝜎(𝑋) ≥ 𝑚𝑖𝑛𝑆𝑢𝑝𝐶𝑜𝑢𝑛𝑡 (với minSupCount là giá trị do người dùng chỉ định)
𝜎(𝐴) = 4 ≥ 𝑚𝑖𝑛𝑆𝑢𝑝𝐶𝑜𝑢𝑛𝑡 nhưng AD không phải là tập phổ biến vì 𝜎(𝐴𝐷) =
Một số tính chất của luật kết hợp
Trang 5- Nếu 𝑋 → 𝑌 là luật kết hợp truyền thống thì 𝑋 ∪ 𝐴 → 𝑌 \ 𝐴 cũng là luật kết hợp truyền thống ∀𝐴 ⊂ 𝑌
- Nếu 𝑋 → 𝑌 là luật kết hợp truyền thống thì 𝑋 → 𝑌 \ 𝐴 cũng là luật kết hợp truyền thống ∀𝐴 ⊂ 𝑌
- Nếu 𝑋 → 𝑌 không là luật kết hợp thì 𝑋 \ 𝐴 → 𝑌 ∪ 𝐴 cũng không là luật kết hợp ∀𝐴 ⊂ 𝑌
1.2.4 Bài toán khai thác tập phổ biến và luật kết hợp
Nhiệm vụ chính của khai thác luật kết hợp bao gồm 2 bước như sau: (1) tìm tất
cả các tập phổ biến (2) phát sinh các luật kết hợp tin cậy từ tập phổ biến
Bước 1 (tìm tập phổ biến): bước này đòi hỏi nhiều thao tác tính toán và xuất
nhập dữ liệu Xét bảng 1.1, trình bày một CSDL với 6 giao tác {1, 2, 3, 4, 5, 6} mang 5 danh mục {𝐴, 𝐶, 𝐷, 𝑇, 𝑊} khác nhau Bài toán đòi hỏi trình bày tất cả các tập phổ biến với độ hỗ trợ tối thiểu (𝑚𝑖𝑛𝑠𝑢𝑝) là 33% (2) Dễ dàng tìm được tập hợp các tập phổ biến như trong bảng sau với CDT, ACTW và ACDW là các tập phổ biến tối đại (chúng không là một tập con của bất kỳ tập phổ biến nào)
Độ tin cậy Các tập danh mục phổ biến
CDW, CTW, ACTW
ACDW
Bước 2 (phát sinh luật kết hợp): bước này là một bước đơn giản hơn Luật
kết hợp được được tạo ra từ tất cả các tập phổ biến X tìm thấy ở bước 1 thỏa mãn điều kiện 𝑝 ≥ 𝑚𝑖𝑛𝑐𝑜𝑛𝑓
Ví dụ, từ một tập phổ biến ACW có thể tạo 6 luật là: 𝐴 → 𝐶𝑊: 1.0; 𝐶 → 𝐴𝑊: 0.67; 𝑊 → 𝐴𝐶: 0.8; 𝐴𝐶 → 𝑊: 1.0; 𝐴𝑊 → 𝐶: 1.0 và 𝐶𝑊 → 𝐴: 0.8
Trang 62 Các thuật toán tìm tập phổ biến
2.1 Thuật toán Apriori
2.1.1 Ý tưởng thuật toán
Thuật toán khai thác các tập phổ biến bằng cách thực hiện nhiều lần duyệt CSDL Duyệt lần thứ nhất để tính độ phổ biến của các 1-itemset và xác định các item phổ biến từ chúng, nghĩa là độ phổ biến thỏa ngưỡng phổ biến tối thiểu Trong các lần duyệt sau, thuật toán sẽ kết hợp các itemset phổ biến đã tìm được trong lần duyệt trước để tìm các tập ứng viên Sau đó tính độ phổ biến thực sự của các tập ứng viên này nhằm xác định itemset nào trong các tập ứng viên là tập phổ biến thực sự Các itemset này trở thành các hạt giống cho lần duyệt tiếp theo Quá trình này thực hiện cho đến khi không còn một tập phổ biến mới nào nữa được sinh ra
Thuật toán Apriori sinh ra các tập ứng viên trong một lần duyệt bằng cách chỉ
sử dụng các tập phổ biến đã được khai thác trong lần duyệt trước mà không cần quan tâm đến các giao dịch trong cơ sở dữ liệu Các ứng viên k-itemset được sinh ra bằng cách kết hợp các tập phổ biến thuộc (k-1)-itemset Thuật toán Apriori tỉa ứng viên bằng cách loại bỏ các ứng viên có chứa tập con không phải là tập phổ biến
Qui ước: Giả sử các item trong mỗi giao dịch được lưu giữ theo thứ tự từ điển
𝐿𝑘 là tập các k-itemset phổ biến 𝐶𝑘 là tập các ứng viên có k-itemset Mỗi phần tử của
𝐿𝑘 và 𝐶𝑘 có 2 thành phần: itemset và độ phổ biến tương ứng
2.1.2 Thuật toán
Gồm 2 bước: bước kết hợp và bước tỉa các ứng viên
Bước kết hợp: Bước này nhằm tìm tập 𝐿𝑘 bằng việc kết hợp các tập phổ biến trong 𝐿𝑘−1 với nhau Kết quả là tập các ứng viên 𝐶𝑘 Hai tập phổ biến 𝑙1 và 𝑙2 thuộc
𝐿𝑘−1 sẽ được kết hợp với nhau nếu chúng thỏa đều kiện sau: (𝑙1[1] = 𝑙2[1]) ∧(𝑙1[2] = 𝑙2[2]) ∧ .∧ (𝑙1[𝑘 − 2] = 𝑙2[𝑘 − 2]) ∧ (𝑙1[𝑘 − 1] = 𝑙2[𝑘 − 1])
Kết quả sẽ là itemset: 𝑙1[1] 𝑙1[1] 𝑙1[𝑘 − 2] 𝑙1[𝑘 − 1] 𝑙2[𝑘 − 1]
Trang 7Bước tỉa: Ta có 𝐶𝑘 là tập chứa 𝐿𝑘, nghĩa là thuật toán cần lọc các tập từ 𝐶𝑘 để tạo ra 𝐿𝑘 Bước này sẽ loại bỏ các itemset 𝑐 ∈ 𝐶𝑘 nếu 𝑐 tồn tại tập con (k-1)-itemset không có trong 𝐿𝑘−1
Đoạn mã giả sau đây trình bày thuật toán Apriori: 𝐿1 chứa các 1-itemset thỏa 𝑚𝑖𝑛𝑆𝑢𝑝𝐶𝑜𝑢𝑛𝑡 (dòng 1), từ dòng 2 đến dòng 6 là quá trình lặp đi lặp lại của việc sinh ứng viên và đếm độ phổ biến của các ứng viên bằng cách xét chúng với các giao dịch trong CSDL Việc sinh ứng viên (hàm Apriori-gen) sử dụng tính chất apriori để tỉa các ứng viên (dòng 14 – 15), việc sinh các ứng viên từ 𝑙1 và 𝑙2 phải thỏa mãn 𝑙1 và 𝑙2
có cùng tiền tố là (k-2)-itemset (dòng 12 – 13)
Đầu vào: Cơ sở dữ liệu giao dịch D và ngưỡng độ phổ biến minSupCount
Kết quả: FI chứa danh sách các tập phổ biến trong D thỏa minSupCount
13 c = l1 ∪ l2 //bước kết hợp l1 và l2 sinh ra ứng viên c
14 if Has_infrequent_subset(c, Lk-1 ) = False then
Trang 9Ta có danh sách các tập phổ biến được trình bày trong bảng sau:
2.1.4 Hạn chế của thuật toán Apriori
Chi phí lớn cho việc phát sinh các tập ứng viên Ví dụ: Nếu có 104 item phổ biến thì thuật toán Apriori sẽ cần sinh ra hơn 107 các ứng viên 2-itemset
Lặp lại nhiều lần duyệt CSDL: Số lần duyệt CSDL của thuật toán Apriori bằng
độ dài của mẫu phổ biến dài nhất tìm được Thuật toán Apriori chỉ thích hợp cho các CSDL thưa (mật độ trùng lặp của các item trên các giao dịch ít), đối với các CSDL đặc (mật độ trùng lặp của các item trên các giao dịch nhiều) thì thuật toán thực hiện kém hiệu quả
2.2 Thuật toán FP-tree
2.2.1 Giới thiệu
Để khắc phục điểm yếu của các dựa trên thuật toán Apriori là phải duyệt cơ sở liệu nhiều lần và phải kiểm tra một lượng lớn các ứng viên dẫn đến tốc độ thực thi của thuật toán không hiệu quả, tác giả J Han và các đồng sự đã đề xuất ra cấu trúc FP-tree Vì thông qua cấu trúc FP-tree, một CSDL được nén lại và chỉ thông tin liên hệ với khai thác được giữ lại làm cho việc khai thác dữ liệu có hiệu quả hơn Bên cạnh
Trang 10cấu trúc FP-tree, tác giả cũng giới thiệu kỹ thuật để duyệt FP-tree và cách xác định các tập phổ biến
Cấu trúc FP-tree có nhiều thuận lợi trong khai thác tập phổ biến Trước hết, FP-tree thường có một tỉ lệ nén cao trong khi biểu diễn tập CSDL bởi vì:
- Các danh mục không phổ biến được xác định trong lần duyệt CSDL đầu tiên
sẽ không được sử dụng trong cấu trúc cây
- Một tập hợp của các giao tác dùng chung tập con của các danh mục giống nhau có thể chia sẻ chung phần đầu đường dẫn từ gốc trong một FP-tree và tỉ lệ nén cao dẫn đến tính hiệu quả khi thao tác trực tiếp trên FP-tree
- Cấu trúc dữ liệu này cho phép thực hiện chiến lược tìm kiếm theo chiều sâu
và sử dụng mô hình chia để trị vì đây là những kỹ thuật khá hiệu quả
Quan trọng hơn cả, FP-tree chứa tất cả các thông tin cần thiết để khai thác tập phổ biến và tính hoàn thiện của nó có thể đảm bảo tính đúng đắn của thuật toán dựa trên FP-tree
2.2.2 Mô tả
Cấu trúc FP-tree là cấu trúc cây với một số đặc điểm sau:
- Cây có một nút cha đánh nhãn là “null” và những cây con nối với nút cha này là những thành phần chung của nhiều giao tác được nén lại với nhau trên các nhánh cây Ngoài ra còn có một bảng tiêu đề các danh mục đơn phổ biến
- Mỗi nút trong nhánh của cây có ba trường dữ liệu: mã danh mục, số đếm, con trỏ liên kết Mã danh mục tương ứng với danh mục mà nút này đại diện, số đếm là
số giao tác có chứa chung phần danh mục này và con trỏ liên kết dùng để liên kết 2 nút đại diện chung một mã danh mục ở hai nhánh cây khác nhau Giá trị của trường con trỏ liên kết có thể mang giá trị rỗng khi là nút cuối cùng trong chuỗi liên kết
- Mỗi phần tử trong bảng tiêu đề các danh mục đơn phổ biến gồm 2 trường:
mã danh mục và con trỏ liên kết đến đầu nút của chuỗi liên kết các nút cùng đại diện chung cho một danh mục
2.2.3 Nhận xét
Những lợi ích có được khi sử dụng cấu trúc FP-tree:
Trang 11- Với cấu trúc dữ liệu FP-tree, chỉ cần quan tâm đến những danh mục thực sự
có tham gia tạo nên các tập danh mục phổ biến Vì vậy sẽ giúp giảm bớt những thao tác thừa đối với những danh mục chắc chắn không tham gia vào xây dựng các tập danh mục phổ biến Việc xác định những danh mục phổ biến này chỉ cần thông qua một lần duyệt toàn bộ CSDL
- Toàn bộ những thông tin của CSDL cần cho quá trình khai thác đều được lưu trữ trong cấu trúc cây với tỉ lệ nén cao Điều này giúp cho quá trình khai thác không phải duyệt đi duyệt lại trên toàn bộ CSDL lớn
- Những giao tác chứa chung các danh mục có thể được gộp chung tối đa với nhau bằng cách sắp xếp chúng theo thứ tự phổ biến và tích lũy vào trong một số đếm
- Thuận lợi cho quá trình duyệt theo chiều sâu và theo mô hình chia để trị trên cấu trúc FP-tree
2.2.4 Thuật toán
Duyệt toàn bộ CSDL và xác định thứ tự của các danh mục giảm dần theo độ phổ biến và được đưa vào trong 𝑓_𝑙𝑖𝑠𝑡 Dựa vào ngưỡng phổ biến người dùng đưa vào sẽ xác định những danh mục nào được tạo trong FP-tree và sắp xếp các danh mục trong từng giao tác theo thứ tự trong 𝑓_𝑙𝑖𝑠𝑡 Sau đó tạo FP-tree bằng cách lần lượt xét từng giao tác trong CSDL đã được sắp xếp lại và loại bỏ những danh mục không đạt ngưỡng phổ biến
Hàm createFPtree()
Đầu vào: cơ sở dữ liệu các giao dịch 𝐷 và ngưỡng phổ biến 𝑚𝑖𝑛𝑠𝑢𝑝
Đầu ra: cấu trúc dữ liệu FP-tree của CSDL các giao dịch 𝐷
Bước 1: Duyệt toàn bộ 𝐷 và tính độ phổ biến của từng danh mục Sau đó xác định những danh mục có độ phổ biến lớn hơn ngưỡng phổ biến 𝑚𝑖𝑛𝑠𝑢𝑝 và sắp xếp giảm dần theo độ phổ biến vào trong 𝑓_𝑙𝑖𝑠𝑡
Bước 2: Tạo FP-tree chỉ có một nút gốc được gán nhãn là “null”, ký hiệu root
Bước 3: Với mỗi giao tác trong 𝐷 được thể hiện như sau: chọn và sắp xếp những danh mục phổ biến theo thứ tự trong 𝑓_𝑙𝑖𝑠𝑡 Giao dịch đang xét được ký hiệu như sau [𝑝|𝑟𝑙𝑖𝑠𝑡] gồm 2 phần 𝑝 là phần tử danh mục đầu tiên và 𝑟𝑙𝑖𝑠𝑡 là phần danh mục còn lại bên phải của giao tác (không kể những danh mục không thỏa ngưỡng phổ biến) Gọi hàm 𝑖𝑛𝑠𝑒𝑟𝑡_𝑡𝑟𝑒𝑒([𝑝|𝑟𝑙𝑖𝑠𝑡], 𝑟𝑜𝑜𝑡)
Trang 12Hàm insert_tree([ 𝒑|𝒓𝒍𝒊𝒔𝒕], root)
Bước 1: Kiểm tra nếu tồn tại nút con được trỏ trực tiếp từ Node và được gán nhãn là
𝑝 𝑖𝑡𝑒𝑚 − 𝑛𝑎𝑚𝑒 (hay 𝑐ℎ𝑖𝑙𝑑 𝑖𝑡𝑒𝑚 − 𝑛𝑎𝑚𝑒 = 𝑝 𝑖𝑡𝑒𝑚 − 𝑛𝑎𝑚𝑒) thì tăng chỉ số đếm của nút con child lên 1 Nếu không tồn tại thì tạo một nút con mới, khởi tạo chỉ số đếm của nút con này là 1; sau đó tạo các liên kết của nút con này với Node và ngược lại, liên kết với nút có cùng item-name
Bước 2: Kiểm tra nếu 𝑟𝑙𝑖𝑠𝑡 chưa rỗng thì gọi hàm 𝑖𝑛𝑠𝑒𝑟𝑡_𝑡𝑟𝑒𝑒(𝑟𝑙𝑖𝑠𝑡, 𝑐ℎ𝑖𝑙𝑑)
2.2.5 Ví dụ minh họa
Minh họa cho quá trình xây dựng FP-tree bằng cách xây dựng cây tương ứng với CSDL trong bảng 1.1 để tìm tập phổ biến thỏa ngưỡng 𝑚𝑖𝑛𝑠𝑢𝑝 = 2
Với lần đầu tiên duyệt cơ sở dữ liêu: Độ phổ biến của các danh mục đơn
được xác định và sắp xếp theo thứ tự giảm dần
Với lần thứ hai duyệt cơ sở dữ liêu: Thứ tự của các danh mục trong từng
giao tác được sắp xếp theo thứ tự đối với CSDL trong bảng 1.1
STT Nội dung thao tác Nội dung thao tác sau khi
Trang 13- Đảm bảo kết quả tập phổ biến là đầy đủ
- Không tạo lại những tập phổ biến trùng nhau
- Không tạo những tập phổ biến không thỏa mãn ngưỡng phổ biến minsup Nhận thấy các tính chất sau có trên cấu trúc FP-tree sẽ giúp cho quá trình phát sinh tập phổ biến một cách hiệu quả hơn:
- Đối với bất kỳ tập phổ biến nào có chứa danh mục đơn 𝑖 đều có thể xác định được thông qua con trỏ liên kết của các nút cùng đại diện chung cho danh mục 𝑖 này Chuỗi nút liên kết này bắt đầu bằng con trỏ của một phần tử trong bảng tiêu đề tập danh mục đơn phổ biến tương ứng với danh mục đơn 𝑖
- Nếu chọn một nút bất kỳ trên cây làm nút để chiếu thì các nút cha của nút đang chiếu đều có giá trị tích lũy bằng với giá trị tích lũy của nút đang chiếu
- Giả sử một tập danh mục được chọn 𝑋 có độ phổ biến thỏa ngưỡng 𝑚𝑖𝑛𝑠𝑢𝑝, vậy để bổ sung thêm danh mục mới 𝑖 vào tập phổ biến này thì danh mục mới thêm
W:5
C:6
D:1 D:1
D:2 T:2
T:1 Root