LỜI NÓI ĐẦUSự phát triển của ngành công nghệ thông tin đã đem lại nhiều ứng dụng cho đờisống xã hội, quản lý kinh tế, khoa học kỹ thuật… trong đó các ứng dụng lưu trữ vàquản lý cơ sở dữ
Trang 1MỤC LỤC
Trang
LỜI NÓI ĐẦU 2
Chương I> Tổng quan về khai phá dữ liệu 3
1/ Mở đầu: 3
2/ Khai phá dữ liệu và quá trình phát hiện tri thức 3
3/ Một số phương pháp khai phá dữ liệu: 5
Chương II> Luật kết hợp 8
1/ Một số khái niệm cơ bản: 8
2/ Thuật toán tìm luật kết hợp Apriori: 9
3/ Ưu điểm và khuyết điểm của thuật toán Apriori: 11
4/ Một số thuật toán cải tiến thuật toán Apriori 11
4.1 Thuật toán AprioriTid 12
4.2 Thuật toán FP-growth 13
Chương III> Cài đặt thuật toán FP-growth tìm tập phổ biến và luật kết hợp 16
1/ Phát biểu bài toán 16
2/ Thiết kế cơ sở dữ liệu 17
3/ Giới thiệu một số đoạn mã chính viết bằng Java của chương trình 18
4/ Hướng dẫn sử dụng chương trình 35
4.1 Một số yêu cầu cài đặt cho việc chạy chương trình 35
4.2 Hướng dẫn chạy chương trình 35
Chương IV> Kết luận & Hướng phát triển đề tài 39
1/ Kết luận : 39
2/ Hướng phát triển đề tài: 39
TƯ LIỆU THAM KHẢO 40
TÀI LIỆU THAM KHẢO 41
Trang 2LỜI NÓI ĐẦU
Sự phát triển của ngành công nghệ thông tin đã đem lại nhiều ứng dụng cho đờisống xã hội, quản lý kinh tế, khoa học kỹ thuật… trong đó các ứng dụng lưu trữ vàquản lý cơ sở dữ liệu ngày càng mạnh giúp cho các cá nhân hay tổ chức có thể lưu trữmột lượng rất lớn dữ liệu Có thể thấy cơ sở dữ liệu(CSDL) của các hệ thống siêu thịchứa đến cả triệu các giao tác bán hàng, hay CSDL của các công ty chứng khoáncũng chứa đến vài chục triệu các giao dịch mua bán các loại cổ phiếu…
Đối với khối lượng dữ liệu lớn như thế, theo như đánh đáng của IMB, các phươngpháp khai thác thông tin truyền thống chỉ thu được khoảng 80% thông tin từ CSDL,phần còn lại bao gồm các thông tin mang tính khái quát, thông tin có tính quy luậtvẫn đang còn tiềm ẩn trong dữ liệu Lượng thông tin này tuy nhỏ nhưng là nhữngthông tin cốt lõi và cần thiết cho tiến trình ra quyết định Để đáp ứng được với kỳvọng này, các nhà nghiên cứu đã đưa ra kỹ thuật “phát hiện tri thức và khai phá dữliệu (KDD - Knowledge Discovery and Data Mining)” hỗ trợ tiến trình khám phá,phân tích tổng hợp thông tin
Trong phạm vi bài tiểu luận này, em sẽ trình bày một cách tổng quát về cơ sở lýthuyết của phương pháp khai phá dữ liệu tìm luật kết hợp, một số thuật toán ứng dụngtìm luật kết hợp như : thuật toán Apriori, AprioriTid, FP-growth và đồng thời trên cơ
sở lý thuyết đó em đã xây dựng một mô hình chung cho bài toán quản lý bán hàng tạicác siêu thị, ứng dụng thuật toán FP-growth để tìm ra các tập phổ biến, các luật kếthợp của các mặt hàng trong cơ sở dữ liêu, giúp cho nhà quản lý có được các quyếtđịnh kinh doanh tốt hơn
Nhân đây em cũng xin gửi lời cảm ơn chân thành đến thầy PGS.TS Đỗ Phúc,người đã tận tình giảng dạy và truyền đạt những kiến thức bổ ích trong lĩnh vực côngnghệ thông tin nói chung và bộ môn khai phá dữ liệu và kho dữ liệu nói riêng để giúp
em hoàn thành tốt bài luận này
Mặc dù đã rất nỗ lực, cố gắng nhưng do kiến thức và thời gian có phần hạn chế,chắc chắn sẽ có những thiếu sót và bổ sung thêm Rất mong sự cảm thông và góp ýcủa thầy
Thân mến,
Nguyễn Văn Sang
Trang 3Chương I> Tổng quan về khai phá dữ liệu
1/ Mở đầu:
Vào cuối những năm 1980 khái niệm khai phá dữ liệu (Data Mining) ra đời Nó
bao hàm một loạt các kỹ thuật nhằm phát hiện ra các thông tin có giá trị tiềm ẩn trongcác kho dữ liệu Về bản chất, khai phá dữ liệu liên quan đến việc phân tích các dữliệu và sử dụng các kỹ thuật để tìm ra các tri thức hữu dụng
Năm 1989, Fayyad, Piatestsky-Shapiro và Smyth đã dùng khái niệm “Phát hiện trithức” trong cơ sở dữ liệu (Knowledge Discovery in Database – KDD) để chỉ toàn bộquá trình phát hiện các tri thức hữu dụng từ các kho dữ liệu lớn Do đó khai phá dữliệu chỉ là một phần trong khái niệm “Phát hiện tri thức” ấy Tuy nhiên nó cũng chính
là một bước đặc biệt quan trọng trong toàn bộ quá trình, sử dụng các giải thuật đặctrưng để chiết xuất ra các giá trị tiềm ẩn từ kho dữ liệu
Hiện nay khai phá dữ liệu được ứng dụng vào rất nhiều lĩnh vực cụ thể khác nhaunhư: y tế, dầu khí, khí tượng, kinh doanh, y học, web mining, tin-sinh, tài chính và thịtrường chứng khoán, bảo hiểm
2/ Khai phá dữ liệu và quá trình phát hiện tri thức
2.1 Định nghĩa: Khai phá dữ liệu là một tập hợp các kỹ thuật được sử dụng
để tự động khai thác và tìm ra các mối quan hệ lẫn nhau của dữ liệu trong một tập hợp dữ liệu khổng lồ và phức tạp, đồng thời cũng tìm ra các mẫu tiềm ẩn trong tập dữ liệu đó.
Khai phá dữ liệu là một bước chủ chốt trong các bước của quá trình phát hiện
tri thức (Knowledge Discovery in Database – KDD)
2.2 Quá trình phát hiện tri thức:
Tri thức được rút ra có thể được dùng để :
• Giải thích dữ liệu nhằm cung cấp sự hiểu biết sâu sắc, thấu đáo những thông tin hữu ích giúp cho các doanh nghiệp hiểu rõ hơn những khách hàng của họ
• Dự báo khuynh hướng mua hàng của khách hàng, định hướng kinh doanh
…
Quá trình phát hiện tri thức là quá trình khám phá các tri thức mới và các tri thức hữa ích ở dạng tiềm năng trong nguồn dữ liệu đã có Các bước phát hiện tri thức như sau:
Trang 4a) Làm sạch dữ liệu (data cleaning): loại bỏ nhiễu hoặc các dữ liệu
không thích hợp
khác nhau như: CSDL, Kho dữ liệu, file text
tiếp đến nhiệm vụ sẽ được thu thập từ các nguồn dữ liệu ban đầu
về dạng phù hợp cho việc khai phá bằng cách thực hiện các thao tác nhóm hoặctập hợp
các phương pháp thông minh sẽ được áp dụng để trích xuất ra các mẫu dữ liệu
biểu diễn tri thức dựa vào một số phép đo
diễn và trực quan hoá dữ liệu để biểu diễn tri thức khai phá được cho người sửdụng
Hình 1 – Quá trình phát hiện tri thức từ cơ sở dữ liệu
3/ Một số phương pháp khai phá dữ liệu:
Trang 5a) Phương pháp qui nạp: Một cơ sở dữ liệu là một kho thông tin nhưng các
thông tin quan trọng hơn cũng có thể được suy diễn từ kho thông tin đó Cóhai kỹ thuật chính để thực hiện việc này là suy diễn và quy nạp
thông tin trong cơ sở dữ liệu Phương pháp suy diễn dựa trên các sự kiệnchính xác để suy ra các tri thức mới từ các thông tin cũ Mẫu chiết xuấtđược bằng cách sử dụng phương pháp này thường là các luật suy diễn
ra từ cơ sở dữ liệu Có nghĩa là nó tự tìm kiếm, tạo mẫu và sinh ra tri thức chứkhông phải bắt đầu với các tri thức đã biết trước Các thông tin mà phươngpháp này đem lại là các thông tin hay các tri thức cấp cao diễn tả về các đốitượng trong cơ sở dữ liệu Phương pháp này liên quan đến việc tìm kiếm cácmẫu trong CSDL Trong khai phá dữ liệu, quy nạp được sử dụng trong câyquyết định và tạo luật
b) Phương pháp cây quyết định và luật:
phân các đối tượng dữ liệu thành một số lớp nhất định Các nút của câyđược gán nhãn là tên các thuộc tính, các cạnh được gán các giá trị có thểcủa các thuộc tính, các lá mô tả các lớp khác nhau Các đối tượng đượcphân lớp theo các đường đi trên cây, qua các cạnh tương ứng với các giátrị, thuộc tính của đối tượng tới lá
nghĩa về mặt thống kê Các luật có dạng Nếu P thì Q, với P là mệnh đềđúng với một phần trong CSDL, Q là mệnh đề dự đoán
Cây quyết định và luật có ưu điểm là hình thức mô tả đơn giản, mô hìnhsuy diễn khá dễ hiểu đối với người sử dụng Tuy nhiên, giới hạn của nó là
mô tả cây và luật chỉ có thể biểu diễn được một số dạng chức năng và vìvậy giới hạn về cả độ chính xác của mô hình
c) Phương pháp mạng Neural:
Mạng Neuron là tiếp cận tính toán mới liên quan tới việc phát triển cấu trúctoán học và khả năng học Các phương pháp là kết quả của việc nghiên cứu môhình học của hệ thống thần kinh con người
Trang 6Mạng Neuron có thể đưa ra ý nghĩa từ các dữ liệu phức tạp hoặc không chínhxác và có thể được sử dụng để chiết xuất các mẫu và phát hiện ra các xu hướngquá phức tạp mà con người cũng như các kỹ thuật máy tính khác không thể pháthiện được Khi đề cập đến khai thác dữ liệu, người ta thường đề cập nhiều đếnmạng Neuron Tuy mạng Neuron có một số hạn chế gây khó khăn trong việc ápdụng và phát triển nhưng nó cũng có những ưu điểm đáng kể.
d) Phương pháp dùng giải thuật di truyền
Giải thuật di truyền, nói theo nghĩa rộng là mô phỏng lại hệ thống tiến hóatrong tự nhiên, chính xác hơn đó là giải thuật chỉ ra tập các cá thể được hìnhthành, được ước lựợng và biến đổi như thế nào? Ví dụ như xác định xem làm thếnào để lựa chọn các cá thể tạo giống và lựa chọn các cá thể nào sẽ bị loại bỏ Giảithuật cũng mô phỏng lại yếu tố gen trong nhiễm sắc thể sinh học trên máy tính để
có thể giải quyết nhiều bài toán thực tế khác nhau
Giải thuật di truyền là một giải thuật tối ưu hóa Nó được sử dụng rất rộng rãitrong việc tối ưu hóa các kỹ thuật khai phá dữ liệu trong đó có kỹ thuật mạngNeuron Sự liên hệ của nó với các quá trình khai phá dữ liệu Ví dụ như trong kỹthuật cây quyết định, tạo luật Như đã đề cập ở phần trước, các luật mô hình hóa
dữ liệu chứa các tham số được xác định bởi các giải thuật phát hiện tri thức
Giai đoạn tối ưu hóa là cần thiết để xác định xem các giá trị tham số nào tạo
ra các luật tốt nhất Và vì vậy mà giải thuật di truyền đã được sử dụng trong cáccông cụ khai phá dữ liệu
e) Phương pháp tìm luật kết hợp:
Phương pháp này nhằm phát hiện ra các luật kết hợp giữa các thành phần dữliệu trong cơ sở dữ liệu Mẫu đầu ra của giải thuật khai phá dữ liệu là tập luật kếthợp tìm được Ta có thể lấy một ví dụ đơn giản về luật kết hợp như sau: sự kếthợp giữa hai thành phần A và B có nghĩa là sự xuất hiện của A trong bản ghi kéotheo sự xuất hiện của B trong cùng bản ghi đó: A = > B
Việc phát triển một thuật toán phải phát hiện luật này trong cơ sở dữ liệu lớn làkhông khó Tuy nhiên, vấn đề là ở chỗ có thể có rất nhiều luật kiểu này hoặc là tachỉ biết một tập nhỏ dữ liệu trong cơ sở dữ liệu lớn thoả mãn tiền đề của luật Ví
dụ chỉ có số ít người mua sách tiếng anh mà mua thêm đĩa CD Số lượng các luậtkết hợp trong một số cơ sở dữ liệu lớn gần như vô hạn Do vậy thuật toán sẽkhông thể phát hiện hết các luật và không phân biệt được luật nào là thông tinthực sự có giá trị và thú vị
Trang 7Nhiệm vụ của việc phát hiện các luật kết hợp là phải tìm tất cả các luật dạng X
=> B sao cho tần số của luật không nhỏ hơn ngưỡng Minsup cho trước và độ tincậy của luật không nhỏ hơn ngưỡng Minconf cho trước Từ một cơ sở dữ liệu ta
có thể tìm được hàng nghìn và thậm chí hàng trăm nghìn các luật kết hợp
Trang 8Chương II> Luật kết hợp
1/ Một số khái niệm cơ bản:
Kí hiệu I = {i1, i2, …, im} là tập các thuộc tính được gọi là các mục dữ liệu D là
cơ sở dữ liệu của tập các giao tác, mỗi giao tác T là một tập mục con của tập mục I, Ti
I Mỗi giao tác Ti có một định danh duy nhất gọi là TID (TransactionIdentification) X={i1, i2,…,ik} I được gọi là một tập mục hay một tập k-mục nếu
nó chứa k mục Một giao tác T được gọi là chứa tập mục X chỉ khi X T Mỗi giaotác là một bộ <TID, I>, I là tập mục
Luật kết hợp là một mối liên hệ điều kiện giữa hai tập các hạng mục dữ liệu X và
Y theo dạng sau: Nếu X thì Y, và ký hiệu là X Y Ta có luật kết hợp X Y, nếu X
I, Y I và X Y = Chúng phụ thuộc vào 2 đại lượng cơ bản là độ hỗ trợ (S)
và độ tin cậy (C).
a) Độ hỗ trợ (Support): Độ hỗ trợ của một luật X Y là tỉ số phần trăm của
số giao tác trong D có chứa X Y Kí hiệu Supp(X=>Y).
Supp(X=>Y) thể hiện phạm vi ảnh hưởng của luật trên toàn bộ cơ sở dữ liệu.
Ngưỡng nhỏ nhất của độ hỗ trợ gọi là minsupp
Supp(X=>Y)= Card Card(X(D)Y)(%) 0 Supp(X Y) 1
Với:
Card(X Y): tập các giao tác trên CSDL có chứa cả vế trái lẫn vế phải.
Card(D): tập tất cả các dòng trên CSDL.
b)Độ tin cậy (Confidence): Độ tin cậy của một luật X Y là tỉ số phần trăm
của số giao tác trong D chứa X Y với số giao tác trong D có chứa tập mục X Kí hiệu Conf(X Y).
Conf(X Y) thể hiện tính chính xác, tính đúng đắn hay khả năng tin cậy của
luật trong phạm vi ảnh hưởng của luật (được xác định bởi Supp(X Y)) Ngưỡng nhỏ
nhất của độ tin cậy gọi là minconf
) (
) (
X Card
Y X Card
0 Conf(X Y) 1.
Với:
Trang 9Card(X Y): tập các giao tác trên CSDL có chứa cả vế trái lẫn vế phải.
Card(X): tổng số dòng chứa vế trái của luật trên CSDL.
c)Large ItemSet: Tập các hạng mục dữ liệu (ItemSet) có độ hỗ trợ (Supp) lớn
hơn hay bằng giá trị của ngưỡng nhỏ nhất (minsupp).
d)Small ItemSet : Tập các hạng mục dữ liệu (ItemSet) có độ hỗ trợ (Supp)
nhỏ hơn giá trị của ngưỡng nhỏ nhất (minsupp).
lệ phần trăm giữa Support của L so với Support của A lớn hơn hay bằng độ tin cậy
nhỏ nhất (minconf) thì ta có luật kết hợp A (L\A)
2/ Thuật toán tìm luật kết hợp Apriori:
a) Mô tả thuật toán:
Bước 1 : k:=1, tạo C1 = tập tất cả các itemsets có 1 phần tử từ tất cả các giao
Bước 3 : Tạo tập LargeItemSet = L1 v L2 v v Lk
Bước 4 : Tạo các luật hợp từ tập LargeItemSet :
for each itemset l của LargeItemSetfor each s (tập con khác rỗng) của l
if confidence=count(l)/count(s) >= minconf then
xuất kết quả : s -> (l-s)
Trang 10Minh họa thuật toán Apriori với minsup = 2, minconf = 50%
Giải thích ký hiệu :
+TID : chỉ số định danh các giao tác của một itemset
+ items : tập các mặt hàng
+ itemset : tập các mặt hàng ứng viên
+ sup : độ hỗ trợ tối thiểu
+ Ck tập các ứng viên với kích cỡ k được tạo ra bằng cách kết hợp Lk-1 vớichính nó
+Lk : tập phổ biến với kích cỡ k
Hình 2 – Minh họa các bước chạy thuật toán Apriori.
Qua minh họa khi chạy thuật toán Apriori như trên ta thấy, khi không còn tậpmục phổ biến nào được tìm thấy nữa thì thuật toán dừng lại và tập L3 là tập kết quảnhận được
b) Ứng dụng thực tế thuật toán Apiori vào hệ thống siêu thị:
Đầu tiên thực hiện duyệt tất cả các chi tiết hóa đơn, ta có được các giao dịch, 1giao dịch là một quan hệ một nhiều giữa mã hóa đơn và mã mặt hàng Do đó, chúng
ta sẽ thực hiện việc gom lại mối quan hệ một – nhiều này thành một giao dịch để sử
Trang 11dụng cho thuật toán Ở bước một của thuật toán ta đi tìm tập L1, tập mỗi mã hàngphải có độ hỗ trợ lớn hơn hoặc bằng độ hỗ trợ tối thiểu (Minsup) của người dùngnhập vào các tập mục còn lại của C1 là các tập 1-Itemset (L1) phổ biến Sau đó kết nối
L1 với L1 để được tập các tập 2-Itemset C2 Duyệt CSDL xác định độ hỗ trợ của các tậpmục trong C2 Duyệt C2 Loại bỏ các tập mục có độ hỗ trợ < Minsup, các tập mục còn lạicủa C2 là tập các tập 2-Itemset (L2) phổ biến L2 lại được sử dụng để sinh ra L3 và cứ tiếptục như vậy cho đến khi tìm được tập mục k-Itemset mà Lk = (tức là không có tậpmục phổ biến nào được tìm thấy) thì dừng lại Tập các tập mục phổ biến của CSDL là:
ki-1= L1
Để tăng hiệu quả của thuật toán trong quá trình sinh các tập mục ứng cử, ta sửdụng tính chất của tập mục phổ biến để làm giảm số lượng tập các tập ứng cử, khôngphải là tập phổ biến được sinh ra Tính chất đó là: Tập các tập con khác rỗng của tậpmục phổ biến đều là tập mục phổ biến
3/ Ưu điểm và khuyết điểm của thuật toán Apriori:
Thuật toán kinh điển Apriori tìm tập mục phổ biến thực hiện tốt bởi rút gọn kíchthước các tập ứng cử nhờ kỹ thuật tỉa Tuy nhiên, trong tình huống mà số các giao tácnhiều, hoặc với độ hỗ trợ cực tiểu thấp (min supp), các thuật toán Apriori gặp phải 2vấn đề làm ảnh hưởng tới tốc độ :
a) Vấn đề khi số lượng các tập ứng cử cực lớn có thể xảy ra tình trạng “nghẽn
cổ chai”, thuật toán sẽ phải thực hiện rất lâu khi có nhiều mặt hàng vì nó phải tạo ratập ứng cử ngày càng nhiều Ví dụ: nếu có 104 tập phổ biến có 1 phần tử thì thuật toánApriori sẽ phải tạo ra 107 các tập ứng cử 2 phần tử Đặt biệt cùng với min supp càngnhỏ thì thuật toán lại càng chạy lâu hơn nữa và trở nên không khả thi
b) Vấn đề thứ hai liên quan đến việc phải truy suất xuống cơ sở dữ liệu nhiềulần để kiểm tra tập rất lớn các ứng cử thỏa độ hỗ trợ tối thiểu Số lần duyệt CSDL củathuật toán Apriori bằng độ dài của mẫu phổ biến dài nhất tìm được Việc này làm ảnhhưởng tới hiệu suất máy tính vì phải tốn chi phí cho vấn đề truy xuất phần cứng máy(I/O) Như vậy, thuật toán Apriori chỉ thích hợp cho các CSDL nhỏ, với các CSDLlớn thì thuật toán thực hiện kém hiệu quả
4/ Một số thuật toán cải tiến thuật toán Apriori.
Có thể sử dụng một số thuật toán để cái tiến thuật toán Apriori như thuật toánAprioriTid, AprioriHybrid, FP-growth, , Sau đây em xin trình bày hai thuật toán đó
là AprioriTid và thuật toán FP-growth
Trang 124.1 Thuật toán AprioriTid
Khác với thuật toán Apriori, thuật toán AprioriTid chỉ quét cơ sở dữ liệu
một lần, do đó tập ứng viên Ck kích cỡ k có thể nhỏ hơn cơ sở dữ liệu Nếu
một giao tác không chứa k – itemset ứng viên, khi đó nó sẽ được loại ra khỏi
tập Ck Với k có kích cỡ lớn, mỗi tập mục có thể nhỏ hơn một giao tác Giao
tác có thể chỉ chứa một vài ứng viên Một tập mục bao gồm tất cả các k –
itemset chứa trong giao tác Tuy nhiên thuật toán này có một điểm bất lợi là
khi kích cỡ k nhỏ, mỗi tập mục có thể lớn hơn số giao tác tương ứng
Trình bày thuật toán AprioriTid:
Giải thích ký hiệu :
C^k : tập mục lưu trữ, mỗi thành viên của C^k có dạng <TID, { X k }, với
X k là tập k-itemset, thể hiện một giao tác t có mã là TID
k k
k k
t
^ t
t
k t
^ k-1
^
k
k-k-1
^ 1
; L Answer
minsup}
|c.count C
{ c L
; t.TID,C
C then φ)
(C c.count
C
c
items}; of
t.set 1])
c[k (c
items of
t.set c[k]
|(c C {c
C
C entries t
; C
) (L C
)
; k 2; L
( k
; database D C
itemsets}
{large L
forall
begin do
forall
; gen
apriori-begin do
For
1 1
Đánh giá tốc độ của thuật toán Apriori và AprioriTid
Để đánh giá về tốc độ của thuật toán Apriori và AprioriTid, chúng em lấy
kết quả từ một dự án Quest của trung tâm nghiên cứu IBM Almaden Kết quả
được thực hiện trên tập dữ liệu đầu vào :
Kích thước trung bình của các giao tác là 10
Kích thước trung bình của tập phổ biến tối đại là 4
Số giao tác là 100.000
Độ hỗ trợ tối thiểu là 0.75%
Trang 13Hình 3 – Sơ đồ so sánh Apriori và AprioriTid
Kết quả cho thấy ở giai đoạn đầu Apriori hiệu quả hơn AprioriTid về mặt thời gian, tuy nhiên AprioriTid nhanh hơn Apriori ở những giai đoạn sau Lý
do ở những giai đoạn sau, thuật toán AprioriTid chỉ cần quét các tập ứng viên
k
C đã cố định trong bộ nhớ do nó tạo ra; trong khi thuật toán Apriori phải thực hiện lại việc quét xuống cơ sở dữ liệu
4.2 Thuật toán FP-growth
FP-growth là thuật toán khai thác các tập phổ biến từ cây FP-Tree màkhông tạo ra các tập ứng viên phổ biến FP-Tree là một mở rộng của cấu trúccây tiền tố Chỉ những phần tử phổ biến được lưu trên cây Mỗi nút chứa nhãncủa phần tử cùng với tần số của nó Đường dẫn từ nút gốc tới các nút lá đượcsắp xếp theo giá trị độ hỗ trợ của các phần tử với tần số của mỗi nút cha lớnhơn hay bằng tổng của các tần số của nút con của nó Cấu trúc của FP-Treeyêu cầu 2 lần quét cơ sở dữ liệu Trong quét đầu tiên, giá trị hỗ trợ của mỗiphần tử được tìm thấy Các giá trị hỗ trợ tìm thấy này được dùng cho lần quétthứ 2 để sắp xếp các phần tử trong các giao tác theo thứ tự giảm dần Nếu 2giao tác chia sẻ một tiền tố chung, phần chia sẽ được gộp và các tần số của nútđược tăng lên.Các nút có cùng nhãn được kết nối với một phần tử liên kết.Phần tử liên kết được dùng để giảm nhẹ việc khai thác mẫu phổ biến Thêmvào đó, mỗi FP-Tree có một header chứa tất cả các phần tử phổ biến và cáccon trỏ tới phần đầu của các liên kết phần tử ngữ cảnh của chúng FP-growthphân vùng cây FP-Tree dựa trên các tiền tố FP-growth duyệt các đường dẫncủa FP-Tree một cách đệ quy để tạo các tập ứng viên phổ biến Các mẫu phổbiến được kết nối để đảm bảo tất cả các tập phổ biến được tạo ra một cách hợp
lý Vì thế FP-growth tránh được các phép toán tốn kém cho việc tạo và kiểmtra các tập ứng viên Có thể tóm tắt thuật toán FP-growth làm như sau:
- Khai thác tập phổ biến không sử dụng hàm tạo ứng viên
Trang 14- Nén CSDL thành cấu trúc cây FP (Frequent Patern)
- Duyệt đệ qui cây FP để tạo tập phổ biến
Trình bày thuật toán FP-growth:
• Xây dựng cây FP-Tree từ CSDL giao tác
2 Tạo nút gốc R và gán nhãn “null”
Tạo bảng Header có |F| dòng và đặt tất cả các node –link chỉ đến null
3 For each giao tác T D { // Duyệt D lần 2
Chọn các item phổ biến của T đưa vào P;
Sắp các item trong P theo trật tự L;
Call Insert_Tree(P, R); }Procedure Insert_Tree(P, R) {
1 Đặt P=[p|P-p] , với p là phần tử đầu tiên và P-p là phần còn lại củadanh sách
2 if R có một con N sao cho N.item-name = p then
Trang 1514 Call Insert_Tree(P-p, N) ;}
Trang 16Chương III> Cài đặt thuật toán FP-growth tìm tập phổ biến và luật kết hợp
1/ Phát biểu bài toán
Ngày nay trong các hệ thống siêu thị đều thấy kinh doanh ngày càng nhiều mặthàng, người ta có phần mềm ghi lại thông tin hóa đơn của khác hàng, thậm chí lưu
cả thông tin khách hàng khi hệ thống hỗ trợ khách hàng đặt hàng mua qua mạng,
…, những việc này giúp cho doanh nghiệp có thể quản lý mặt hàng, quản lý cáchóa đơn, thống kê lợi nhuận,…Bài viết này xây dựng một mô hình chung quản lýđược các giao dịch và cũng đồng thời xây dựng một chương trình phần mềm tìm
ra các tập mặt hàng phổ biến, các luật kết hợp có được từ cơ sở dữ liệu nhằm hỗtrợ đắc lực cho nhà đầu tư có thêm một công cụ để ra quyết định trong kinhdoanh một cách hiệu quả
Trên cơ cở tìm hiểu một số thuật toán tìm tập phổ biến và luật kết hợp,với sựhiểu biết của mình, bài viết này quyết định chọn và hiện thực thuật toán FP-growth để tìm tập phổ biến và luật kết hợp trong cơ sở dữ liệu
Trang 172/ Thiết kế cơ sở dữ liệu
2.1 Lược đồ quan hệ giữa các bảng
Hình 4 – Sơ đồ mối quan hệ giữa các bảng.
Tổng quan về sơ đồ mối quan hệ giữa các bảng :
Mối quan hệ giữa bảng khách hàng và hóa đơn là một nhiều, ngược lại bảng hóađơn với khách hàng là nhiều một Vì mối quan hệ giữa bảng hóa đơn và mặt hàng lànhiều – nhiều, nên ta thiết kế thêm một bảng cho dễ quản lý là bảng chi tiết hóa đơn,đưa về mối quan hệ một nhiều giữa bảng hóa đơn và chi tiết hóa đơn, và một nhiềugiữa bảng mặt hàng và chi tiết hóa đơn Thông tin các cột của bác bảng :
InvoiceDetailid :
bigintinvId : bigintproId: bigintquantity: int
ProductproId :
bigintname : nvarchar
providerId: varchar
description : nvarchar
1…n 1
1…n 1
1 1…n
Trang 18 phone: số điện thoại bàn
mobile: số điện thoại di động
email: địa chỉ email
street: đường phố
code: mã quốc gia
city: thành phố
state: tỉnh
country: quốc gia
description: mô tả thêm
Invoice (Hóa đơn) :
invId: mã hóa đơn
cusId: mã khách hàng
date: ngày hóa đơn
InvoiceDetail (Chi tiết hóa đơn)
id : mã chi tiết hóa đơn
invId: mã hóa đơn
3/ Giới thiệu một số đoạn mã chính viết bằng Java của chương trình
Lớp : FPGrowthAlgo_AssRules, thực hiện xây dựng thuật toán tạo luật kết
Trang 19import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class FPGrowthAlgo_AssRules {
private Itemsets patterns;
BufferedWriter writer = null;
long startTimestamp = 0;
long endTimeStamp = 0;
private double minconf;
private int ruleCount = 0;
private int databaseSize = 0;
private double minlift;
private boolean usingLift = true;
public FPGrowthAlgo_AssRules(double minconf) {
Trang 20this.patterns = patterns;
this.databaseSize = databaseSize;
//writer = new BufferedWriter(new FileWriter(output));
// For each frequent itemset of size >=2
for (int k = 2; k < patterns.getLevels().size(); k++) {
for (Itemset lk : patterns.getLevels().get(k)) {
// create H1
Set<Itemset> H1 = new HashSet<Itemset>();
for (Itemset itemsetSize1 : patterns.getLevels().get(1)) {
calculateSupport(itemset_Lk_minus_hm_P_1);
double conf = ((double) lk.getAbsoluteSupport())
/ ((double)itemset_Lk_minus_hm_P_1.getAbsoluteSupport());