DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT CSDL Cơ sở dữ liệu D Cơ sở dữ liệu giao dịch database item Một thuộc tính trong cơ sở dữ liệu giao dịch itemset Tập thuộc tính trong cơ sở dữ li
Trang 1NGUYỄN HOÀNG NHẬT
KHAI PHÁ TẬP PHỔ BIẾN TRÊN
CƠ SỞ DỮ LIỆU TĂNG TRƯỞNG TRONG LĨNH VỰC MUA BÁN HÀNG
LUẬN VĂN THẠC SĨ KỸ THUẬT
ĐÀ NẴNG, NĂM 2017
Trang 2NGUYỄN HOÀNG NHẬT
KHAI PHÁ TẬP PHỔ BIẾN TRÊN
CƠ SỞ DỮ LIỆU TĂNG TRƯỞNG TRONG LĨNH VỰC MUA BÁN HÀNG
Chuyên ngành: Hệ thống thông tin
Mã số: 61.49.01.04
LUẬN VĂN THẠC SĨ KỸ THUẬT
Người hướng dẫn khoa học: TS NGUYỄN TRẦN QUỐC VINH
ĐÀ NẴNG, NĂM 2017
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan:
- Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của TS Nguyễn Trần Quốc Vinh
- Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng và trung thực
về tên tác giả, tên công trình, thời gian và địa điểm công bố
- Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm
Tác giả luận văn
Nguyễn Hoàng Nhật
Trang 4MỤC LỤC
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT v
DANH MỤC CÁC BẢNG ix
DANH MỤC CÁC HÌNH VẼ xi
MỞ ĐẦU 1
1 Lý do chọn đề tài 1
2 Mục tiêu nghiên cứu 2
3 Đối tượng và phạm vi nghiên cứu 2
4 Phương pháp nghiên cứu 3
5 Dự kiến kết quả 3
6 Ý nghĩa khoa học và thực tiễn 4
7 Bố cục luận văn 4
CHƯƠNG 1 TỔNG QUAN VỀ KHAI PHÁ TẬP PHỔ BIẾN 5
1.1 TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU 5
1.1.1 Mở đầu 5
1.1.2 Kiến trúc của một hệ thống khai phá dữ liệu 6
1.1.3 Các giai đoạn của quá trình khai phá dữ liệu 6
1.1.4 Một số kỹ thuật khai phá dữ liệu 6
1.1.5 Các cơ sở dữ liệu phục vụ cho khai phá dữ liệu 8
1.1.6 Các phương pháp chính trong khai phá dữ liệu 9
1.2 MỘT SỐ PHƯƠNG PHÁP KHAI PHÁ TẬP PHỔ BIẾN TRÊN CSDL TĨNH 10
1.1.1 Mở đầu 10
1.1.2 Một số kiến thức cơ bản 10
1.2.3 Phương pháp Apriori 14
1.2.4 Phương pháp FP-Tree 16
Trang 51.2.5 Một số thuật toán khai phá tập phổ biến khác 18
1.2.6 Một số cấu trúc dữ liệu giúp cải thiện thuật toán Apriori 20
1.3 KẾT CHƯƠNG 23
CHƯƠNG 2 MỘT SỐ PHƯƠNG PHÁP KHAI PHÁ TẬP PHỔ BIẾN TRÊN CƠ SỞ DỮ LIỆU TĂNG TRƯỞNG 25
2.1 THUẬT TOÁN FUP 25
2.1.1 Một số ký hiệu 25
2.1.2 Chi tiết thuật toán FUP 26
2.1.3 Ví dụ 29
2.2 KHÁI NIỆM PRE-LARGE-ITEMSET 32
2.3 THUẬT TOÁN PRE-LARGE-ITEMSET 34
2.3.1 Các ký hiệu và lý thuyết liên quan 34
2.3.2 Thuật toán 36
2.3.3 Ví dụ minh họa 39
2.4 THUẬT TOÁN PRE-FUFP 45
2.4.1 Các ký hiệu 46
2.4.2 Thuật toán 46
2.5 THUẬT TOAN PRE-FUT 55
2.5.1 Các ký hiệu 55
2.5.2 Thuật toán Pre-FUT 56
2.5.3 Ví dụ thuật toán Pre-FUT 58
2.6 KẾT CHƯƠNG 65
CHƯƠNG 3 THỰC NGHIỆM VỚI DỮ LIỆU THỰC TẾ 66
3.1 MÔ TẢ DỮ LIỆU 66
3.2 MÔ TẢ CHƯƠNG TRÌNH 67
3.3 ĐÁNH GIÁ 69
3.4 KẾT CHƯƠNG 71
Trang 6KẾT LUẬN 72 TÀI LIỆU THAM KHẢO 74
QUYẾT ĐỊNH GIAO ĐỀ TÀI (BẢN SAO)
Trang 7DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
CSDL Cơ sở dữ liệu
D Cơ sở dữ liệu giao dịch (database)
item Một thuộc tính trong cơ sở dữ liệu giao dịch
itemset Tập thuộc tính trong cơ sở dữ liệu giao dịch
conf (X ⇒ Y) Độ tin cậy của luật kết hợp X ⇒ Y
minconf Độ tin cậy tối thiểu
BFS Duyệt theo chiều rộng (Breadth First Search)
DFS Duyệt theo chiều sâu (Depth First Search)
k-itemset Một tập thuộc tính gồm k thuộc tính
small itemset, Tập không phổ biến
Trang 8Ký hiệu Diễn giải
loser
candidate
itemset
Tập ứng viên
hash-tree Cây băm
hash -table Bảng băm
hash function Hàm băm
id{X} Thứ tự của item X trong giao dịch đang xét
db Cơ sở dữ liệu cần thêm vào DB
D Số lượng giao dịch trong DB
d Số lượng giao dịch trong db
L Tập hợp tập phổ biến trong DB
L k Tập large k-itemset trong DB
s Độ hỗ trợ tối thiểu
X.support D Số lượng các giao dịch trong DB chứa X
X.support d Số lượng các giao dịch trong db chứa X
X.support UD Số lượng các giao dịch trong DBdb chứa X
T Tập hợp các giao dịch mới được thêm vào
U CSDL sau khi đã được đã thêm các giao dịch mới vào
d Số lượng các giao dịch trong D
t Số lượng các giao dịch trong T
S l Ngưỡng lower support đối với tập pre-large itemset
Trang 9Ký hiệu Diễn giải
S u Ngưỡng upper support đối với tập large itemset
P Tập pre-large k-itemset trong U
C k Tập hợp tất cả các ứng viên k-itemset trong T
S D (I) Số lần xuất hiện của I trong D
S T (I) Số lần xuất hiện của I trong T
S U (I) Số lần xuất hiện của I trong U
c Số lượng các giao dịch mới được thêm vào CSDL kể từ lần quét
lại CSDL gốc gần nhất
R Tập rescan itemset, là những itemset không phổ biến trong CSDL
gốc
FUP Fast-Update algorithm
Pre-FUT Fast-Update algorithm using Trie data structure and the concept
of PRE-large itemsets
IT-tree Item-Tidset tree
FP-tree Frequent-Pattern tree
FP-growth Frequent Pattern growth
f Ngưỡng an toàn, dùng để xác định khi nào thuật toán cần quét và
xử lý lại toàn bộ CSDL gốc
Tr D Cấu trúc Trie dùng để lưu tập hợp pre-large và large itemset của
Trang 10Ký hiệu Diễn giải
Trang 11DANH MỤC CÁC BẢNG
Số hiệu
2.3 Tập large itemset được khai phá từ CSDL ban đầu 30 2.4 4 trường hợp và kết quả xử lý của thuật toán FUP ] 32
2 5 9 trường hợp xảy ra khi thêm mới giao dịch vào
2.8 Tập large itemset của CSDL ban đầu 39 2.9 Tập pre-large itemset của CSDL ban đầu 39
2 11 3 phần của tập ứng viên 1-itemset xét trong T 40
2.14 Tập large và pre-large 2-itemset trong U 42
2.19 Kết quả phân chia tập item trong T thành 3 phần 51 2.20 Các giao dịch trong D có chứa d [18] 53 2.21 Giao dịch trong T có chứa phần tử trong Insert_Items 54
Trang 131.5 Mẫu kết quả của nhiệm vụ phân cụm dữ liệu 7
1.7 Cấu trúc cây băm lưu trữ tập ứng viên 3-itemset 20
1.9 Cấu trúc Trie lưu trữ tập các ứng viên 23 2.1 4 trường hợp xảy ra khi thêm mới giao dịch vào
2.2 Tiến trình thực hiện bước 1 trong thụât toán FUP 27 2.3 Tiến trình tìm tập prelarge và large 1-itemset 31 2.4 9 trường hợp xảy ra khi thêm các giao dịch mới
2.5 Tiến trình tìm tập prelarge và large 1-itemset 43 2.6 Tiến trình tìm tập prelarge và large 2-itemset 44 2.7 Tiến trình tìm tập prelarge và large 3-itemset 45 2.8 Cây FUFP-Tree và Header_Table được xây dựng 50 2.9 Cây FUFP-tree trước khi loại bỏ h 51
2.13 Cây FUFP-tree sau khi nhánh đầu tiên được xử lý 53
2.15 Cây FUFP-tree sau khi nhánh đầu tiên được xử lý 54
2.17 TrD lưu trữ tập pre-large và large itemset của D 60 2.18 TrU được xây dựng từ tập ứng viên 1-itemset 60
Trang 143.4 File kết quả tập large được sinh ra khi thực hiện
3.5 File kết quả tập pre large được sinh ra khi thực
3.6 File report tổng hợp thời gian xử lý của tập phổ
biến khi phát sinh các giao dịch mới 68 3.7 Kết quả so sánh trên CSDL Online retail trong thí
3.8 Kết quả so sánh trên CSDL Online retail trong thí
Trang 15MỞ ĐẦU
1 Lý do chọn đề tài
Khai phá dữ liệu là một khái niệm ra đời vào những năm cuối của thập kỷ 80,
nó là quá trình tìm kiếm, khám phá dưới nhiều góc độ khác nhau nhằm phát hiện các mối liên hệ, quan hệ giữa các dữ liệu, đối tượng bên trong CSDL, kết quả của việc khai phá là xác định các mẫu hay các mô hình tồn tại bên trong nhưng chúng nằm ẩn
Trong những năm gần đây thì rất nhiều các kỹ thuật trong khai phá dữ liệu đã được phát triển Các hướng tiếp cận trong khai phá dữ liệu có thể phân loại dựa vào
cơ sở dữ liệu làm việc như: CSDL giao dịch, CSDL tạm thời, CSDL quan hệ, CSDL
đa phương tiện v v Có nhiều phương pháp trong khai phá dữ liệu đã được đề xuất như: luật kết hợp (Apriori), phân lớp, gom nhóm (K-mean, K-medoids, ), khai phá mẫu tuần tự…
Khai phá dữ liệu đã thu hút được sự quan tâm của rất nhiều nhà nghiên cứu, nhờ
có nhiều những ứng dụng trong thực tiễn trong nhiều lĩnh vực như y tế, kinh doanh, ngân hàng,
Trong đó, nhu cầu thêm những giao dịch mới vào CSDL hoặc xóa một số giao dịch trong CSDL hiện tại trong các ứng dụng của thế giới thực là rất cần thiết Do đó việc xây dựng và chọn lựa nên một thuật toán có hiệu suất xử lý tốt nhất để có thể xử trong trường hợp CSDL tăng trưởng là một yêu cầu cấp thiết và hướng nghiên cứu phát triển các thuật toán khai phá tập phổ biến trên dữ liệu tăng trưởng là một trong những hướng nghiên cứu được đầu tư và phát triển mạnh Đã có rất nhiều thuật toán
ra đời, tuy nhiên mỗi thuật toán có ưu, khuyết điểm khác nhau, việc nghiên cứu chọn
Trang 16ra 1 thuật toán phù hợp có hiệu suất xử lý cao để xử lý CSDL trong trường hợp phát sinh giao dịch là cần thiết
Đó chính là lý do tôi chọn đề tài : “Tìm hiểu một số phương pháp khai phá tập phổ biến trên cơ sở dữ liệu tăng trưởng trong lĩnh vực mua bán hàng” để làm đề
tài luận văn thạc sĩ của mình
2 Mục tiêu nghiên cứu
- Tìm hiểu các phương pháp khai phá cơ sở dữ liệu cơ bản
- Tìm hiểu kỹ thuật khai phá dữ liệu dựa trên khai phá luật kết hợp trong CSDL giao dịch:
o Nghiên cứu, phân tích, đánh giá 1 số phương pháp khai phá tập phổ biến trên
cơ sở dữ liệu tĩnh: Apriori, cây FP- Tree
o Nghiên cứu, phân tích, đánh giá 1 phương pháp khai phá tập phổ biến trên cơ
sở dữ liệu tăng trưởng: Thuật toán FUP, Pre – large– Itemset, Pre- FUFP
- So sánh thực tế hiệu năng của thuật toán Pre- FUT và thuật toán Pre – large – Itemset trong lĩnh vực mua bán hàng online
3 Đối tượng và phạm vi nghiên cứu
3.1 Đối tượng nghiên cứu
- Thuật toán Apriori
- Thuật toán FP- Tree
- Thuật toán FUP
- Thuật toán Pre – large – Itemset
- Thuật toán Pre-FUFP
- Thuật toán Pre-FUT
- Các CSDL khi phát sinh thêm các giao dịch, cụ thể ở đây là các giao dịch khi thực hiện thanh toán mua hàng
Phạm vi nghiên cứu
- Tập phổ biến khi phát sinh giao dịch mới
- Kỹ thuật khai phá tập phổ biến dựa trên khai phá luật kết hợp khi CSDL phát sinh giao dịch mới
Trang 174 Phương pháp nghiên cứu
4.1 Nghiên cứu lý thuyết
- Nghiên cứu tài liệu, ngôn ngữ và các công nghệ có liên quan
- Kỹ thuật khai phá dữ liệu dựa trên khai phá luật kết hợp trong CSDL giao dịch
- Kỹ thuật khai phá tập phổ biến trên cơ sở dữ liệu tĩnh
- Kỹ thuật khai phá tập phổ biến trên cơ sở dữ liệu tăng trưởng
4.2 Nghiên cứu thực nghiệm
- Tiến hành thu thập và tổng hợp các tài liệu có liên quan đến kỹ thuật khai phá dữ liệu sử dụng luật kết hợp, các thuật toán khai phá dữ liệu trên CSDL tĩnh và
CSDL động
- So sánh hiệu xuất xử lý các CSDL động của thuật toán Pre- FUT và Pre-
large- Itemset trên CSDL giao dịch mua hàng tại siêu thị
5 Dự kiến kết quả
5.1 Kết quả về lý thuyết
- Hiểu thêm được các phương pháp khai phá dữ liệu
o Kỹ thuật khai phá tập phổ biến dựa trên khai phá luật kết hợp trong CSDL giao dịch
o Các phương pháp khai phá tập phổ biến trên cơ sở dữ liệu tĩnh: Apriori, cây FP- Tree
o Các phương pháp khai phá tập phổ biến trên cơ sở dữ liệu tăng trưởng: Thuật toán FUP, Pre- FUFP
- Cải tiến hiệu suất thuật toán FUP nhanh hơn bằng thuật toán Pre-FUT
5.2 Kết quả về thực tiễn
Chọn ra được 1 thuật toán phù hợp để cải tiến hiệu suất của kỹ thuật khai phá tập phổ biến dựa trên luật kết hợp trong trường hợp CSDL tăng trưởng ,phát sinh thêm các giao dịch mới, giúp quản lý và các luật đã khai phá được hiệu quả hơn, từ
đó có thể tiến hành tiếp quá trình sinh ra các luật kết hợp hiệu quả hơn
Có thể áp dụng thuật toán để xử lý CSDL tăng trưởng của nhiều lĩnh vực khác nhau
Trang 186 Ý nghĩa khoa học và thực tiễn
Áp dụng lý thuyết về khai phá luật kết hợp trong CSDL giao dịch để nghiên cứu các thuật toán khai phá tập phổ biến trên CSDL tăng trưởng
Về mặt thực tiễn, việc nghiên cứu giúp chọn ra 1 thuật toán phù hợp giúp cải thiện thời gian xử lý các CSDL giao dịch tăng trưởng, giúp quản lý, cập nhật các luật trong kỹ thuật khai phá dữ liệu dựa trên khai phá luật kết hợp trên CSDL tốt hơn
7 Bố cục luận văn
Chương 1: Tổng quan về khai phá tập phổ biến trên cơ sở dữ liệu tăng trưởng Trong chương này, chúng tôi trình bày cơ sở lý thuyết làm nền tảng để nghiên cứu, bao gồm: Tổng quan về khai phá dữ liệu, các kỹ thuật khai phá dữ liệu Tìm hiểu một số phương pháp, thuật toán khai phá dữ liệu trên cơ sở dữ liệu tĩnh : Apriori, FP Tree, Apriori-Tid, Apriori Hybrid
Chương 2: Một số phương pháp khai phá tập phổ biến trên cơ sở dữ liệu tăng trưởng
Trong chương này, chúng tôi trình bày kiến thức lý thuyết, thuật toán, ví dụ minh họa về các thuật toán khai phá tập phổ biến trên cơ sở dữ liệu tăng trường như: FUP, Pre – large – Itemset, Pre- FUFP, Pre – FUT
Chương 3: Thực nghiệm
Trong chương này, chúng tôi sẽ xây dựng ứng thuật toán khai phá tập phổ biến trên CSDL tăng trưởng được đánh giá cao hiện nay là Pre-FUT và thuật toán Pre – Large – Itemset sử dụng ngôn ngữ C Tiến hành so sánh hiệu suất, thời gian xử lý giữa 2 thuật toán để tìm ra 1 thuật toán hiệu quả nhất CSDL được sử dụng là các giao dịch thanh toán mua hàng của 1 công ty mua bán sản phẩm trực tuyến từ năm 2010 đến 2011
Cuối cùng là những đánh giá, kết luận và hướng phát triển của đề tài
Trang 19CHƯƠNG 1
TỔNG QUAN VỀ KHAI PHÁ TẬP PHỔ BIẾN
1.1 TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU
1.1.1 Mở đầu
Khai phá dữ liệu là một khái niệm ra đời vào những năm cuối của thập kỷ 80,
nó là quá trình tìm kiếm, khám phá dưới nhiều góc độ khác nhau nhằm phát hiện các mối liên hệ, quan hệ giữa các dữ liệu, đối tượng bên trong CSDL, kết quả của việc khai phá là xác định các mẫu hay các mô hình tồn tại bên trong nhưng chúng nằm ẩn
ở các CSDL
Trong những năm gần đây thì rất nhiều các kỹ thuật trong khai phá dữ liệu đã được phát triển Các hướng tiếp cận trong khai phá dữ liệu có thể phân loại dựa vào
cơ sở dữ liệu làm việc như: CSDL giao dịch, CSDL tạm thời, CSDL quan hệ, CSDL
đa phương tiện v v Có nhiều phương pháp trong khai phá dữ liệu đã được đề xuất như: luật kết hợp (Apriori), phân lớp, gom nhóm (K-mean, K-medoids, ), khai phá mẫu tuần tự…
Khai phá dữ liệu được áp dụng trong nhiều lĩnh vực :
Hình 1.1 Một số lĩnh vực liên quan đến khai phá dữ liệu
Trang 201.1.2 Kiến trúc của một hệ thống khai phá dữ liệu
Kiến trúc của một hệ thống khai phá dữ liệu có các thành phần như sau:
Hình 1.2 Khám phá tri thức trong cơ sở dữ liệu điển hình
1.1.3 Các giai đoạn của quá trình khai phá dữ liệu
Các giai đoạn của quá trình khai phá dữ liệu được thể hiện trong hình 1.3
Hình 1.3 Các bước của quy trình khai phá dữ liệu
Quá trình xử lý khai phá dữ liệu bắt đầu bằng việc xác định chính xác vấn
đề cần giải quyết Sau đó sẽ xác định dữ liệu liên quan dùng để xây dựng giải pháp Tiếp theo là thu thập dữ liệu có liên quan và xử lý chúng thành dạng sao cho thuật toán khai phá dữ liệu có thể hiểu được
1.1.4 Một số kỹ thuật khai phá dữ liệu
a Phân lớp dữ liệu
Khái niệm phân lớp dữ liệu được Han và Kamber đưa ra năm 2000 Phân lớp
Trang 21dữ liệu là xây dựng một mô hình mà có thể phân các đối tượng thành những lớp để
dự đoán giá trị bị mất tại một số thuộc tính của dữ liệu hay tiên đoán giá trị của dữ liệu sẽ xuất hiện trong tương lai
Một ví dụ tiêu biểu về phân lớp dữ liệu:
Hình 1.4 Ví dụ về phân lớp dữ liệu
b Phân nhóm dữ liệu
Phân nhóm là kỹ thuật khai phá dữ liệu tương tự như phân lớp dữ liệu Tuy nhiên, sự phân nhóm dữ liệu là quá trình học không được giám sát, là quá trình nhóm những đối tượng vào trong những lớp tương đương, đến những đối tượng trong một nhóm là tương đương nhau, chúng phải khác với những đối tượng trong những nhóm khác Trong phân lớp dữ liệu, một bản ghi thuộc về lớp nào là phải xác định trước, trong khi phân nhóm không xác định trước
Hình 1.5 Mẫu kết quả của nhiệm vụ phân cụm dữ liệu
c Hồi qui (Regression)
Là việc học một hàm ánh xạ từ một tập dữ liệu thành một biến dự đoán có giá trị thực Nhiệm vụ hồi qui tương tự như phân lớp, điểm khác nhau chính là ở chỗ
Trang 22thuộc tính để dự báo là liên tục chứ không rời rạc
Hình 1.6 Mẫu kết quả của hồi quy
d Tổng hợp (summarization)
Là công việc liên quan đến các phương pháp tìm kiếm một mô tả cô đọng cho tập con dữ liệu Các kỹ thuật tổng hợp thường được áp dụng trong việc phân tích dữ liệu có tính thăm dò và báo cáo tự động
e Mô hình hóa phụ thuộc (dependency modeling)
Là việc tìm kiếm mô hình mô tả các phụ thuộc quan trọng giữa các biến Mô hình phụ thuộc tồn tại ở hai mức:
Mức cấu trúc của mô hình (thường dưới dạng đồ thị) xác định các biến phụ thuộc cục bộ vào các biến khác
Mức định lượng của mô hình xác định mức độ phụ thuộc của các biến
f Phát hiện sự thay đổi và độ lệch (change and deviation dectection):
Nhiệm vụ này tập trung vào khám phá những thay đổi có ý nghĩa trong dữ liệu dựa vào các giá trị chuẩn hay độ đo đã biết trước, phát hiện độ lệch đáng kể giữa nội dung của tập con dữ liệu và nội dung mong đợi Hai mô hình độ lệch thường dùng là lệch theo thời gian và lệch theo nhóm
1.1.5 Các cơ sở dữ liệu phục vụ cho khai phá dữ liệu
Dựa vào những kiểu dữ liệu mà kỹ thuật khai phá áp dụng, có thể chia dữ liệu thành các loại khác nhau:
- Cơ sở dữ liệu quan hệ
Trang 23- Cơ sở dữ liệu giao tác
- Cơ sở dữ liệu không gian
- Cơ sở dữ liệu có yếu tố thời gian
- Cơ sở dữ liệu đa phương tiện
1.1.6 Các phương pháp chính trong khai phá dữ liệu
a Phân lớp và dự đoán (Classification & Prediction)
Xếp một đối tượng vào một trong những lớp đã biết Ví dụ : phân lớp vùng địa
lý theo dữ liệu thời tiết
b Phân cụm và phân đoạn (Clusterring and Segmentation)
Sắp xếp các đối tượng theo từng cụm (số lượng và tên của cụm chưa được biết trước) Các đối tượng được gom cụm sao cho mức độ tương tự giữa các đối tượng trong cùng một cụm là lớn nhất và mức độ tương tự giữa các đối tượng nằm trong các cụm khác nhau là nhỏ nhất Lớp bài toán phân cụm còn được gọi là học không giám sát hạy học không thầy
c Khai phá chuỗi theo thời gian (Sequential temporal patterns)
Cũng tương tự như khai phá dữ liệu bằng luật kết hợp nhưng có thêm tính thứ
tự và tính thời gian Hướng tiếp cận này được ứng dụng nhiều trong lĩnh vực tài chính
và thị trường chứng khoán bởi vì chúng có tính dự báo cao
d Mô tả khái niệm và tổng hợp hóa (Summarization)
Liên quan đến các phương pháp tìm kiếm một mô tả cho một tập con dữ liệu Các kỹ thuật toán tắt thường được áp dụng cho các phân tích dữ liệu tương tác
có tính thăm dò và tạo báo cáo tự động
e Luật kết hợp (Association rules)
Luật kết hợp là dạng luật biểu diễn tri thức ở dạng khá đơn giản Mục tiêu của phương pháp này là phát hiện và đưa ra các mối liên hệ giữa các giá trị dữ liệu trong cơ sở dữ liệu Mẫu đầu của giải thuật khai phá dữ liệu là tập luật kết hợp tìm được
Trong số đó thì khai phá luật kết hợp trong CSDL giao dịch là một trong những
kỹ thuật phổ biến nhất trong khai phá dữ liệu [1, 2, 3, 4, 7, 8, 19, 20, 22]
Trang 24Luật kết hợp được sử dụng rộng rãi trong nhiều lĩnh vực khác nhau như: Kinh doanh, sản xuất, giao thông, viễn thông, giáo dục, quản lý thị trường, …
1.2 MỘT SỐ PHƯƠNG PHÁP KHAI PHÁ TẬP PHỔ BIẾN TRÊN CSDL TĨNH
1.1.1 Mở đầu
Hiện nay thì có rất nhiều phương pháp khai phá tập phổ biến trên CSDL tăng trưởng Trong số đó thì khai phá luật kết hợp trong CSDL giao dịch là một trong những kỹ thuật phổ biến nhất trong khai phá dữ liệu, có thể chia làm 2 hướng chính: Phương pháp khai phá tập phổ biến mà cần phải phát sinh tập ứng viên
Phương pháp khai phá tập phổ biến không cần phát sinh tập ứng viên
Phương pháp khai phá tập phổ biến mà yêu cầu phát sinh tập ứng viên còn được gọi là phương pháp tựa Apriori Thuật toán đầu tiên được Cheung và cộng sự [6] đề xuất là FUP (Fast-UPdated algorithm) Tuy nhiên thuật toán vẫn xử lý lại toàn bộ CSDL gốc khi thêm mới giao dịch vào CSDL Một số thuật toán khác cũng đã được
đề xuất [21]
Phương pháp khai phá tập phổ biến mà không yêu cầu phát sinh tập ứng viên còn được gọi là phương pháp tựa FP-tree (Frequent-Pattern tree) Thực tế phương pháp FP-tree vẫn phát sinh ứng viên, nhưng ứng với mỗi ứng viên phát sinh ra thì sẽ tính nhanh được độ hỗ trợ, do đó giải quyết được vấn đề bùng nổ tập ứng viên Bên cạnh đó thì rất nhiều các thuật toán đã được đề xuất như AFPIM [15], EFPIM [17] Bởi vì các thuật toán khai phá tập phổ biến trên CSDL tăng trưởng đều dựa vào những thuật toán khai phá tập phổ biến trên CSDL tĩnh, do đó trong các mục tiếp theo của chương này thì luận văn sẽ giới thiệu một số khái niệm cũng như một số thuật toán khai phá tập phổ biến tiêu biểu trên CSDL tĩnh và thuật toán khai phá tập phổ biến trên CSDL động
1.1.2 Một số kiến thức cơ bản
a Các khái niệm
I = {i 1,…, in}: tập n thuộc tính (item) phân biệt
X ⊆ I : được gọi là tập thuộc tính hay một itemset
Trang 25D: CSDL giao dịch, mỗi giao dịch (transaction) T ∈ D được định nghĩa như một tập con các thuộc tính trong I (T ⊆ I) và có một định danh duy nhất có dạng <TID,
i 1,…, ik> Một giao dịch T ∈ D hỗ trợ cho tập thuộc tính X, X ⊆ I nếu nó chứa tất cả các thuộc tính của X, nghĩa là X ⊆ T
Một số định nghĩa cơ bản [1]:
Định nghĩa 2.1: Cho CSDL giao dịch D và tập dữ liệu X ⊆ I Độ đếm hỗ trợ (support count) của X trong D, kí hiệu σ(X), được định nghĩa là số giao dịch mà X xuất hiện trong D
Đôi khi ký hiệu T(X) cũng được dùng để hiểu là số giao dịch mà X xuất hiện trong D
Định nghĩa 2.2: Cho CSDL giao dịch D và tập dữ liệu X ⊆ I Độ hỗ trợ của X trong D, kí hiệu sup(X) (support(X) hoặc s(X)), được định nghĩa là tỷ lệ phần trăm của các giao dịch hỗ trợ X trên tổng các giao dịch có trong D
Ta có 0 ≤ sup(X) ≤ 1 với mọi tập thuộc tính X
Định nghĩa 2.3: Cho một tập X ⊆ I và một ngưỡng hỗ trợ tối thiểu minsup ∈ (0,1] (được xác định bởi người sử dụng) Một itemset X được gọi là một tập phổ biến (frequent itemset hoặc large itemset) với độ hỗ trợ tối thiểu minsup nếu và chỉ nếu sup(X) ≥ minsup
Một tập phổ biến được sử dụng như là một tập đáng quan tâm trong các thuật toán, ngược lại những tập không phải tập phổ biến là những tập không đáng quan tâm Trong các phần trình bày sau này, luận văn sử dụng những cụm từ khác như ‘‘X
có độ hỗ trợ tối thiểu’’ , ‘‘X không có độ hỗ trợ tối thiểu’’ cũng chỉ để nói lên X thỏa mãn hay không thỏa mãn sup(X) ≥ minsup Một tập thuộc tính X được gọi là k- itemset nếu lực lượng của X bằng k (tức là |X| = k)
Một số tính chất liên quan đến tập phổ biến [1, 7]:
Tính chất 2.1: Nếu A ⊆ B với A, B ⊂ I thì sup(A) ≥ sup(B) vì tất cả các giao dịch của D hỗ trợ B thì cũng hỗ trợ cho A
Trang 26Tính chất 2.2: Một itemset B không có độ hỗ trợ tối thiểu trên D nghĩa là sup(B) < minsup thì mọi tập cha A của B sẽ không phải là tập phổ biến vì sup(A) ≤ sup(B) < minsup Tính chất 2.3: Nếu itemset B là một tập phổ biến trên D, nghĩa là sup(B) ≥ minsup thì mọi tập con A của B đều là tập phổ biến trên D vì sup(A) ≥ sup(B) > minsup Định nghĩa 2.4: Một luật kết hợp là một quan hệ có dạng X ⇒ Y trong đó X,
Y ⊂ I , và X ∩ Y = ∅ Ở đây, X được gọi là tiền đề, Y là hệ quả của luật Hai thông số quan trọng của luật kết hợp là độ hỗ trợ và độ tin cậy
Định nghĩa 2.5: Độ hỗ trợ của luật kết hợp X ⇒ Y là tỷ lệ phần trăm giữa các giao dịch chứa X ∪ Y và tổng số các giao dịch trong CSDL
và ngưỡng tin cậy (độ tin cậy tối thiểu) do người sử dụng xác định trước Ngưỡng hỗ trợ và ngưỡng tin cậy lần lượt được ký hiệu là minsup và minconf Chú ý rằng, nếu luật X ⇒ Y thỏa mãn trên D thì cả X và Y đều là các tập phổ biến trên D
b Khai phá tập phổ biến
Ta có thể phân loại các thuật toán khai phá phổ biến theo hai tiêu chí:
- Phương pháp duyệt qua không gian tìm kiếm
- Phương pháp xác định độ hỗ trợ của tập ứng viên
Với phương pháp duyệt qua không gian tìm kiếm được phân làm hai cách:
Trang 27Duyệt theo chiều rộng (Breadth First Search – BFS) và duyệt theo chiều sâu (Depth First Search – DFS) Duyệt theo chiều rộng là duyệt qua dữ liệu nguyên bản, để tính
độ hỗ trợ của tất cả các tập ứng viên có k - 1 thuộc tính trước khi tính độ hỗ trợ của các tập ứng viên có k thuộc tính Một cơ sở dữ liệu có n thuộc tính, trong lần lặp thứ
k để tìm những tập ứng viên k-itemset, ta phải kiểm tra !
k n
n C
các phần tử
trong tập phổ biến (k-1)-itemset
Duyệt theo chiều sâu, là duyệt qua cơ sở dữ liệu đã được chuyển thành cấu trúc
cây, quá trình duyệt được gọi đệ quy theo chiều sâu của cây Với cơ sở dữ liệu có n thuộc tính, I = {x1, x2, …, xn}, thì không gian tìm kiếm là tập tất cả các tập con của I,
đây là bài toán NP khó, nếu không có phương pháp duyệt thích hợp thì bài toán không
giải được khi n đủ lớn Phương pháp xác định độ hỗ trợ của tập thuộc tính X ⊆ I được
phân làm hai cách:
Cách thứ nhất: Đếm số giao tác trong cơ sở dữ liệu chứa X
Cách thứ hai: Tính phần giao của các tập định danh giao tác chứa X
Các thuật toán khai phá tập phổ biến phải thiết lập một số giai đoạn trên CSDL Trong giai đoạn đầu, ta thực hiện tính độ hỗ trợ cho mỗi thuộc tính riêng lẻ và xác
định xem thuộc tính nào là phổ biến, nghĩa là có support ≥ minsup Trong mỗi giai
đoạn tiếp theo, ta bắt đầu với các tập phổ biến đã tìm được trong giai đoạn trước, để sinh ra các tập ứng viên có khả năng là tập phổ biến mới và tính độ hỗ trợ cho các tập ứng viên này bằng một phép duyệt CSDL Cuối mỗi giai đoạn, người ta xác định tập phổ biến cho giai đoạn tiếp theo Tiến trình này sẽ tiếp tục, cho đến khi không tìm được một tập các tập thuộc tính phổ biến mới hơn nữa Sơ đồ tổng quan của thuật toán khai phá tập phổ biến
Giả sử các thuộc tính trong mỗi giao dịch đã được sắp xếp theo thứ tự từ điển
(diễn tả một thứ tự quy ước nào đó cho các thuộc tính của CSDL), nghĩa là một itemset ci kí hiệu là ci[1], ci[2],…, ci[k] thì ci[1] < ci[2] <…< ci[k] Nếu ci = X.Y và Y
k-là một m-itemset thì Y cũng được gọi k-là một m mở rộng (m-extention) của X Trong khi lưu trữ, mỗi itemset có một trường support_count tương ứng, dùng để lưu độ đếm
hỗ trợ cho itemset này
Trang 281.2.3 Phương pháp Apriori
Apriori [1, 2, 7] là thuật toán khai phá luật kết hợp do Rakesh Agrawal, Tomasz Imielinski, Anin Sawami đề xuất vào năm 1993, là nền tảng cho việc phát triển những thuật toán sau này Thuật toán sinh tập ứng viên từ những tập phổ biến ở bước trước,
sử dụng kĩ thuật “tỉa” để bỏ đi tập ứng viên không thỏa mãn ngưỡng hỗ trợ cho trước
Các ký hiệu sử dụng trong thuật toán:
L k = {l1, l2,…, li, …} tập các k-itemset phổ biến
C k = {c1, c2,…, ci, …} tập các k-itemset ứng viên, mỗi ci có 2 trường itemset và count dùng để chứa tập thuộc tính và độ phổ biến của tập thuộc tính đó trong cơ sở
dữ liệu
Thuật toán:
INPUT: Tập các giao dịch D, ngưỡng hỗ trợ minsup
OUTPUT: Tập Answer bao gồm các tập phổ biến trên D
Phương pháp:
L 1 = {large 1-itemset};
for (k = 2; Lk-1 ≠ ∅; k++) do begin
C k = apriori_gen(Lk-1); // sinh tập ứng viên mới Ck;
forall giao dịch t ∈ D do begin
C t = subset(Ck, t); // các tập ứng viên chứa trong t;
forall tập các thuộc tính ứng cử c ∈ Ct do c.count ++ ;
end;
L k = {c ∈ Ck | c.count ≥ minsup}
end;
Answer =k L k ;
Trong thuật toán này, giai đoạn đầu đơn giản chỉ là việc tính độ hỗ trợ của các
thuộc tính Để xác định L1, ta chỉ giữ lại các thuộc tính có độ hỗ trợ lớn hơn hoặc bằng minsup Trong các giai đoạn thứ k sau đó (k > 1), mỗi giai đoạn gồm có 2 pha: Pha thứ 1: Sinh tập ứng viên C k từ tập phổ biến Lk-1 bằng hàm appriori-gen()
Trang 29Pha thứ 2: CSDL D sẽ được quét để tính độ hỗ trợ cho mỗi ứng viên trong C k Các tập ứng viên trong Ck mà được chứa trong giao dịch t có thể được xác định một cách hiệu quả bằng việc sử dụng cây băm [2]
Hàm apriori_gen() thực hiện hai bước:
Bước kết nối: Bước này kết nối các phần tử trong Lk-1 với nhau Giả sử rằng các thuộc tính trong các ứng viên đã được sắp xếp theo thứ tự từ điển Nếu có k-2 item đầu tiên (gọi là tiền tố) của hai (k-1)-itemset l1, l2 nào đó mà giống nhau thì ta khởi tạo một k-itemset ứng viên cho Ck bằng cách lấy phần tiền tố này hợp với 2 item thứ k-1 của l 1 và l2 (có thể phải sắp lại thứ tự cho các item này) Điều kiện l1[k-1] < l2[k- 1] nhằm tránh trường hợp 2 ứng viên l1 và l2 giống nhau kết nối với nhau
Bước cắt tỉa: Trong bước này, ta cần loại bỏ tất cả các k-itemset c ∈ Ck mà tồn tại một (k-1)-itemset s, s ⊂ c và s ∉ Lk-1 Giải thích điều này như sau: một (k-1)- itemset s, s ⊂ c và s ∉ Lk-1 Khi đó, sup(s) < minsup vì s không phải là tập phổ biến, mặt khác do c ⊃ s nên sup(c) ≤ sup(s) < minsup Vậy c không thể là tập phổ biến, nó cần được loại bỏ ra khỏi Ck
Hàm subset và cấu trúc cây băm:
Cấu trúc cây băm: Để tăng hiệu quả cho việc tìm các tập phổ biến và tính độ hỗ trợ cho các tập ứng viên, thuật toán sử dụng cấu trúc cây băm để lưu trữ tập ứng viên
C k Mỗi nút của cây băm hoặc chứa một danh sách của các ứng viên (nếu là nút lá)
hoặc một bảng băm nếu là nút trong Tại mỗi nút trong, mỗi phần tử của bảng băm
trỏ đến một nút khác Gốc của cây được định nghĩa có độ sâu bằng 1 Nút ở độ sâu d thì trỏ đến nút ở độ sâu (d +1) Các ứng viên được lưu trữ trong các nút lá tạo thành
một danh sách liên kết và đã được sắp xếp Khi số ứng viên lưu trong nút lá vượt quá
ngưỡng thì nút lá chuyển thành nút trong Khi thêm một ứng viên c vào cây, ta bắt
đầu duyệt từ nút gốc trên cây cho đến khi tìm được nút lá phù hợp, cách thực hiện
như sau: ở mỗi nút trong độ sâu d, chúng ta quyết định đi theo nhánh nào bằng cách
sử dụng hàm băm đối với mục thứ d (c[d] lưu mục thứ d) của tập thuộc tính c Hàm subset(Ck, t): Hàm này dùng để tìm tất cả các tập ứng viên trong Ck có chứa trong giao dịch t Để tìm tập ứng viên ta bắt đầu từ nút gốc: nếu nút gốc là nút
Trang 30lá thì ta xem các tập ứng viên trong nút lá đó có chứa trong giao dịch t Trường hợp nút trong, và là kết quả của việc áp dụng hàm băm cho mục thứ i của giao dịch t, thì
ta tiếp tục thực hiện hàm băm cho mục thứ (i +1) của giao dịch t, cho đến khi tìm gặp
nút lá Thủ tục tìm này được thực hiện đệ quy
1.2.4 Phương pháp FP-Tree
Apriori là phương pháp tìm ra những tập phổ biến trong CSDL, từ đó rút trích được những quy luật có ích Tuy nhiên Apriori có nhiều hạn chế:
- Quét CSDL nhiều lần
- Bùng nổ số lượng tập ứng viên khi phát sinh tập ứng viên
Để khắc phục được những nhược điểm của phương pháp Apriori thì Han et al
[9] đã đề xuất phương pháp FP-tree, đó là một phương pháp khai phá tập phổ biến
mà không cần phát sinh toàn bộ tập ứng viên Phương pháp này sẽ nén các CSDL lớn
vào một cấu trúc gọi là FP-tree (Frequent-Pattern tree) Cấu trúc này:
- Có mật độ cao, nhưng hoàn thiện cho việc khai phá các mẫu phổ biến
- Tránh được các chi phí khác phải bỏ ra khi quét CSDL nhiều lần
Tác giả còn đưa ra một phương pháp khai phá các mẫu phổ biến hiệu quả dựa trên cấu trúc FP-tree gọi là FP-growth Phương pháp này sử dụng phương thức “chia
để trị”, phân tích các tác vụ khai phá dữ liệu thành các tác vụ khác nhỏ hơn và tránh được việc phát sinh toàn bộ tập ứng viên Ưu điểm nổi bật của phương pháp FP-tree
là chỉ quét dữ liệu 2 lần Ngoài ra nó còn có các ưu điểm sau:
FP-tree lưu trữ tất cả các thông tin có liên quan đến quá trình khai phá các tập phổ biến
Kích thước của cây được giới hạn bởi tần xuất xuất hiện của các thuộc tính Chiều cao của cây được giới hạn bởi số lượng tối đa các thuộc tính trong một giao tác
Tuy nhiên bản thân phương pháp FP-tree và thuật toán khai phá tập phổ biến trên cấu trúc FP-tree cũng có những điểm hạn chế:
• Cần 2 lần để quét lại CSDL: lần đầu để tìm tập 1-itemset và lần thứ 2 để xây dựng cây FP-tree
Trang 31• Việc xây dựng cây FP-tree cho các CSDL lớn gặp khó khăn, không đủ bộ nhớ để lưu trữ
• Khi có những giao tác mới được thêm vào CSDL thì cây FP-tree cần được cập nhật như thế nào
Thuật toán xây dựng cây FP
Function createFPtree()
INPUT: CSDL D chứa các giao dịch, ngưỡng minsup
OUTPUT: Cây FP-tree
Bước 1: Duyệt D và tính độ phổ biến của các item Sắp xếp các item theo thứ tự giảm dần của độ phổ biến, ta được tập kết quả L
Bước 2: Tạo nút gốc cho cây T, ký hiệu là root Duyệt D lần thứ 2 Ứng với mỗi giao tác trong D thực hiện 2 công việc sau:
• Chọn và sắp xếp những item phổ biến theo thứ tự trong f_list
• Giao dịch đang xét được lý hiệu như sau [p|r_list] gồm 2 phần, p là phần tử item đầu tiên và P là những item còn lại của giao dịch (không bao gồm những item
không thỏa ngưỡng phổ biến) Gọi hàm insert_tree( [p|r_list], root )
Nội dung hàm insert_tree(List: [p|r_list], Node)
Bước 1: Kiểm tra nếu tồn tại nút con (child) được trỏ trực tiếp từ Node và được
gán nhãn là p.item-name (hay child.item-name = p.item-name) thì tăng chỉ số đếm của nút child lên 1 Nếu không tồn tại thì tạo một nút con mới (child), khởi tạo chỉ số đếm của nút child này là 1, sau đó tạo các liên kết của nút child 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 r_list chưa rỗng thì gọi hàm insert_tree(r_list, child) Trong quá trình xây dựng cây FP-tree một Header_Table được xây dựng để giúp
đỡ cho quá trình duyệt cây FP-tree Header_Table bao gồm các item trong tập large itemset cùng với tần số xuất hiện của item đó trong CSDL và một con trỏ (frequency head) dùng để liên kết đến nút đầu tiên có nhãn tương ứng với item đó trong cây FP-
tree Nếu nhiều hơn một nút có cùng một nhãn thì những nút đó sẽ được liên kết tuần
tự với nhau Các nút trong cây FP-Tree liên kết đơn với nhau
Trang 321.2.5 Một số thuật toán khai phá tập phổ biến khác
➢ Thuật toán Apriori-Tid [2, 4]:
Như đã đề cập ở phần trên, thuật toán Apriori quét toàn bộ CSDL trong mỗi giai
đoạn để tính độ hỗ trợ Việc quét toàn bộ CSDL có thể là không cần thiết đối với tất
cả các giai đoạn Với ý tưởng đó, Agrawal et al đã đề xuất một thuật toán khác, gọi
là thuật toán Apriori-TID
Tương tự thuật toán Apriori, thuật toán Apriori-TID cũng sử dụng hàm
apriori_gen() để xác định các tập ứng viên trước khi bắt đầu mỗi giai đoạn Điểm
khác nhau chủ yếu của thuật toán này so với thuật toán Apriori là nó không sử dụng
CSDL để tính độ hỗ trợ trong các giai đoạn k > 1 Thay vào đó nó sử dụng một tập
hợp C k , mỗi phần tử của C k có dạng <TID, {Xk}>, Xk là một tập large k-itemset
mà giao dịch có mã TID chứa đựng Nhiều thí nghiệm trên nhiều CSDL chỉ ra rằng
thuật toán Apriori cần ít thời gian hơn giải thuật Apriori-TID trong các giai đoạn đầu,
nhưng mất nhiều thời gian cho các giai đoạn sau
Thuật toán:
INPUT: Tập các giao dịch D, ngưỡng hỗ trợ minsup
OUTPUT: Tập Answer bao gồm các tập phổ biến trên D
(1) L1 = {large 1-itemsets};
(2) C1= database D;
(3) For (k = 2; Lk-1 ≠ ∅; k ++) do begin (4) Ck = appriori-gen(Lk-1); //New candidates
(5) C k ∅
(6) Forall entries tC k 1do begin (7) Ct = { c Ck | (c – c[k]) t.set-of-itemsets ⋀ (c – c[k-1]) t.set-of-itemsets }
(8) For all candidate cC tdo
(9) c.count++;
(10) If (Ct ≠ ∅) then Ck t TID C , t ;
Trang 33(11) end
(12) Lk = { c Ck | c.count >= minsup};
(13) end (14) Answer =k L k
Mỗi thành viên của tập C k tương ứng với một giao dịch t là <t.TID, { c Ck | c chứa trong t}> Nếu một giao dịch t không chứa bất kỳ tập k-itemset nào thì dữ liệu
của giao dịch đó trong tập C k bằng ∅, do đó tập C k sẽ nhỏ hơn rất nhiều so với CSDL
D ban đầu Đặc biệt k càng lớn thì tập C k càng nhỏ vì có ít các tập ứng viên được
chứa trong các giao dịch, tuy nhiên nếu k nhỏ thì tập C k sẽ lớn hơn CSDL D ban đầu
vì có rất nhiều các ứng viên được chứa trong các giao dịch Điều này giải thích tại
sao khi k càng lớn Apriori-Tid hiệu quả hơn Apriori
➢ Thuật toán Apriori-Hybrid [2]:
Kết quả chạy thực nghiệm của R Agrawal cho thấy với k nhỏ, thuật toán Apriori chạy nhanh hơn thuật toán AprioriTid, ngược lại với k lớn, thuật toán AprioriTid chạy nhanh hơn Khi k nhỏ, số lượng phần tử của C k không ít hơn số giao tác của CSDL nên việc tính độ hỗ trợ dựa trên C k không nhanh hơn so với dựa trên CSDL nguyên thủy Ngoài ra mỗi phần tử của C k có tập X lớn nên mất thời gian để tính toán C k , tập C k cũng chiếm bộ nhớ lớn nên có thể vượt khả năng lưu trữ ở bộ nhớ trong máy tính và phải sử dụng đến bộ nhớ ngoài nên mất thêm thời gian đọc và ghi đĩa Do đó,
thuật toán AprioriTid chạy chậm khi k nhỏ Khi k lớn, số lượng phần tử của C k nhỏ hơn số giao tác của CSDL nên viêc tính độ ủng hộ dựa trên C k nhanh hơn so với dựa trên CSDL, tập C k nhỏ lại, không cần sử dụng đến bộ nhớ ngoài Do đó, thuật toán
AprioriTid chạy nhanh khi k lớn
Trang 341.2.6 Một số cấu trúc dữ liệu giúp cải thiện thuật toán Apriori
a Hash-tree
Hash-tree [2, 5] còn được gọi là cây băm Đó là một cấu trúc đã được áp dụng cài đặt cho thuật toán Apriori một cách hiệu quả Cây băm có thể cải thiện được hiệu năng của thủ tục xác định độ hỗ trợ của tập ứng viên trong thuật toán Apriori Tập ứng viên mới sau khi được phát sinh có thể lưu trữ trên một cây băm Cây băm là một cấu trúc cây, mỗi nút là của cây chứa đựng một tập các itemset, mỗi nút trong chứa đựng một bảng băm Trong mỗi bảng băm sẽ có các phần tử, mỗi phần tử trong một bảng băm sẽ liên kết đế một nút khác Gốc của cây được định nghĩa có độ sâu bằng
1 Một nút tại độ sâu d sẽ trỏ đến những nút tại độ sâu d +1
Khi thêm một itemset c vào cây thì di chuyển từ nút gốc xuống các nút khác cho đến khi nào tìm được nút lá thì dừng Tại một nút trong ở độ sâu j, ta sẽ quyết định đi theo nhánh nào bằng cách áp dụng hàm băm đối với item thứ j của itemset c Ban đầu
thì tất cả các nút khi thêm vào cây đều là nút lá Khi số lượng các itemset lưu trữ trong một nút là vượt quá một ngưỡng nào đó thì nút là sẽ được chuyển thành nút trong Hình 1.10 là một cấu trúc cây băm lưu trữ 5 ứng viên 3-itemset với hàm băm
là thứ tự của mỗi item trong bảng chữ cái modulo 6 Bởi vì 2 item G và M có cùng giá trị sau khi áp dụng hàm băm nên 2 itemset {A, E, G} và {A, E, M} sẽ được lưu
0 KMN
0 AEL AEG 0 AEM 0
G, M
Trang 35b Trie
Trie là một cấu trúc được đưa ra để giải quyết cho bài toán lưu trữ và truy tìm các từ trong từ điển [16]
Hình 1.8 Cấu trúc dữ liệu Trie [5]
Trie là một cây có hướng, giống như cấu trúc cây băm Gốc của cây thì có độ
sâu là 0, một nút ở độ sâu d có thể tham chiếu đến những nút ở độ sâu d +1 Các nút
được tham chiếu đến nhau thông qua một con trỏ, con trỏ đó còn được gọi là một cạnh hay một liên kết, nó được gán nhãn bởi một ký tự Mỗi nút lá trên cây thì biểu hiện cho một từ, nó là một tập hợp các ký tự từ trên đường đi từ gốc đến nút đó Chú
ý, nếu k ký tự đầu tiên của 2 từ là giống nhau thì đường đi từ gốc đến 2 nút đó sẽ có
k cạnh giống nhau Trie là một cấu trúc dữ liệu phù hợp để lưu trữ và truy tìm không
chúng ta đang đứng ở một nút mà item ik của itemset đang xét không tương ứng với
các item trong các liên kết từ nút này thì ta sẽ tạo ra một nút mới được liên kết từ nút
Trang 36đang xét, với item tương ứng với liên kết đó là ik Chúng ta sẽ lặp đi lặp lại thủ tục
này cho đến khi nào không còn itemset nào cần thêm vào cấu trúc trie nữa Nhóm
tác giả Bondon et al thông qua thực nghiệp [5] đã chứng tỏa cấu trúc trie cải tiến có
những ưu điểm so với cấu trúc cây băm [2] như sau:
- Trong phương thức phát sinh tập ứng viên thì một tập ứng viên mới sẽ được tạo ra từ một cặp nút mà có cùng cha, điều này có nghĩa là giữa 2 ứng viên mà có thuộc tính cuối cùng khác nhau
- Trong phương thức xác định độ hỗ trợ của tập ứng viên, để cải thiện hiệu năng
thì nhóm tác giả Bodon et al đã đề xuất ra một số kỹ thuật cắt tỉa,
- Ví dụ: Giả sử t = {B, C, E, K, M} Cấu trúc trie trên hình 2.8 nút gốc có hai nút con tương ứng với 2 item là {A} và {K} Ký hiệu id{X} là thứ tự của item X trong giao dịch t, Ta có {K} ∈ t, id{K} = 3 nhưng id{K} ≥ |t| − k + d + 1 = 5 – 3 + 0 + 1 =
3 Nên chúng ta có thể khẳng định ngay là giao dịch t không chứa đựng bất cứ một itemset nào mà ký tự đầu tiên là {K}
- Nhóm tác giả Bodon et al còn đưa ra một số cải tiến trong thủ tục xác định độ
hỗ trợ của các ứng viên Tại mỗi nút cần ghi nhận lại thông tin là chiều dài lớn nhất
từ nút đó đến một nút lá Ta sẽ dựa vào thông tin này để xác định liên kết nào có thể tiếp tục được xét đến trong thủ tục xác định độ hỗ trợ của tập ứng viên Cụ thể, giả
sử ta đã duyệt qua cấu trúc trie và hiện tại đang ở một nút có độ sâu d, chúng ta chỉ
có thể di chuyển đến những nút tiếp theo nếu chiều dài lớn nhất tại nút đó ít nhất phải
bằng k - d
Ví dụ: Giả sử t = {A, B, C, D, E, F, G, H, I}, và ta muốn xác định độ hỗ trợ của
các ứng viên lưu trữ trong một cấu trúc trie như Hình 2.9 Bình thường thì ta sẽ phải cần duyệt qua tất cả các nút của cấu trúc trie Nhưng nếu áp dụng cải tiến của nhóm
tác giả Bodon et al., ở mỗi nút ta lưu trữ thêm thông tin về chiều dài lớn nhất từ nút
đó đến một nút lá thì trong ví dụ này ta chỉ duyệt qua tổng cộng 6 nút theo hướng A
→ B → C → D → E
Trang 37Hình 1.9 Cấu trúc Trie lưu trữ tập các ứng viên [5]
1.3 KẾT CHƯƠNG
Khai phá dữ liệu ngày càng đóng một vai trò quan trọng trong việc tìm ra các tri thức thực sự có ích, hiệu quả tiềm ẩn trong các khối dữ liệu thông tin khổng lồ vẫn hàng ngày đang được thu thập, lưu trữ để giúp các cá nhân và tổ chức đưa ra được các quyết định chính xác và nhanh chóng
Chương 1 đã giới thiệu những kiến thức chung về lĩnh vực khai phá dữ liêu, tuy
đã có rất nhiều các giải pháp và phương pháp được ứng dụng trong khai phá dữ liệu, trong đó nhưng trên thực tế quá trình này vẫn gặp không ít khó khăn và pháh thức như:
- Kích thước dữ liệu ngày càng lớn, có thể lên đến gigabytes, terabytes thậm chí lớn hơn
- Số lượng các luật rút ra từ việc khai phá dữ liệu là rất lớn
- Các luật rút ra từ việc khai phá dữ liệu chỉ phản ánh được tình trạng của dữ liệu tại một thời điểm nhất định Để có thể rút ra được những luật kết hợp có độ tin cậy cao và ổn định thì cần phải thu thập dữ liệu trong một thời gian đáng kể
Trang 38- Vì vậy, có 2 vấn đề được đặt ra trong việc khai phá dữ liệu là:
- Thiết kế một thuật toán hiệu quả cho việc khai phá các luật hoặc các mẫu phổ biến
- Thiết kế một thuật toán hiệu quả để cập nhật và quản lý các luật đã được khai phá
Vấn đề thứ nhất đã được nghiên cứu từ rất lâu, có nhiều thuật toán hiệu quả đã được đề xuất như : Apriori, FP-Tree, Apriori- Tid, Apriori – Hybird
Vấn đề thứ hai cũng đã được nghiên cứu và phát triển thành nhiều thuật toán với hiệu quả sử dụng khác nhau, chúng ta sẽ tìm hiểu 1 số thuật toán tiêu biểu để giải quyết vấn để này trong chương 2
Trang 39CHƯƠNG 2
MỘT SỐ PHƯƠNG PHÁP KHAI PHÁ TẬP PHỔ BIẾN TRÊN CƠ
SỞ DỮ LIỆU TĂNG TRƯỞNG
2.1 THUẬT TOÁN FUP
Thuật toán FUP (Fast-UPdate algorithm) do Cheung et al đề xuất năm 1996
[6] Thuật toán xử lý trường hợp thêm giao dịch mới vào CSDL
2.1.1 Một số ký hiệu
DB: CSDL ban đầu
L : Tập hợp các tập phổ biến trong CSDL ban đầu
L k : Tập large k-itemset trong DB
s : Độ hỗ trợ tối thiểu
D : số lượng các giao dịch trong DB
X.support D : số lượng các giao dịch trong DB chứa X
X.support d : số lượng các giao dịch trong db chứa X
X.support UD: số lượng các giao dịch trong DBdb chứa X
db : CSDL được thêm vào CSDL ban đầu
d : số lượng các giao dịch trong db
L : tập hợp các tập phổ biến trong CSDL DBdb
k
L : tập large k-itemset trong DBdb
Một tập X là tập phổ biến trong CSDL DBdb nếu X.support ≥ s×(D+d)
Hình 2.1 4 trường hợp xảy ra khi thêm mới giao dịch vào CSDL [6]
Trang 40Như vậy sẽ có 4 trường hợp xảy ra khi thêm các giao dịch mới vào CSDL
Trường hợp 1: Một itemset là phổ biến (large) trong CSDL ban đầu và trong
các giao dịch được thêm vào
Trường hợp 2: Một itemset là phổ biến (large) trong CSDL ban đầu nhưng là không phổ biến (small) trong các giao dịch được thêm vào
Trường hợp 3: Một itemset là không phổ biến (small) trong CSDL ban đầu nhưng là phổ biến (large) trong các giao dịch được thêm vào
Trường hợp 4: Một itemset là không phổ biến (small) trong CSDL ban đầu và trong các giao dịch được thêm vào
Nhận xét: Trường hợp 1 thì itemset đó vẫn sẽ phổ biến trong CSDL sau khi được
cập nhật, trường hợp 4 thì itemset đó vẫn sẽ không phổ biến trong CSDL sau khi được cập nhật, do đó trường hợp 1 và 4 sẽ không ảnh hưởng đến kết quả của tập phổ biến khai phá được Trường hợp 2 có thể sẽ loại bỏ đi một số itemset đã tồn tại trong tập phổ biến của CSDL gốc, còn trường hợp 3 có thể sẽ bổ xung thêm một số itemset mới vào tập phổ biến đã được khai phá Một thuật toán quản lý tốt tập phổ biến đã được khai phá trong trường hợp các giao dịch mới được thêm vào phải làm được một số công việc sau
- Đánh giá xem các các itemset thuộc tập phổ biến (large itemset) trong CSDL ban đầu có còn phổ biến (large) trong CSDL sau khi được cập nhật hay không
- Tìm các itemset thuộc tập không phổ biến (small itemset) trong CSDL ban đầu
có thể trở thành phổ biến (large) trong CSDL sau khi được cập nhật
- Tìm những itemset chỉ xuất hiện trong những giao dịch được thêm vào và xác
định xem chúng có phổ biến (large) trong CSDL sau khi được cập nhật không
2.1.2 Chi tiết thuật toán FUP
Bước 1: Tại mỗi lần lặp, độ hỗ trợ của từng itemset trong tập large k-itemset trong L sẽ được cập nhật dựa vào db để lọc ra những itemset nào là không phổ biến (losers còn gọi là small itemset hay những tập không còn là tập phổ biến trong DBdb) Ta chỉ cần quét db để tiến hành cập nhật độ hỗ trợ
Bước 2: Trong khi quét db thì một tập hợp các ứng viên C k sẽ được trích xuất ra