Professional Documents
Culture Documents
Tên đề tài:
TÌM HIỂU VÀ THỬ NGHIỆM THUẬT TOÁN KHAI
PHÁ DỮ LIỆU GSP
2.1 Các hướng tiếp cận và các kỹ thuật chính trong khai phá dữ liệu....................7
2.1 Các dạng dữ liệu có thể khai phá.......................................................................8
3. Ứng dụng của Khai phá dữ liệu..................................................................................................8
2
Giới thiệu đề tài
Khai phá mẫu dãy là một nội dung quan trọng trong khai phá dữ liệu với nhiều ứng dụng
rộng rãi như phân tích thị trường, phân tích mẫu truy cập web, phát hiện xâm nhập trong
môi trường mạng, trong nghiên cứu DNA, dự doán nhu cầu mua sắm của khách hàng…
Khai phá mẫu dãy là việc phát hiện các dãy con phổ biến trong cơ sở dữ liệu dãy. Theo
các nghiên cứu, các thuật toán, khai phá mẫu dãy chủ yếu tập chung vào hai nội dung là
cách thức mà dãy ứng viên được sinh ra và lưu trữ, cách mà độ hỗ trợ được tính và tần
suất dãy ứng viên được kiểm tra. Dựa vào các tiêu chí trên, thuật toán khai phá mẫu dãy
có thể được nhóm thành hai hướng tiếp cận chính: thuật toán dựa trên Aproori, thuật
toán pháy triển mẫu. Có một số thuật toán theo phương pháp tiếp cận dựa trên Apriori
như AprioriAll, GSP, Spade, Spam… và các biến thể của chúng.
3
Chương I: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU
Hình 1 - Lượng dữ liệu được tích lũy tăng mạnh theo thời gian
Chúng ta quả thực đang “ngập” trong dữ liệu, nhưng lại cảm thấy “đói” tri
thức và thông tin hữu ích. Lượng dữ liệu khổng lồ này thực sự là một nguồn “tài
nguyên” rất giá trị bởi thông tin là yếu tố then chốt trong hoạt động kinh doanh vì nó
giúp những người điều hành và quản lý có một cái nhìn sâu sắc, chính xác, khách
quan vào tiến trình kinh doanh trước khi ra quyết định. KPDL – khai thác những
thông tin tiềm ẩn có tính dự đoán từ những CSDL lớn – là một hướng tiếp cận mới
với khả năng giúp các công ty chú trọng vào những thông tin có nhiều ý nghĩa từ
những tập hợp dữ liệu lớn (databases, data warehouses, data repositories) mang tính
lịch sử. Những công cụ KPDL có thể dự đoán những xu hướng trong tương lai và
do đó cho phép doanh nghiệp ra những quyết định kịp thời được định hướng bởi tri
thức mà KPDL đem lại. Sự phân tích dữ liệu một cách tự động và mang tính dự báo
của KPDL có ưu thế hơn hẳn so với sự phân tích thông thường dựa trên những sự
kiện trong quá khứ của các hệ hỗ trợ ra quyết định (decision support systems -
DSSs) truyền thống trước đây. Công cụ KPDL cũng có thể trả lời những câu hỏi
trong lĩnh vực kinh doanh mà trước đây được xem là tốn nhiều thời gian để xử lý.
Với tất cả những ưu thế trên, KPDL đã chứng tỏ được tính hữu dụng của nó trong môi
4
trường kinh doanh đầy tính cạnh tranh ngày nay. Giờ đây, KPDL đã và đang trở
thành một trong những hướng nghiên cứu chính của lĩnh vực khoa học máy tính và
công nghệ tri thức.
Phạm vi ứng dụng ban đầu của KPDL chỉ là trong lĩnh vực thương mại (bán lẻ)
và tài chính (thị trường chứng khoán). Nhưng ngày nay, KPDL đã được ứng dụng
rộng rãi trong các lĩnh vực khác như tin-sinh (bio-informatics), điều trị y học (medical
treatment), viễn thông (telecommunication), giáo dục (education), .v.v.
1.2 Định nghĩa khai phá dữ liệu
Chúng ta có thể hiểu một cách sơ lược rằng KPDL là quá trình tìm kiếm những
thông tin (tri thức) hữu ích, tiềm ẩn và mang tính dự báo trong các tập dữ liệu lớn.
Như vậy, chúng ta nên gọi quá trình này là khám phá tri thức (Knowledge
Discovery in Databases – KDD) thay vì là KPDL. Tuy nhiên các nhà khoa học
trong lĩnh vực này đồng ý với nhau rằng hai thuật ngữ trên là tương đương và có thể
thay thế cho nhau. Họ lý giải rằng, mục đích chính của quá trình khám phá tri thức là
thông tin và tri thức có ích, nhưng đối tượng mà chúng ta phải xử lý rất nhiều trong
suốt quá trình đó lại chính là dữ liệu.
Mặt khác, khi chia các bước trong quá trình khám phá tri thức, một số nhà
nghiên cứu lại cho rằng, KPDL chỉ là một bước trong quá trình khám phá tri thức
[FSSU96].
Như vậy, khi xét ở mức tổng quan thì hai thuật ngữ này là tương đương nhau,
nhưng khi xét cụ thể thì KPDL được xem là một bước trong quá trình khám phá tri
thức.
Có rất nhiều định nghĩa về KPDL, các định nghĩa này đều là những định nghĩa
mang tính mô tả. Xin trích một vài định nghĩa ở nguyên bản tiếng Anh nhằm chuyển
tải được y nguyên ý của tác giả và tránh được những sai sót chủ quan:
5
“Data Mining is the search for relationships and global patterns that exist in
large databases but are ‘hidden’ among the vast amount of data, such as a
relationship between patient data and their medical diagnosis. These relationships
represent valuable knowledge about the database and the objects in the database
and, if the database is a faithful mirror, of the real world registered by the
database.”
• Trích chọn dữ liệu (data selection): là bước trích chọn những tập dữ liệu cần
được khai phá từ các tập dữ liệu lớn (databases, data warehouses, data
repositories) ban đầu theo một số tiêu chí nhất định.
• Tiền xử lý dữ liệu (data preprocessing): là bước làm sạch dữ liệu (xử lý với dữ
liệu không đầy đủ, dữ liệu nhiễu, dữ liệu không nhất quán, .v.v.), rút gọn dữ
liệu (sử dụng hàm nhóm và tính tổng, các phương pháp nén dữ liệu, sử dụng
histograms, lấy mẫu, .v.v.), rời rạc hóa dữ liệu (rời rạc hóa dựa vào
histograms, dựa vào entropy, dựa vào phân khoảng, .v.v.). Sau bước này, dữ
liệu sẽ nhất quán, đầy đủ, được rút gọn, và được rời rạc hóa.
• Biến đổi dữ liệu (data transformation): đây là bước chuẩn hóa và làm mịn dữ
liệu để đưa dữ liệu về dạng thuận lợi nhất nhằm phục vụ cho các kỹ thuật
khai phá ở bước sau.
• KPDL (data mining): đây là bước áp dụng những kỹ thuật khai phá (phần nhiều
là các kỹ thuật của machine learning) để khai phá, trích chọn được những
mẫu (patterns) thông tin, những mối liên hệ (relationships) đặc biệt trong dữ
liệu. Đây được xem là bước quan trọng và tốn nhiều thời gian nhất của toàn
quá trình KDD.
• Biểu diễn và đánh giá tri thức (knowledge representation & evaluation):
những mẫu thông tin và mối liên hệ trong dữ liệu đã được khai phá ở bước
trên được chuyển dạng và biểu diễn ở một dạng gần gũi với người sử dụng
như đồ thị, cây, bảng biểu, luật, .v.v. Đồng thời bước này cũng đánh giá
những tri thức khám phá được theo những tiêu chí nhất định.
6
Hình 2 - Các bước trong quá trình khám phá tri thức (KDD)
2. Các hướng tiếp cận và các kỹ thuật áp dụng trong Khai phá dữ liệu
2.1 Các hướng tiếp cận và các kỹ thuật chính trong khai phá dữ liệu
Các hướng tiếp cận của KPDL có thể được phân chia theo chức năng hay lớp các
bài toán khác nhau. Sau đây là một số hướng tiếp cận chính [HK02].
• 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 trước. Ví dụ: phân lớp vùng địa lý theo dữ liệu
thời tiết. Hướng tiếp cận này thường sử dụng một số kỹ thuật của machine
learning như cây quyết định (decision tree), mạng nơ ron nhân tạo (neural
network), .v.v. Phân lớp còn được gọi là học có giám sát (học có thầy –
supervised learning).
• Luật kết hợp (association rules): là dạng luật biểu diễn tri thứ ở dạng khá
đơn giản. Ví dụ: “60 % nam giới vào siêu thị nếu mua bia thì có tới 80%
trong số họ sẽ mua thêm thịt bò khô”. Luật kết hợp được ứng dụng nhiều
trong lĩnh vực kinh doanh, y học, tin-sinh, tài chính & thị trường chứng
khoán, .v.v.
• Khai phá chuỗi theo thời gian (sequential/temporal patterns): tương tự như
khai phá 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 vì nó có tính dự báo cao.
• Phân cụm (clustering/segmentation): xếp các đối tượng theo từng cụm (số
lượng cũng như tên của cụm chưa được biết trước. Phân cụm còn được gọi
là học không giám sát (học không có thầy – unsupervised learning).
Do KPDL được ứng dụng rộng rãi nên nó có thể làm việc với rất nhiều kiểu dữ
liệu khác nhau [HK02]. Sau đây là một số kiểu dữ liệu điển hình.
• CSDL quan hệ (relational databases)
• CSDL quan hệ - hướng đối tượng (object-relational databases)
• CSDL đa phương tiện (multimedia databases) như âm thanh (audio), hình
ảnh (image), phim ảnh (video), .v.v.
• Dữ liệu Text và Web (text database & www)
• ……
KPDL tuy là một lĩnh vực mới nhưng thu hút được rất nhiều sự quan tâm của các
nhà nghiên cứu nhờ vào những ứng dụng thực tiễn của nó. Chúng ta có thể liệt kê ra
đây một số ứng dụng điển hình:
• Phân tích dữ liệu và hỗ trợ ra quyết định (data analysis & decision support)
• Điều trị y học (medical treatment): mối liên hệ giữa triệu chứng, chẩn đoán và
phương pháp điều trị (chế độ dinh dưỡng, thuốc men, phẩu thuật, …).
• Text mining & Web mining: phân lớp văn bản và các trang web, tóm tắt văn
bản, .v.v.
• Tin-sinh (bio-informatics): tìm kiếm, đối sánh các hệ gene và thông tin di
truyền, mối liên hệ giữa một số hệ gene và một số bệnh di truyền, .v.v.
• Tài chính và thị trường chứng khoán (finance & stock market): phân tích
tình hình tài chính và dự báo giá của các loại cổ phiếu trong thị trường
chứng khoán, .v.v.
8
Chương II: KHÁI QUÁT CHUNG VỀ LUẬT KẾT HỢP, LUẬT
DÃY VÀ KHAI PHÁ LUẬT DÃY
Khai phá luật dãy là một chủ đề thiết thực và quan trọng trong khai phá dữ liệu
với nhiều ứng dụng như là trong phân tích giao dịch mua hàng của khách hàng, khai
thác weblogs, khai thác các dãy ADN, nghiên cứu dữ liệu trong các bài toán khí tượng
- thủy văn như dự báo thời tiết, các thảm họa tự nhiên như động đất, sóng thần...
Các thuật toán khai phá luật dãy kế thừa nhiều từ các thuật toán khai phá luật kết
hợp, và nhiều thuật toán trong số đó là mở rộng của các thuật toán khởi thủy, ở đó sự
khác biệt chính là trong khai phá luật dãy đưa ra các phân tích liên giao dịch (inter-
transaction), trong khi đó khai phá luật kết hợp là tìm luật về mối liên quan giữa các
phần tử trong cùng một giao dịch (intra- transaction). Trước tiên, ta cần tìm hiểu một
số vấn đề của luật kết hợp.
9
Để thu được các luật kết hợp, ta thường áp dụng 2 tiêu chí: minimum support
(min_sup) và minimum confidence (min_conf)
Các luật thỏa mãn có support và confidence thỏa mãn (lớn hơn hoặc bằng) cả
Minimum support và Minimum confidence gọi là các luật mạnh (Strong Rle)
Minimum support và Minimum confidence gọi là các giá trị ngưỡng (threshold) và
phải xác định trước khi sinh các luật kết hợp.
Một itemsets mà tần suất xuất hiện của nó >= min_sup goi là frequent itemsets
Một số loại luật kết hợp
Binary association rules (luật kết hợp nhị phân): Apple => Banana
Quantitative association rules (luật kết hợp định lượng):
weight in [70kg – 90kg] => height in [170cm – 190cm]
Fuzzy association rules (Luật kết hợp mờ): weight in HEAVY => height in TALL
Thuật toán phổ biến nhất tìm các luật kết hợp là Apriori sử dụng Binary association rules.
1.2 Các ứng dụng điển hình của luật kết hợp
Một số ứng dụng điển hình như: phân tích giỏ hàng (market basket analysis), đưa
ra chiến lược tiếp thị, thiết kế bài trí gian hàng, chiến lược bán hàng khuyến mại, các
bài toán phân lớp, phân cụm, ...
Market basket analysis: Chẳng hạn, một người quản lý một chi nhánh bán hàng,
họ muốn biết thêm về thói quen mua sắm của khách hàng. Cụ thể như họ muốn biết
rằng “Trong mỗi lần mua sắm, khách hàng thường mua các nhóm mặt hàng nào cùng
nhau?”. Để trả lời câu hỏi này, việc phân tích giỏ khách hàng sẽ được thực hiện trên
dữ liệu mua bán lẻ của khách hàng đã được lưu trữ. Sau đó có thể sử dụng kết quả đó
để lên kế hoạch tiếp thị, chiến lược quảng cáo hoặc dự định bổ sung các danh mục
hàng hóa mới. Việc phân tích giỏ hàng có thể giúp bạn thiết kế gian hàng với các cách
bài trí hàng hóa khác nhau. Các mặt hàng thường xuyên được mua với nhau có thể
được đặt ở gần nhau để thúc đẩy việc bán hàng. Nếu khách hàng mua máy tính cũng
có xu hướng mua phần mềm diệt virus cùng lúc, cũng thế, đặt màn hình gần với các
phần mềm hiển thị có thể giúp tăng doanh số bán hàng của cả hai. Trong một chiến
lược khác, bố trí phần cứng và phần mềm ở hai đầu của cửa hàng có thể lôi kéo khách
hàng mua những mặt hàng khác trên đường di chuyển giữa hai vị trí. Ví dụ, sau khi
quyết định mua một máy tính đắt tiền, trong khi đến mua phần mềm diệt virus, khách
hàng quan sát thấy hệ thống an ninh gia đình được trưng bày và có thể quyết định
mua. Việc phân tích giỏ hàng cũng có thể giúp các nhà bán lẻ đưa ra các kế hoạch bán
hàng giảm giá. Thông thường, khách hàng có xu hướng mua máy tính và máy in với
nhau, khi đó có thể bán giảm giá máy in nếu khách hàng mua máy tính.
Trong gian hàng, mỗi mặt hàng gắn với một biến Boolean biểu thị sự có mặt
hay vắng mặt của mặt hàng đó. Tiếp đến, mỗi giỏ hàng có thể được thể hiện bởi một
vector Boolean các giá trị được gán cho các biến đó. Các vector Boolean biểu thị
10
các mẫu mua hàng mà ở đó các mặt hàng được kết hợp một cách thường xuyên hoặc
được mua với nhau. Các mẫu này có thể được biểu thị ở dạng các luật kết hợp. Ví dụ,
khách hàng mua máy tính cũng có xu hướng mua phần mềm diệt virus cùng lúc, có
thể được biểu diễn với luật kết hợp như sau:
computer ⇒ antivirus_software [support = 2%, confidence = 60%]
support = 2% nghĩa là có 2% trong tất cả các giao dịch được phân tích cho thấy
máy tính và phần mềm diệt virus được mua cùng lúc. confidence = 60% nghĩa là có
60% số lượng khách hàng đã mua máy tính thì cũng mua phần mềm. Thông
thường, các luật kết hợp được quan tâm nếu chúng đáp ứng được cả ngưỡng hỗ trợ
tối thiểu và ngưỡng tin cậy tối thiểu. Các ngưỡng này có thể được thiết lập bởi
người dùng.
2. Luật dãy
Không mất tính tổng quát, chúng ta giả sử rằng một tập các phần tử được ánh xạ
tới một tập các số nguyên liền kề. Ta biểu thị itemset i bởi (i1i2...im), trong đó ij là một
phần tử. Ta biểu thị dãy s bởi (s1s2...sn), trong đó sj là một itemset.
Dãy (a1a2...an) được chứa trong dãy (b1b2...bn) nếu ở đó tồn tại các số nguyên
i1 < i2 < ... < in sao cho a1 ⊆ bi1 , a2 ⊆ bi2 , ..., an ⊆ bin. Ta sử dụng ký
hiệu để biểu thị quan hệ “được chứa trong”. Ví dụ, dãy <(3) (4,5) (8)>
<(7) (3 8) (9) (4 5 6) (8)>, vì
((3) ⊆ (3 8), (4 5) ⊆ (4 5 6) và (8) ⊆ (8). Tuy nhiên, dãy <(3) (5)>
không được chứa trong <(3 5)> và ngược lại. Phần tử 3 và 5 trong dãy <(3) (5)>
mô tả chúng không nằm trong cùng một lần giao dịch, trong khi phần tử 3 và 5
trong dãy <(3 5)> mô tả chúng nằm trong một lần giao dịch. Trong một tập các
dãy, một dãy s là lớn nhất hay tối đa (maximal) nếu s không được chứa trong bất
kỳ dãy nào khác.
Tất cả các giao dịch của cùng một khách hàng có thể được xem như là một dãy.
Trong đó, mỗi giao dịch được xem như một tập các phần tử, và danh sách các giao
11
dịch theo thứ tự tăng dần về thời gian giao dịch tương ứng với một dãy. Chúng ta gọi
đó là một dãy khách hàng (customer-sequence). Ta biểu thị các giao dịch của một
khách hàng được sắp xếp thứ tự tăng dần theo thời gian là (T1, T2, ..., Tn). Tập các
phần tử (item) trong Ti được biểu thị bởi itemset(Ti). Dãy customer-sequence của một
khách hàng là một dãy <itemset(T1) itemset(T2) ... itemset(Tn)>.
Một khách hàng hỗ trợ một dãy s nếu s được chứa trong dãy customer-sequence
đối với khách hàng đó. Độ hỗ trợ của một dãy được định nghĩa là số khách hàng hỗ trợ
dãy đó.
Các dãy tối đa trong số tất cả các dãy phổ biến đáp ứng mức hỗ trợ tối thiểu cụ
thể nào đó được gọi là luật dãy hay mẫu dãy (sequential patterns).
Ta gọi dãy đáp ứng độ hỗ trợ tối thiểu là dãy phổ biến (large sequence)
Ví dụ
Cho CSDL mua bán hàng thể hiện trong hình 1.1.
CSDL trong hình 1.2 đã được sắp xếp theo mã khách hàng (customer-id) và thời gian
giao dịch.
12
4 July 25 '93 90
5 June 12 '93 90
Hình 1.2: CSDL được sắp xếp theo
Khách hàng ID và thời gian giao dịch
CSDL hình 1.3 thể hiện như là một tập các dãy khách hàng (customer-sequence).
Hình 1.5: Kiến trúc tổng thể của hệ thống quản lý thông tin di động
15
Chương III: CÁC PHƯƠNG PHÁP KHAI PHÁ LUẬT DÃY
1. Khái quát về khai phá luật dãy
Khai phá luật dãy xử lý dữ liệu điển hình là các dãy là một tập hợp các phần tử
được sắp thứ tự. So với vấn đề luật kết hợp, luật dãy nghiên cứu dữ liệu đưa ra các
phân tích “liên giao dịch” (inter-transaction). Có rất nhiều ứng dụng về khai phá mẫu
dãy và vấn đề cũng được định nghĩa theo những cách khác nhau với mức độ thay đổi
không đáng kể. Kết hợp với các giải pháp hiệu quả, những vấn đề này có thể phù
hợp với dữ liệu thực tế có mốc thời gian (timestamp) (khi mà luật kết hợp đã không
giải quyết được) và cung cấp những kết quả hữu ích.
Ta sử dụng CSDL giao dịch mua bán hàng làm ví dụ, với các thông tin về: định
danh của dãy hoặc định danh khách hàng (sequence-id or customer-id), thời gian giao
dịch (transaction-time) và mặt hàng liên quan trong giao dịch (item). Một CSDL như
vậy được gọi là CSDL dãy. Chính xác hơn, mỗi giao dịch là một tập hợp các mặt hàng
(itemset) và mỗi dãy là một danh sách các giao dịch được sắp xếp theo thời gian giao
dịch. Đối với hiệu quả của việc trợ giúp ra quyết định, mục đích là để tìm ra những
thói quen tiêu biểu của người dùng. Để làm được việc đó, đòi hỏi phải có một CSDL
dãy và đưa ra giá trị hỗ trợ tức là số lần xuất hiện trong CSDL. Một mẫu dãy phổ biến
là một dãy mà tần xuất xuất hiện trong CSDL vượt ngưỡng quy định. Vấn đề tìm kiếm
tất cả các mẫu thường xuyên từ lượng dữ liệu khổng lồ đòi hỏi chi phí về mặt thời gian
là rất lớn. Thông thường, việc kiểm tra của tất cả các kết hợp có thể trong dữ liệu là
vấn đề khó và những thuật toán mới tập trung vào dữ liệu dãy được coi là quan trọng
đối với một tổ chức.
Khai phá luật dãy có thể được áp dụng rộng rãi trên các ứng dụng từ nhiều loại
dữ liệu có thời gian liên quan. Ví dụ, từ một CSDL mua bán hàng, một mẫu dãy có thể
được dùng để phát triển các chiến lược tiếp thị và sản phẩm; Bằng cách phân tích
weblog, các mẫu dãy rất hữu ích cho việc xây dựng website công ty giúp khách hàng
truy cập một cách dễ dàng các liên kết phổ biến nhất (Kosala và Blockeel, 2000); Ta
cũng có thể thấy CSDL báo động mạng viễn thông, phát hiện xâm nhập (Hu và Panda,
2004), các dãy ADN (Zaki, 2003), …
Chúng ta chia vấn đề khai phá luật dãy thành các giai đoạn sau đây:
Giai đoạn sắp xếp (Sort Phase): CSDL (D) được sắp xếp, với mã khách hàng
(custorm-id) là khóa chính và thời gian giao dịch (transaction-time) là khóa phụ. Bước
này chuyển đổi ngầm cơ sơ dữ liệu giao dịch gốc thành CSDL dãy khách hàng.
Giai đoạn Litemset (Litemset Phase): Trong giai đoạn này, chúng ta tìm tập
tất cả litemsets L, đồng thời cũng tìm kiếm tập tất cả các dãy phổ biến 1-sequence,
vì tập này cũng là {<l> | l ∈ L}.
16
Với giao dịch của một khách hàng, độ hỗ trợ được tính tăng lên chỉ một lần ngay
cả khi khách hàng mua cùng một tập các sản phẩm trong hai hay nhiều giao dịch khác
nhau.
Tập hợp các litemsets được ánh xạ tới một tập hợp các số nguyên liên tiếp. Sau
bước xử lý litemsets để có được các thực thể duy nhất, việc ánh xạ này giúp ta có thể
so sánh hai litemsets có bằng nhau hay không trong thời gian cố định, và giảm số lần
cần thiết để kiểm tra nếu một dãy được chứa trong dãy khách hàng.
Giai đoạn chuyển đổi (Transformation Phase): Như chúng ta sẽ thấy trong giai
đoạn dãy (Sequence Phase), cần phải xác định lặp đi lặp lại nhiều lần để đưa ra một
tập các dãy phổ biến (large sequences) được chứa trong một dãy khách hàng. Để thực
hiện điều này một cách nhanh chóng, ta chuyển đổi mỗi dãy khách hàng thành một đại
diện thay thế.
Trong một dãy khách hàng được chuyển đổi, mỗi giao dịch được thay thế bằng
tập tất cả các litemsets được chứa trong giao dịch đó. Nếu một giao dịch không chứa
bất kỳ litemset nào, nó không được giữ lại trong dãy chuyển đổi. Nếu một dãy khách
hàng không chứa bất kỳ litemset nào thì dãy này bị loại bỏ trong CSDL chuyển
đổi. Tuy nhiên, nó vẫn góp phần vào việc tính tổng số lượng khách hàng. Một dãy các
khách hàng khi đó được thể hiện bởi một danh sách tập các litemsets. Mỗi tập
litemsets được biểu diễn bởi {l1, l2, ..., ln}, trong đó li là một litemset.
CSDL chuyển đổi này gọi là DT. Tiếp tục sử dụng CSDL trong phần 1.2 làm ví
dụ, việc chuyển đổi CSDL Hình 1.3 được thể hiện trong Hình 2.1. Ví dụ, trong trong
việc chuyển đổi dãy khách hàng với Id 2, giao dịch (10 20) bị loại bỏ vì nó không chứa
bất kỳ litemset nào và giao dịch (40 60 70) được thay thế bằng tập litemsets {(40),(70),
(40 70)}.
for ( k = n; k > 1; k – – ) do
foreach k-sequence sk
do
Định nghĩa: Cho dãy s = <s1 s2 … sn> và một dãy con c, c là dãy con liên tục của
s nếu thỏa mãn bất kỳ điều kiện nào sau đây:
1. c nhận được từ s bằng cách lược bỏ phần tử s1 hoặc sn.
2. c nhận được từ s bằng cách lược bỏ một phần tử từ thành phần si mà si có ít
nhất hai phần tử.
3. c là dãy con liên tục của c‟, và c‟ là dãy con liên tục của s.
Ví dụ: Giả sử có dãy s = <(1,2) (3,4) (5) (6)>. Khi đó, các dãy con liên tục của s
là <(2) (3,4) (5)>; <(1,2) (3) (5) (6)>; <(3) (5)>. Các dãy không phải là dãy con liên
tục của s như: <(1,2) (3,4) (6)>; <(1,2) (5) (6)>
Dữ liệu dãy có chứa dãy s cũng sẽ chứa bất kỳ dãy con liên tục nào của s. Nếu
không có ràng buộc về khoảng thời gian tối đa max-gap, dữ liệu dãy sẽ chứa tất cả
các dãy con của s (bao gồm cả các dãy con không liên tục). Đặc tính này cung cấp cơ
sở cho thủ tục sinh dãy ứng viên.
Thực hiện sinh các dãy ứng viên qua hai bước:
a. Giai đoạn nối (Join Phase): Thực hiện sinh các dãy ứng viên bằng phép nối Lk- 1
với Lk-1. Một dãy s1 nối với s2 nếu dãy con thu được bằng cách loại bỏ phần tử
đầu tiên của s1 và dãy thu được bằng cách loại bỏ phần tử cuối cùng của s2 là
giống nhau. Dãy ứng viên được sinh bằng phép nối s1 với s2 là dãy s1 được mở
rộng với phần tử cuối cùng trong s2. Phần tử được thêm trở nên thành phần
riêng biệt nếu đó là một thành phần riêng biệt trong s2, và một phần của thành
phần cuối cùng của s1 khác. Khi thực hiện nối L1 với L1, ta cần thêm vào phần
tử trong s2 một phần của itemset cũng như một thành phần riêng biệt, vì cả hai
<(x) (y)> và <(x y)> đều cho cùng một dãy <(y)> khi loại bỏ phần tử đầu tiên.
(Ta thấy rằng s1 và s2 là các dãy con liên tục của các dãy ứng viên mới
b. Giai đoạn thanh loại (Prune Phase): Ta loại bỏ các dãy ứng viên có dãy con liên
tục (k-1)-subsequence mà có độ hỗ trợ nhỏ hơn độ hỗ trợ tối thiểu. Nếu không
tính ràng buộc thời gian max-gap, ta cũng loại bỏ các dãy ứng viên mà có bất kỳ
dãy con nào không thỏa mãn độ hỗ trợ tối thiểu.
Ví dụ: Hình 1 cho thấy L3, và C4 sau khi thực hiện giai đoạn nối và thanh loại.
Trong giai đoạn nối, dãy <(1, 2) (3)> nối với <(2) (3, 4)> để sinh ra dãy <(1, 2) (3, 4)>
và nối với <(2) (3) (5)> để sinh ra dãy <(1, 2) (3) (5)>. Các dãy còn lại không được nối
với bất kỳ dãy nào trong L3. Chẳng hạn, dãy <(1, 2) (4)> không được nối với bất kỳ
dãy nào vì không có dãy nào có dạng <(2) (4 x)> hoặc <(2) (4) (x)>. Trong giai đoạn
thanh loại, dãy <(1, 2) (3) (5)> bị loại bỏ vì dãy con liên tục của nó là <(1) (3) (5)>
không thuộc L3.
a. Thêm các dãy ứng viên vào hash-tree: Khi thêm một dãy s, ta bắt đầu đi từ
nút gốc cho tới khi tìm được một nút lá. Tại nút trung gian có độ sâu p, ta lựa
chọn nhánh tiếp theo bằng cách áp dụng một hàm băm cho phần tử thứ p của dãy.
Lưu ý là ta áp dụng hàm băm đến phần tử thứ p, không phải là thành phần thứ
p. Tất cả các nút được khởi tạo bước đầu là các nút lá. Khi số lượng các dãy trong
một nút lá vượt quá một ngưỡng, nút lá khi đó được chuyển đến nút trung gian.
b. Tìm các dãy ứng viên được chứa trong dữ liệu dãy: Bắt đầu từ nút gốc, ta tìm
tất các các ứng viên được chứa trong dữ liệu dãy d. Áp dụng thủ tục sau, dựa trên
các loại nút bao gồm:
Nút trung gian là nút gốc: Áp dụng hàm băm cho mỗi phần tử trong d, và
áp dụng đệ quy thủ tục này tới nút nằm trong bucket tương ứng. Với bất
kỳ dãy s được chứa trong dữ liệu dãy d, phần tử đầu tiên của s phải nằm
trong d. Thực hiện băm trên mọi phần tử trong d, ta đảm bảo rằng chỉ bỏ
qua các dãy bắt đầu với một phần tử không nằm trong d.
Nút trung gian không phải là nút gốc: Giả sử ta đến nút này bằng việc
thực hiện băm phần tử x có thời gian giao dịch (transaction-time) là t. Áp
dụng hàm băm tới mỗi phần tử trong d có thời gian giao dịch trong
khoảng [t – window-size, t + max(window-size, max-gap)] và áp dụng đệ
quy thủ tục này tới các nút trong bucket tương ứng.
Để thấy tại sao kết quả trả về là tập các ứng viên, xét một dãy ứng viên s
với hai phần tử liên tục là x và y. Cho x là phần tử được chứa trong giao
dịch d với thời gian giao dịch là t. Vì d chứa s nên thời gian giao dịch
tương ứng với y cần phải trong khoảng [t – window-size, t + window-size]
nếu y là một phần của cùng thành phần chứa x, hoặc trong khoảng thời
gian (t, t + max-gap] nếu y là một phần của thành phần kế tiếp. Do đó nếu
chúng ta đạt đến nút này bằng thực hiện băm trên một phần tử x với thời
gian giao dịch t, y phải được chứa trong một giao dịch có thời gian giao
dịch ở trong khoảng [t – window-size, t + max (window-size, max-gap)]
cho dữ liệu dãy để hỗ trợ các dãy. Như vậy chúng ta chỉ cần áp dụng hàm
băm tới các phần tử trong d có thời gian giao dịch nằm trong khoảng thời
gian trên, và kiểm tra các nút tương ứng.
Nút lá: Đối với mỗi dãy s là nút lá, ta kiểm tra xem d có chứa s, và thêm s
vào tập kết quả nếu cần thiết. (Chúng ta sẽ thảo luận dưới đây cách chính
xác để tìm d chứa một dãy ứng viên cụ thể.) Từ đó ta kiểm tra mỗi dãy
được chứa trong nút này, và không bỏ qua bất kỳ dãy nào.
Kiểm tra dữ liệu dãy chứa một dãy cho trướ c:
Cho dữ liệu dãy d, và một dãy ứng viên s = <s1 … sn> . Trước tiên ta mô tả thuật
toán để kiểm tra nếu d chứa s, giả sử tồn tại một thủ tục tìm kiếm sự xuất hiện
đầu tiên của một thành phần của s ở d sau một thời gian nhất định, và sau đó mô
tả thủ tục này. Thuật toán này kiểm tra nếu dữ liệu dãy d chứa một dãy ứng viên
s luân phiên giữa hai giai đoạn. Thuật toán bắt đầu với giai đoạn duyệt xuôi từ
phần tử đầu tiên.
Giai đoạn duyệt xuôi (forward phase): Thuật toán tìm thành phần kế tiếp
của s trong d miễn là hiệu số giữa thời gian kết thúc của thành phần đã
được tìm thấy và thời gian bắt đầu của thành phần trước đó là ít hơn
khoảng max-gap. (Nhắc lại rằng đối với mỗi thành phần si, thời gian bắt
đầu start-time(si) và thời gian kết thúc end-time(si) tương ứng với thời
gian giao dịch đầu tiên và cuối cùng của tập các giao dịch có chứa si). Nếu
hiệu số này nhiều hơn max-gap, thuật toán sẽ chuyển sang giai đoạn duyệt
ngược. Nếu một thành phần không được tìm thấy tức là dữ liệu dãy không
chứa s.
Giai đoạn duyệt ngược (backward phase): Thuật toán thực hiện quay lui
và xét (kéo lên) các thành phần liền trước. Nếu si là thành phần hiện tại và
thời gian kết thúc end-time(si) = t, thuật toán tìm tập các giao dịch đầu
tiên có chứa si mà có thời gian giao dịch sau (t – max-gap). Thời gian bắt
đầu đối với si–1 (sau khi si–1 được xét đến) có thể sau thời gian kết thúc
end-time của si. Trong khi xét si–1 có thể đòi hỏi phải xét cả si–2 bởi vì ràng
buộc max-gap giữa si–1 và si–2 có thể không còn được thỏa mãn. Thuật
toán thực hiện quay lui cho đến khi hoặc là ràng buộc max-gap giữa thành
phần vừa xét và thành phần liền trước thỏa mãn, hoặc là thành phần đầu
tiên được lấy lên. Sau đó thuật toán chuyển sang giai đoạn duyệt xuôi để
tìm các thành phần của s trong d bắt đầu từ thành phần liền sau của thành
phần cuối cùng được lấy lên của giai đoạn duyệt ngược. Nếu không có bất
kỳ thành phần nào được lấy lên (nghĩa là không có tập dãy con của các
giao dịch có chứa thành phần) khi đó dữ liệu dãy không chứa s.
Thủ tục thực hiện lặp đi lặp lại, hoán đổi giữa giai đoạn duyệt xuôi và duyệt
ngược cho tới khi tất cả các thành phần được tìm thấy.
Ví dụ: Cho dữ liệu dãy trong Hình 2. Xét trường hợp max-gap là 30, min-gap là 5
và window-size là 0. Với dãy ứng viên <(1, 2) (3) (4)>, (forward phase) trước tiên ta
cần tìm (1, 2) tại thời gian giao dịch 10, tiếp theo tìm thành phần (3) tại thời gian
giao dịch 45. Khi đó khoảng thời gian giữa hai thành phần (35 ngày) lớn hơn max-gap,
(backward phase) lấy lên thành phần (1, 2). Tìm lần xuất hiện đầu tiên của (1, 2) sau
thời gian 15, bởi vì thời gian kết thúc end-time((3)) = 45 và max-gap là 30, và vì vậy
thậm chí nếu (1, 2) xảy ra tại một số thời điểm trước 15, nó vẫn sẽ không thỏa mãn
ràng buộc max-gap. Ta tìm (1, 2) tại thời gian 50. Vì đây là thành phần đầu tiên nên
không phải kiểm tra xem liệu ràng buộc max-gap có nằm giữa (1, 2) và thành phần
trước đó có thỏa mãn không. Ta chuyển sang bước tiếp theo. Vì (3) không còn xảy ra
lớn hơn 5 ngày sau (1, 2), cần tìm sự xuất hiện tiếp theo của (3) sau thời gian 55. Ta
tìm thấy (3) tại thời gian 65. Khi ràng buộc giữa (3) và (1, 2) thõa mãn, ta tiếp tục di
chuyển tiếp và tìm thấy (4) tại thời gian 90. Ràng buộc max-gap giữa (4) và (3) được
thỏa mãn.
Item Times
10 1, 2
1 → 10 → 50 → NULL
25 4, 6
45 3 2 → 10 → 50 → 90 → NULL
50 1, 2
65 3 3 → 45 → 65 → NULL
90 2, 4
95 6 4 → 25 → 90 → NULL
Hình 2: Dữ liệu dãy Hình 3: Item xuất hiện theo thời gian
Để tìm kiếm một cách hiệu quả một phần tử đơn lẻ (item), ta sử dụng mảng để
lưu trữ tất cả các phần tử có trong dữ liệu dãy và thời gian giao dịch, dữ liệu dãy trong
Hình 2 được biến đổi như Hình 3, nhằm hỗ trợ cho việc tìm kiếm lần xuất hiện đầu
tiên của một thành phần trong dữ liệu dãy sau thời gian t. Thuật toán duyệt một lần tất
cả các phần tử trong thành phần và tìm thời gian giao dịch đầu tiên của mỗi phần tử
lớn hơn t. Nếu hiệu số giữa thời gian bắt đầu và thời gian kết thúc nhỏ hơn hoặc bằng
với window-size thì chấp nhận. Nếu không, t được lấy là hiệu số giữa thời gian kết
thúc và window-size, thủ tục tiếp tục được lặp lại.
Ví dụ: Cho dữ liệu dãy trong Hình 2, giả sử window-size = 7 ngày, ta phải tìm
lần xuất hiện đầu tiên của thành phần (2, 6) sau thời gian t = 20. Ta tìm phần tử 2 tại
thời gian 50, phần tử 6 tại thời gian 25. Vì end-time((2,6)) – start-time((2,6)) > 7 nên
ta đặt t là 43 (= end-time((2,6)) – window-size) và thử lại. Phần tử 2 còn lại tại thời
gian 90, trong khi phần tử 6 tiếp theo tại thời gian 95. Vì khoảng thời gian giữa 90 và
95 nhỏ hơn window-size nên ta bỏ qua.
Phân loại
Cách tiếp cận cơ bản là thay thế mỗi dữ liệu dãy d với một dãy mở rộng d’, trong
đó, mỗi giao dịch d’i của d’ chứa các phần tử trong giao dịch di của d tương ứng, cũng
như tất cả các “ancestor” (tổ tiên) của mỗi phần tử trong di. Ví dụ, một dữ liệu dãy
<(1, 2) (3)> có thể được thay thế với dãy mở rộng <(1, 2, 4, 5, 6) (3, 4, 6)> . Sau đó, ta
thực GSP trên các dãy mở rộng này.
Có hai cách tối ưu hóa để cải thiện đáng kể hiệu suất thực hiện. Cách thứ nhất là
tính toán trước các “ancestor” của mỗi phần tử và loại bỏ các “ancestor” không có
trong bất kỳ dãy ứng viên nào được tính trước khi thực hiện duyệt dữ liệu. Ví dụ, nếu
(2), (3) và (4) không nằm trong bất kỳ dãy ứng viên nào được tính trong lần duyệt hiện
tại, ta sẽ thay thế dãy <(1, 2) (3)> với dãy mở rộng <(1, 5, 6) (5, 6)> (thay vì dãy mở
rộng <(1, 2, 4, 5, 6) (3, 5, 6)>). Cách tối ưu hóa thứ hai là không tính các mẫu dãy với
một thành phần có chứa cả phần tử x và phần tử y là ancestor của x, vì độ hỗ trợ của
các dãy này sẽ luôn giống độ hỗ trợ cho các mẫu dãy không có y. (Bất kỳ giao dịch
nào chứa x cũng sẽ chứa y.)
3. Ví dụ thuật toán GSP
Cho dữ liệu:
Seq. ID Sequence
10 <(b,d)cb(a,c)>
20 <(b,f)(c,e)b(f,g)>
30 <(a,h)(b,f)abf>
40 <(b,e)(c,e)d>
50 <a(b,d)bcb(a,d,e)>
Minsupp=2
C Sup
Các ứng viên đầu tiên C1:
<a>, <b>, <c>, <d>, <e>, <f>, <g>, <h> <a> 3
•Duyệt CSDL để tính độ phổ biến của từng ứng viên và tìm F1 <b> 5
<h> 1
<ca>
<cb> <cc> <cd> <ce> <cf>
<c> Supp=3 Supp=1 Supp=2 Supp=1 Supp=1
Supp=2
<da>
<db> <dc> <dd> <de> <df>
<d> Supp=2 Supp=2 Supp=1 Supp=1 Supp=0
Supp=2
<ea>
<eb> <ec> <ed> <ee> <ef>
<e> Supp=0 Supp=1 Supp=0 Supp=1 Supp=1 Supp=1
<fa>
<fb> <fc> <fd> <fe> <ff>
<f> Supp=2 Supp=1 Supp=0 Supp=1 Supp=2
Supp=1