Tải bản đầy đủ
Hình 2.4: Ví dụ cây CFP-Tree

Hình 2.4: Ví dụ cây CFP-Tree

Tải bản đầy đủ

55

hai trên cơ sở dữ liệu, ta chỉ chọn các mục thường xuyên của mỗi giao dịch,
ánh xạ từng khoản mục để chỉ số của nó trong HeaderTable, sắp xếp các mặt
hàng giao dịch trong thứ tự tăng dần của mã chỉ mục của chúng, và chèn
chúng vào CFP_Tree. Con trỏ ở HeaderTable cũng đóng vai trò như là sự
khởi đầu của các liên kết đến các nút khác.
Các thuật toán xây dựng CFP-Tree như sau:
Procedure ConstructHeaderTable
// Đầu vào: Cơ sở dữ liệu
// Đầu ra: Bảng HeaderTable
For mỗi giao dịch trong cơ sở dữ liệu
For mỗi khoản mục trong một giao dịch
If khoản mục trong HeaderTable
Then tăng số đếm của khoản mục trong HeaderTable
Else thêm khoản mục vào HeaderTable với số đếm =1
Endif
Endfor
Endfor
Xoá khoản mục không thường xuyên và sắp xếp HeaderTable theo
chiều giảm dần của khoản mục thường xuyên
Định danh chỉ số cho mỗi khoản mục thường xuyên.
Procedure CFP-Tree
// Input: cơ sở dữ liệu, HeaderTable, min_sup
//Output: CFP-Tree
Xây dựng nhánh trái nhất của cây()
For mỗi giao dịch trong cơ sở dữ liệu
Begin
Xây dựng mappedTrans

56

For mỗi khoản mục thường xuyên trong giao dịch
// Lấy chỉ số của khoản mục trong HeaderTable
mappedTrans = mappedTrans ∪ GetIndex(item)
endfor
Sắp xếp mappedTrans
InsertToTree(mappedTrans)
Endfor
Procedure InsertToTree(mappedTrans)
Begin
FirstItem = mappedTrans[]
CurrNode = gốc của cây con được trỏ bởi
HeaderTable[firstItem]
For mỗi khoản mục con tiếp theo i trong mappedTrans
Begin
If currNode có con đại diện cho i
Then tăng đếm của firstItem -1 của nút con
Else tăng nút con và thiết lập số đếm firstItem -1
của nó bằng 1
Tổ chức các nút khác tương tự
Endif
Endfor
2.3.2.2. Thuật toán CFPmine
Khai thác tập phổ biến là một phần thiết yếu của khai thác luật kết
hợp. Ứng dụng của nó cho các nhiệm vụ khai thác các dữ liệu khác cũng đã
được công nhận. Một số lượng lớn các thuật toán đã và đang được phát triển
để khai thác tập phổ biến. Dưới đây là một thuật toán khai thác tập phổ biến

57

sử dụng một cấu trúc dữ liệu nhỏ gọn hơn có tên là Compressed FP-Tree
(CFP-Tree). Số lượng các nút trong một CFP-Tree có thể ít hơn một nửa so
với trong FP-Tree tương ứng. Thuật toán CFPmine duyệt các CFP-Tree từ
dưới lên và tạo ra các tập phổ biến theo phương pháp tiếp cận mô hình tăng
trưởng không đệ quy. Thuật toán CFPmine thực hiện tốt hơn so với FPGrowth, và Apriori.
FP-Growth cho thấy hiệu suất tốt trên dữ liệu nhiều vì nó sử dụng
một cấu trúc dữ liệu nhỏ gọn có tên là FP-Tree. FP-Tree là một cây tiền tố với
các liên kết giữa các nút có chứa cùng một mục. Một cây cấu trúc dữ liệu phù
hợp các bộ dữ liệu dày đặc kể từ khi nhiều giao dịch sẽ chia sẻ tiền tố phổ
biến để cơ sở dữ liệu có thể được đại diện gọn hơn.
Yudho Giri Sucahyo và Raj P.Gopalan đã giới thiệu một thuật toán
khai thác tập mục phổ biến bằng cách sử dụng cây Compressed FP-Tree
(CFP-Tree)[7]. Trong thuật toán này, phương pháp duyệt cây là theo chiến
lược từ dưới lên, và thực hiện không đệ quy. Cấu trúc dữ liệu CFP-Tree được
sử dụng để tạo ra đại diện nhỏ hơn cho các giao dịch trong bộ nhớ.
Thuật toán được mô tả như sau:
Input: Cây CFP-Tree
Output: Tập khoản mục thường xuyên
Method:
1. Procedure CFPmine
For mỗi khoản mục i có số lần xuất hiện ít nhất trong bảng
HeaderTable
Tạo ra cây cục bộ LocalFrequentPatternTree với i là gốc
ConstructLocalItemTable(i);
For mỗi khoản mục j ∈ LocalItemTable
Gán j là con của i

58

Endfor
ConstructLocalCFPTree(i);
RecMine(i);
Duyệt cây LocalFrequentPatternTree để in ra tập phổ biến
Endfor
End
2. Procedure ConstructLocalItemTable(i)
For mỗi lần nút i xuất hiện trong cây CFP-Tree
For mỗi khoản mục j trong đường dẫn đến nút gốc
If j ∈ LocalItemTable
then tăng đếm của j
Else
Chèn j vào trong bảng LocalItemTable với số
đếm = 1
Endif
Endfor
Endfor
End
3. Procedure ConstructLocalCFP-Tree(i)
For mỗi lần nút i xuất hiện trong cây CFP-Tree
Tạo bảng MappedTrans
For mỗi khoản mục thường xuyên j ∈ LocalItemTable
trong đường dẫn đến gốc.
mappedTrans = mappedTrans ∪ GetIndex(j)
endfor
Sắp xếp bảng MappedTrans theo thứ tự tăng dần của mã
khoản mục

59

InsertToCFPTree(MappedTrans)
Endfor
End
4. Procedure RecMine(i)
For mỗi con j của i
Thiết lập đếm trong LocalItemTable bằng 0
For mỗi lần nút j xuất hiện trong LocalCFPTree
For mỗi khoản mục k trong đường dẫn đến gốc
Tăng đếm của k trong LocalCFPTree
Endfor
Endfor
For mỗi khoản mục k trong LocalItemTable
Thêm k như là con của j
Endfor
RecMine(j)
Endfor
End.
2.3.2.3.Thuật toán ITARM
Ý tưởng chính của ITARM được dựa trên thuật toán CFPmine[9].
Trong khi các tập phổ biến một phần tử được tạo ra, chúng được sử dụng như
là các điều kiện ràng buộc một cách riêng biệt để có được hạn chế tập phổ
biến một phần tử. Sau đó, bằng cách sử dụng tập phổ biến một phần tử để xây
dựng một CFP-cây, khai thác cây với thuật toán CFPmine, do đó chúng ta có
thể nhận được tất cả các tập phổ biến và luật kết hợp hạn chế bởi một số tập
phổ biến. Tập hợp của tất cả các luật kết hợp hạn chế tạo thành các quy tắc kết
hợp.
Quá trình của ITARM là như sau.

60

Trước hết, đọc tất cả dữ liệu từ cơ sở dữ liệu và lưu trữ chúng.
Dữ liệu được lưu trữ trong bộ nhớ chính nên độ hỗ trợ tính của tập phổ biến
không cần phải quét các cơ sở dữ liệu, do đó chi phí I / O có thể được giảm.
Nếu số lượng dữ liệu là rất lớn, nó có thể được lưu trữ trong một tập tin trên
đĩa, nhưng chi phí I / O sẽ được tăng lên.
Quá trình khai thác dữ liệu được chia thành hai bước. Bước đầu
tiên là tìm tất cả các giao dịch thường xuyên có tập phổ biến một phần tử đáp
ứng các ngưỡng hỗ trợ tối thiểu. Bước thứ hai là, trên cơ sở bước đầu tiên, để
khai thác liên giao dịch tập phổ biến và luật kết hợp.
Gọi Σ1 ={e1,e2,…,ek} là tập hợp các sự kiện, chúng là thuộc tính
của chuỗi thời gian. Ti là giá trị của tập Σ1 tại thời điểm i: Ti = {e1(i),e2(i),
…,ek(i)}(1≤i≤n). Tập hợp chuỗi thời gian D được định nghĩa là: D={T 1,T2,
…,Tn}.
Đặt Σ ={e1(0),…,e1(w-1),e2(0),…,e2(w-1),…,ek(0),…,ek(w-1)}là
tập mở rộng có thể của Σ1 với w là cửa sổ trượt trong D. Lấy mốc thời gian s
(1≤s≤n-w+1) là mốc thời gian mở rộng, nếu e i xảy ra tại thời điểm s+x
(0≤x≤w-1) thì ta đánh dấu ei(x) thuộc về Ts.
Bước thứ hai dựa trên phương pháp tiếp cận phân chia và chinh
phục. Đối với tất cả các khoản mục thường xuyên e i(0) thực hiện các hoạt
động sau đây.
Trong khi ei(0) xuất hiện tạo ra tập phổ biến FI i trong cửa
sổ trượt. Sắp xếp FIi theo thứ tự (ei +1(0), ..., eu(0), e1(1), ..., eu(1), ..., e1(w1), ..., eu ( w-1)) gọi là SFIi.
Quét các dữ liệu thiết lập D, mỗi cửa sổ trượt như là một
giao dịch, tìm hiểu tất cả các mục trong SFIi, và xây dựng cây CFP-Tree.
Gọi thuật toán CFPmine để khai thác CFP cây. Sau khi
quá trình khai thác hoàn thành, đầu ra là tất cả các tập thường xuyên hoặc các

61

luật kết hợp bắt đầu với e i(0). Xóa cây CFP-Tree, tăng i lên, và đi đến bước
sau để khai thác các mục tiếp theo ei +1 (0).
Thuật toán ITARM
Input: tập hợp dữ liệu chuỗi thời gian D, độ hỗ trợ tối thiểu
min_sup, sự tin cậy tối thiểu min_conf, w kích thước cửa sổ trượt
Output: Các luật kết hợp trong D
Method:
Giai đoạn 1
C1 = {{ei (x)} | (ei (x) ∈ Σ) ∧ (0 ≤ x ≤ w-1)}
For mỗi giao dịch Ts trong D
For mỗi ứng cử viên c: ei (x) ∈ C1 (ei (x) ∈ Ts + x)
c.count + +;
L1 = {c: {ei (x)} | (c ∈ C1) ∧ (c.count ≥ support).
Giai đoạn 2
For mỗi mục: ei (0) ∈ L1
{
C’2 = {{ei(0), ek(x)} | ek(x) ∈ L1((x ≠ 0) ∨ (x = 0 ∧ i For mỗi ứng cử viên c ∈ C’2 : {ei (0), ek (x)}
{ c.count + +;}
L'2 = {c: {ei (0), ek (x)} | (c ∈ C’2 ) ∧ (c.count ≥ min_sup)}
Sắp xếp L'2
Quét dữ liệu D và xây dựng CFP-Tree
Gọi CFPmine khai thác cây CFP-Tree để tạo ra tất cả các
tập phổ biến bắt đầu với ei (0)
Tạo ra các luật kết hợp từ tập phổ biến và sản xuất chúng.
Xóa CFP cây.
}

62

63

CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH THỬ NGHIỆM
3.1. Phát biểu bài toán
Giả định chúng ta có rất nhiều mặt hàng trong một siêu thị, ví dụ
như “bánh mì”, “sữa”,…(coi là tính chất hoặc trường). Khách hàng khi đi
siêu thị sẽ bỏ vào giỏ mua hàng của họ một số mặt hàng nào đó, và chúng ta
muốn tìm hiểu vào thời điểm nào thì các khách hàng thường mua các mặt
hàng nào đồng thời, thậm chí chúng ta không cần biết khách hàng cụ thể là
ai. Ví dụ như vào thời điểm là mùa đông thì các mặt hàng thiết yếu như chăn,
áo len, mũ len, túi sưởi… sẽ được mua thường xuyên hơn bên cạnh các mặt
hàng phục vụ nhu cầu hàng ngày. Hay vào mùa hè thì các sản phẩm tiêu dùng
như: quạt, điều hòa…sẽ được ưu tiên hơn các thời điểm khác. Từ các dữ liệu
thu được, các nhà quản lý rất cần có các thông tin thống kê, dự đoán sau:
Chu kỳ mua sắm theo thời gian, ví dụ: vào các ngày nghỉ, ngày
lễ sức mua tăng hơn các ngày khác. Thời gian vào tháng 6 năm 2014 có
World Cup thế giới, được truyền hình trên sóng vô tuyến nên sức mua TV sẽ
tăng.
Sức mua sắm của khách hàng theo nghề nghiệp, ví dụ: công ty,
cửa hàng, nhà máy xí nghiệp.
Sức mua sắm của khách hàng theo khu vực dân cư, ví dụ: địa
bàn thành phố, địa bàn nông thôn, khách hàng ngoại tỉnh.
Sự kết hợp của các mặt hàng khác nhau trong cùng một lần mua
hàng tại siêu thị, ví dụ như khi mua bánh mì thì thường mua nước ngọt.
Trên cơ sở đó, các nhà quản lý siêu thị sẽ có các phương án, kế
hoạch phù hợp như: Tuyển dụng, đào tạo nhân viên để đáp ứng nhu cầu của
khách hàng, phân công công việc hợp lý cho nhân viên, lên kế hoạch liên kết
hợp tác với các khách hàng, có kế hoạch cung ứng các loại mặt hàng phù hợp
với nhu cầu của khách hàng theo mức sống, địa bàn dân cư, theo chu kỳ thời

64

gian ví dụ: vào mùa hè thì các sản phẩm như nước uống, quạt, điều hòa sẽ
tăng.
3.2. Xây dựng chương trình
Muốn có được các thông tin trên, nhưng do dung lượng quá lớn, nên
dùng các phương pháp thống kê cổ điển thì sẽ không thể kết xuất ra được. Do
vậy cần dùng các kỹ thuật khai phá dữ liệu – sử dụng luật kết hợp.
Trong chương trình, em quan tâm đến các dữ liệu thuộc CSDL bán
hàng trong siêu thị với hơn một nghìn giao dịch diễn ra trong vòng một năm.
Sử dụng thuật toán ITARM tìm ra sự kết hợp giữa các mặt hàng khác nhau
trong các giao dịch của khách hàng khi đến siêu thị trong một khoảng thời
gian nào đó. Ví dụ như: vào mùa đông nếu khách hàng mua mũ len vào ngày
thứ nhất thì sẽ mua áo len vào ngày sau đó, hay như vào mùa hè nếu khách
hàng mua quạt vào ngày đầu tiên thì sẽ mua điều hoà vào hai ngày sau đó…
Đầu vào của chương trình là: cơ sở dữ liệu bán hàng trong vòng một
năm. Đầu ra là các luật kết hợp có dạng: X → Y thoả mãn:
- Độ hỗ trợ và độ tin cậy của luật phải lớn hơn bằng độ hỗ trợ và
độ tin cậy tối thiểu.
- Sự kiện X phải xảy ra trước sự kiện Y.
Chương trình xây dựng trên Visual Studio, CSDL sau giai đoạn tiền xử
lý được lưu trữ trong SQL Server. Cơ sở dữ liệu của bài toán: Bảng Cơ sở dữ
liệu bán hàng có cấu trúc như sau:
+ Id: mã của giao dịch
+ Item: các khoản mục trong giao dịch
+ Time: thời gian giao dịch xảy ra

65

Hình 3.1. Bảng cơ sở dữ liệu
Chương trình gồm hai phần chính như sau:
Phần 1: Tab “Tập phổ biến” sử dụng thuật toán CFPmine khai
thác cây CFPTree để tìm ra các tập phổ biến trong các giao dịch của cơ sở dữ
liệu.
Phần 2: Tab “Luật kết hợp” sử dụng thuật toán ITARM khai thác
dữ liệu chuỗi thời gian dựa trên thuật toán CFPmine. Kết quả của phần này là
các luật kết hợp được đưa ra trong một khoảng thời gian nào đó.
Chương trình có giao diện như sau: