Tải bản đầy đủ (.docx) (24 trang)

MỘT SỐ THUẬT TOÁN SINH LUẬT KẾT HỢP

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (732.9 KB, 24 trang )

MỤC LỤC
CHƯƠNG I. GIỚI THIỆU
Sự phát triển của công nghệ thông tin và việc ứng dụng công nghệ thông tin trong nhiều
lĩnh vực của đời sống, kinh tế xã hội trong nhiều năm qua cũng đồng nghĩa với lượng dữ
liệu đã được các cơ quan thu thập và lưu trữ ngày một tích luỹ nhiều lên, họ lưu trữ các
dữ liệu này vì cho rằng trong nó ẩn chứa những giá trị nhất định nào đó. Tuy nhiên, theo
thống kê thì chỉ có một lượng nhỏ của những dữ liệu này (khoảng từ 5% đến 10%) là
luôn được phân tích, số còn lại họ không biết sẽ phải làm gì hoặc có thể làm gì với chúng
nhưng họ vẫn tiếp tục thu thập rất tốn kém với ý nghĩ lo sợ rằng sẽ có cái gì đó quan
trọng đã bị bỏ qua sau này có lúc cần đến nó. Mặt khác, trong môi trường cạnh tranh,
người ta ngày càng cần có nhiều thông tin với tốc độ nhanh để trợ giúp việc ra quyết định
và ngày càng có nhiều câu hỏi mang tính chất định tính cần phải trả lời dựa trên một khối
lượng dữ liệu khổng lồ đã có. Với những lý do như vậy, các phương pháp quản trị và khai
thác dữ liệu truyền thống ngày càng không đáp ứng được thực tế đã làm phát triển một
khuynh hướng kỹ thuật mới đó là kỹ thuật phát hiện tri thức và khai phá dữ liệu (KDD -
Knowledge Discovery and Data Mining)
Kỹ thuật phát hiện tri thức và khai phá dữ liệu đã và đang được nghiên cứu, ứng dụng
trong nhiều lĩnh vực khác nhau ở các nước trên thế giới, tại Việt Nam kỹ thuật này tương
đối còn mới mẻ tuy nhiên cũng đang được nghiên cứu và dần đưa vào ứng dụng. Bước
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 1
quan trọng nhất của quá trình này là Khai phá dữ liệu (Data Mining - DM), giúp người sử
dụng thu được những tri thức hữu ích từ những CSDL hoặc các nguồn dữ liệu khổng lồ
khác, rất nhiều doanh nghiệp và tổ chức trên thế giới đã ứng dụng kỹ thuật khai phá dữ
liệu vào hoạt động sản xuất kinh doanh của mình và đã thu được những lợi ích to lớn.
Nhưng để làm được điều đó sự phát triển của các mô hình toán học và các giải thuật hiệu
quả là chìa khoá quan trọng vì vậy trong phần tiểu luận này, tác giả sẽ đề cập tới kỹ thuật
thường dùng trong khai phá dữ liệu để phân tích dự đoán trong khai thác dữ liệu chứng
khoán trợ giúp nhà đầu tư ra quyết định.
CHƯƠNG II. TỔNG QUAN PHÁT HIỆN TRI THỨC VÀ KHAI
PHÁ DỮ LIỆU
Trong những năm gần đây, sự phát triển mạnh mẽ của CNTT và ngành công nghiệp phần


cứng đã làm cho khả năng thu thập và lưu trữ thông tin của các hệ thống thông tin tăng
nhanh một cách chóng mặt. Bên cạnh đó việc tin học hoá một cách ồ ạt và nhanh chóng
các hoạt động sản xuất, kinh doanh cũng như nhiều lĩnh vực hoạt động khác đã tạo ra cho
chúng ta một lượng dữ liệu lưu trữ khổng lồ hàng triệu CSDL đã được sử dụng trong các
hoạt động sản xuất, kinh doanh, quản lí , trong đó có nhiều CSDL cực lớn cỡ Gigabyte,
thậm chí là Terabyte. Sự bùng nổ này đã dẫn tới một yêu cầu cấp thiết là cần có những kỹ
thuật và công cụ mới để tự động chuyển đổi lượng dữ liệu khổng lồ kia thành các tri thức
có ích từ đó các kỹ thuật khai phá dữ liệu đã trở thành một lĩnh vực thời sự của nền
CNTT thế giới hiện nay.
II.1. Khái niệm khai phá dữ liệu
Khai phá dữ liệu (Data Mining) là một khái niệm ra đời vào những năm cuối của thập kỷ
1980 nó là quá trình trích xuất các thông tin có giá trị tiềm ẩn bên trong lượng lớn dữ liệu
được lưu trữ trong các CSDL, kho dữ liệu Hiện nay, ngoài thuật ngữ khai phá dữ liệu,
người ta còn dùng một số thuật ngữ khác có ý nghĩa tương tự như: khai phá tri thức từ
CSDL, trích lọc dữ liệu, phân tích dữ liệu/mẫu, khảo cổ dữ liệu, nạo vét dữ liệu, nhiều
người coi khai phá dữ liệu và một thuật ngữ thông dụng khác là phát hiện tri thức trong
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 2
In
t
e
r
n
e
t
,
.
.
.
Dữ liệu đã chuyển đổi
Trích lọc dữ liệu

CSDL (Knowlegde Discovery in Databases - KDD) là như nhau tuy nhiên trên thực tế,
khai phá dữ liệu chỉ là một bước thiết yếu trong quá trình phát hiện tri thức trong CSDL.
Có thể nói Data Mining là giai đoạn quan trọng nhất trong tiến trình phát hiện tri thức từ
cơ sở dữ liệu, các tri thức này hỗ trợ trong việc ra quyết định trong khoa học và kinh
doanh, quá trình phát hiện tri thức tiến hành qua 6 giai đoạn như sau hình 1.1:
Hình 1.1 quá trình phát hiện tri thức
II.2. Luật kết hợp trong khai phá dữ liệu
Mục tiêu chính của khai phá dữ liệu (KPDL) là lấy được những thông tin hữu ích từ
lượng dữ liệu khổng lồ các bước chính của quá trình KPDL bao gồm:
Gom dữ liệu (Gathering): tập hợp dữ liệu là bước đầu tiên trong quá trình KPDL đây là
bước được khai thác trong một CSDL, một kho dữ liệu và thậm chí các dữ liệu từ các
nguồn ứng dụng Web.
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 3
Trích lọc dữ liệu (Selection): ở giai đoạn này dữ liệu được lựa chon hoặc phân chia theo
một số tiêu chuẩn nào đó, ví dụ chon tất cả những người có tuổi đời từ hai lăm đến ba
lăm và có trình độ đại học.
Làm sạch, tiền xử lý và chuẩn bị trước dữ liệu (Cleansing, Pre-processing and
Preparation): giai đoạn thứ ba này là giai đoạn hay bị sao lãng, nhưng thực tế nó là một
bước rất quan trọng trong quá trình KPDL một số lỗi thường mắc phải trong khi gom dữ
liệu là tính không đủ chặt chẽ, logic, vì vậy dữ liệu thường chứa các giá trị vô nghĩa và
không có khả năng kết nối dữ liệu, bởi vậy đây là một quá trình rất quan trọng vì dữ liệu
này nếu không được “làm sạch – tiền xử lý - chuẩn bị trước” thì sẽ gây nên những kết
quả sai lệch nghiêm trọng.
Chuyển đổi dữ liệu (Transformation): tiếp theo là giai đoạn chuyển đổi dữ liệu, dữ liệu
đưa ra có thể sữ dụng và điều khiển được bởi việc tổ chức lại nó dữ liệu đã được chuyển
đổi phù hợp với mục đích khai thác.
Phát hiện và trích mẫu dữ liệu (Pattern Extraction and Discovery): đây là bước mang tính
tư duy trong KPDL ở giai đoạn này nhiều thuật toán khác nhau đã được sử dụng để trích
ra các mẫu từ dữ liệu thuật toán thường dùng là nguyên tắc phân loại, nguyên tắc kết hợp
hoặc các mô hình dữ liệu tuần tự.

Đánh giá kết quả mẫu (Evaluation of Result): đây là giai đoạn cuối trong quá trình KPDL
ở giai đoạn này các mẫu dữ liệu được chiết xuất ra bởi phần mềm KPDL không phải bất
cứ mẫu dữ liệu nào cũng đều hữu ích, đôi khi nó còn bị sai lệch vì vậy cần phải ưu tiên
những tiêu chuẩn đánh giá để chiết xuất ra các tri thức cần chiết xuất ra.
Đây là một quá trình mang tính định tính với mục đích xác định được lĩnh vực yêu cầu
phát hiện tri thức và xây dựng bài toán tổng kết những nhiệm vụ cơ bản nhất của khai phá
dữ liệu là: phân cụm, phân loại, phân nhóm, phân lớp; khai phá luật kết hợp; lập mô hình
dữ báo; phân tích đối tượng ngoài cuộc; phân tích sự tiến hóa.
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 4
Các tồn tại cần phải giải quyết trong KPDL là lượng dữ liệu lớn; kích thước lớn; dữ liệu
động; các trường dữ liệu không phù hợp; các giá trị bị thiếu; các trường dữ liệu bị thiếu;
khả năng biểu đạt mẫu sự tương tác với người sử dụng các tri thức sẳn có. Một trong
những hướng tiếp cận hiệu quả là sử dụng luật kết hợp (association rules) đây là dạng
luật biểu diễn tri thức ở dạng khá đơn giản 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 CSDL mẫu đầu ra của giải thuật KPDL là tập
luật kết hợp.
II.3. Các kỹ thuật khai phá dữ liệu
Hình 1.2 biểu diễn một tập dữ liệu giả hai chiều bao gồm 23 trường hợp mỗi một điểm
trên hình đại diện cho một người vay tiền ngân hàng tại một số thời điểm trong quá khứ
dữ liệu được phân loại vào hai lớp: những người không có khả năng trả nợ và những
người tình trạng vay nợ đang ở trạng thái tốt (tức là tại thời điểm đó có khả năng trả nợ
ngân hàng).
Hai mục đích chính của khai phá dữ liệu trong thực tế là dự báo và mô tả.






Thu nhËp


Kh«ng cã kh¶
n¨ng tr¶ nî
Cã kh¶ n¨ng
tr¶ nî
Hình 1.2: Tập dữ liệu với 2 lớp: có và không có khả năng trả nợ
II.3.1 Khai phá dữ liệu dự đoán
Nhiệm vụ của khai phá dữ liệu dự đoán là đưa ra các dự đoán dựa vào các suy diễn trên
dữ liệu hiện thời, nó sử dụng các biến hay các trường trong cơ sở dữ liệu để dự đoán các
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 5
giá trị không biết hay các giá trị tương lai bao gồm các kỹ thuật phân loại (classification),
hồi quy (regression).
Phân loại
Mục tiêu của phương pháp phân loại dữ liệu là dự đoán nhãn lớp cho các mẫu dữ liệu,
quá trình phân loại dữ liệu thường gồm hai bước xây dựng mô hình và sử dụng mô hình
để phân loại dữ liệu.
Bước 1: Xây dựng mô hình dựa trên việc phân tích các mẫu dữ liệu cho trước mỗi mẫu
thuộc về một lớp, được xác định bởi một thuộc tính gọi là thuộc tính lớp các mẫu dữ liệu
này còn được gọi là tập dữ liệu huấn luyện. Các nhãn lớp của tập dữ liệu huấn luyện đều
phải được xác định trước khi xây dựng mô hình, vì vậy phương pháp này còn được gọi là
học có giám sát.
Bước 2: Sử dụng mô hình để phân loại dữ liệu trước hết chúng ta phải tính độ chính xác
của mô hình nếu độ chính xác là chấp nhận được, mô hình sẽ được sử dụng để dự đoán
nhãn lớp cho các mẫu dữ liệu khác trong tương lai.
Hay nói cách khác, phân loại là học một hàm ánh xạ một mục dữ liệu vào một trong số
các lớp cho trước. Hình 1.3 cho thấy sự phân loại của các dữ liệu vay nợ vào trong hai
miền lớp ngân hàng có thể sử dụng các miền phân loại để tự động quyết định liệu những
người vay nợ trong tương lai có nên cho vay hay không.




Thu nhËp



Hình 1.3: Phân loại được học bằng
mạng nơron cho tập dữ liệu cho vay
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 6
Hồi quy
Phương pháp hồi quy khác với phân loại dữ liệu ở chỗ, hồi quy dùng để dự đoán về các
giá trị liên tục còn phân loại dữ liệu thì chỉ dùng để dự đoán về các giá trị rời rạc, hồi quy
là học một hàm ánh xạ một mục dữ liệu vào một biến dự báo giá trị thực, các ứng dụng
hồi quy có nhiều, ví dụ như đánh giá xác xuất một bệnh nhân sẽ chết dựa trên tập kết quả
xét nghiệm chẩn đoán, dự báo nhu cầu của người tiêu dùng đối với một sản phẩn mới dựa
trên hoạt động quảng cáo tiêu dùng.
II.3.2 Khai phá dữ liệu mô tả
Kỹ thuật này có nhiệm vụ mô tả về các tính chất hoặc các đặc tính chung của dữ liệu
trong CSDL hiện có. Bao gồm các kỹ thuật: phân cụm (clustering), phân tích luật kết hợp
(association rules)
Phân cụm
Mục tiêu chính của phương pháp phân cụm dữ liệu là nhóm các đối tượng tương tự nhau
trong tập dữ liệu vào các cụm sao cho các đối tượng thuộc cùng một cụm là tương đồng
còn các đối tượng thuộc các cụm khác nhau sẽ không tương đồng phân cụm dữ liệu là
một ví dụ của phương pháp học không giám sát không giống như phân loại dữ liệu, phân
cụm dữ liệu không đòi hỏi phải định nghĩa trước các mẫu dữ liệu huấn luyện. Vì thế, có
thể coi phân cụm dữ liệu là một cách học bằng quan sát (learning by observation), trong
khi phân loại dữ liệu là học bằng ví dụ (learning by example). Trong phương pháp này
bạn sẽ không thể biết kết quả các cụm thu được sẽ như thế nào khi bắt đầu quá trình vì
vậy, thông thường cần có một chuyên gia về lĩnh vực đó để đánh giá các cụm thu được.
Phân cụm dữ liệu được sử dụng nhiều trong các ứng dụng về phân đoạn thị trường, phân

đoạn khách hàng, nhận dạng mẫu, phân loại trang Web… ngoài ra phân cụm dữ liệu còn
có thể được sử dụng như một bước tiền xử lí cho các thuật toán khai phá dữ liệu khác.
Hình 1.4 cho thấy sự phân cụm tập dữ liệu cho vay vào trong 3 cụm: lưu ý rằng các cụm
chồng lên nhau cho phép các điểm dữ liệu thuộc về nhiều hơn một cụm.
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 7


Thu nhËp

Côm
1

Côm
2

Côm
3

Hình 1.4: Phân cụm tập dữ liệu cho vay vào trong 3 cụm
Luật kết hợp
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 CSDL, mẫu đầu ra của giải thuật khai phá dữ liệu là tập luật kết hợp tìm được,
khai phá luật kết hợp được thực hiện qua 2 bước:
Bước 1: tìm tất cả các tập mục phổ biến, một tập mục phổ biến được xác định qua tính
độ hỗ trợ và thỏa mãn độ hỗ trợ cực tiểu.
Bước 2: sinh ra các luật kết hợp mạnh từ tập mục phổ biến, các luật phải thỏa mãn độ hỗ
trợ cực tiểu và độ tin cậy cực tiểu.
Bài toán luật kết hợp
Khái niệm: cho một tập I = {I1, I2 ,Im} các tập m mục, một giao dịch T được định nghĩa
như một tập con của các khoản mục trong I (T I).

Gọi D là co sở dữ liệu của n giao dịch và mỗi giao dịch được đánh nhãn với một định
danh duy nhất một giao dịch TD hỗ trợ một tập XI nếu nó chưa tất cả các item của X.
Bài toán 1: Tìm tất cả các tập mục mà có độ hỗ trợ lớn hơn độ hỗ trợ tối thiểu do người
dùng xác định, các tập mục thỏa mãn độ hỗ trợ tối thiểu được gọi là các tập mục phổ
biến.
Bài toán 2: Dùng các tập mục phổ biến để sinh ra các luật mong muốn
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 8
Quy trình khai thác luật kết hợp
Bước một: Tìm tất cả các tập phổ biến (theo ngưỡng minsup)
Bước hai: Tao ra các luật từ các tập phổ biến đối với mỗi tập phổ biến S, tạo ra tất cả các
tập con khác rỗng của S. Đối với mỗi tập con khác rỗng A của S thì luật A=>(S-A) là luật
kết hợp cần tìm nếu: conf(A=>(S-A))=sup(S)/sup(A)≥minconf
Một số tinh chất liên quan đến các hạng mục phổ biến
Tính chất 1: Độ hỗ trợ của tập con với A và B là tập các mục nếu AB thì sup(A)≥ sup(B).
Điều này là rõ ràng vì tất cả giao tác của D hỗ trợ B thì cũng hỗ trợ A.
Tính chất 2: Một tập chứa một tập không phổ biến thì cũng là tập không phổ biến. Nếu
một mục trong B không có độ hỗ trợ tối thiểu trên D nghĩa là sup(B)<minsup thì một tập
con A của B sẽ không phải là một tập phổ biến vì support(B)≤support(A)<minsup (theo
tính chất 1).
Tính chất 3: Các tập con của tập phổ biến cũng là tập phổ biến, nếu mục B là mục phổ
biến trên D, nghĩa là support(B)≥minsup thì mọi tập con A của B là tập phổ biến trên D
vì support(A)support(B)>minsup.
Phát hiện luật kết hợp trên hệ thống nhị phân: Độ hỗ trợ các vecto chỉ báo nhị phân cho
x1D, độ hỗ trợ của vB(X1) biểu diễn supB(vB(X1)) được định nghĩa:
Dễ thấy rằng: card(supB(vBX1))) = card(rB(X1))
Tính card(rB(S)) (lực lượng của tập hợp) cho S= {s1, s2,…,sk} là tập con của D. Trong
đó sj là bọ chỉ báo của SB, j=1k mỗi sj tương ứng với vecto chỉ báo nhị phân vB({sj})
các yếu tố của ρB(S) được tính bằng: card(ρB(S))= card(supB(vB{s1}) …
supB(vB{sk})).
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 9

Phương pháp này được sử dụng rất hiệu quả trong các lĩnh vực như marketing có chủ
đích, phân tích quyết định, quản lý kinh doanh….
CHƯƠNG III. MỘT SỐ THUẬT TOÁN SINH LUẬT
KẾT HỢP
III.1. Thuật toán AIS
Thuật toán do Agrwal đề nghị năm 1993. Thuật toán này chú trọng khai phá luật kết hợp
có dạng X->Y, với Y là tập hợp chỉ bao gồm một tính chất (tập hợp một phần tử) thuật
toán tìm cách xây dựng dần dần các tập ứng cử viên cho tập mục phổ biến, với cách đánh
số thứ tự tự điển cho từng tính chất, việc bổ sung phần tử cho tập ứng cử viên tránh được
trùng lặp, do vậy tiết kiệm tối đa thời gian tính toán.
Thuật toán
Input: CSDL D, minsup
Output: các tập mục phổ biến
L
1
= {các tập mục phổ biến};
for (k=2; luật kết hợp
k-1
# 0; k++) do begin
C
k
=0;
forall các giao dịch t D do begin
L
t
= Subset(L
k-1,
t); // các tập mục phổ biến thuộc L
k-1
chứa trong giao dịch t

forall các tập mục phổ biến l
t
L
t
B do begin
C
t
= tang thêm một mục có trong giao dịch t;
forall các ứng cử viên c C
t
do
if(c C
k
) then
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 10
add tăng biến đếm của c thêm 1 cho mục tương ứng của C
k
else add c và C
k
và tang biến đếm tương ứng thêm 1;
End
L
k
= {c C
k
|c.count minsup}
End
Trả lời =
k
L

k
;
III.2. Thuật toán SETM
Thuật toán do Houtsma đề nghị năm 1995. Thuật toán này cũng sử dụng kỹ thuật bổ sung
dần dần từng phần tử (từ tập hợp 1 phần tử) nhằm tìm kiếm các tập hợp ứng cử viên một
cải tiến đáng kể là thuật toán đề nghị lưu lại cả ID của giao dịch cùng với tập hợp ứng cử
viên. Agrwal đã chỉ ra thuật toán này không những không có phương án quản lý bộ nhớ
mà nó còn giả định nhét toàn bộ tập hợp ứng cử viên của bước trước vào bộ nhớ để bước
sau tiền bề sử dụng.
Thuật toán
Input: CSDL D, minsup
Output: Các tập mục phổ biến
L
1
= {các tập mục phổ biển};
L

1
= {các tập mục phổ biến cùng các TID của nó được sắp xếp theo TID};
for (k=2; luật kết hợp
k-1
# 0; k++) do begin
C
k
=0;
forall các giao dịch t D do begin
L
t
= (l L


k-1
|l.TID =t.TID); // các tập có (k-1) mục phổ biến trong giao dịch t
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 11
forall các tập mục phổ biến l
t
l
t
do begin
C
t
= tăng l
t
thêm một mục có trong giao dịch t; // các ứng cử viên có trong t
C

k
+={<t.TID, c>|cC
t
};
End
End
Sort C

k
theo các tập mục;
Delete các mục c C

k
có c.count<minsup đưa vào L


k
;
L
k
= {<l.itemset, countof l in L

k
>|l L

k
}; // kết hợp với bước l3
Sort L

k
theo TID;
End
Trả lời =
k
L
k
III.3. Thuật toán Apriori
Apriori là một thuật giải được do Rakesh Agrawal, Tomasz Imielinski, Arun Swami đề
xuất lần đầu vào năm 1993. Thuật toán tìm giao dịch t có độ hỗ trợ và độ tin cậy thoả
mãn lớn hơn một giá trị ngưỡng nào đó và được tỉa bớt những tập ứng cử viên có tập con
không phổ biến trước khi tính độ hỗ trợ.
Thuật toán Apriori tính tất cả các tập ứng cử của tập k trong một lần duyệt CSDL,
Apriori dựa vào cấu trúc cây băm tìm kiếm đi xuống trên cấu trúc cây mỗi khi ta chạm lá,
ta tìm được một tập ứng cử viên có tiền tố chung được bao gồm trong giao dịch. Sau đó
các tập ứng cử này được tìm trong giao dịch đã được ánh xạ trước đó trong trường hợp
tìm thấy biến đếm được tăng lên một.

Ký hiệu: Giả sử các mục trong mỗi giao dịch được lưu giữ theo trật tự từ điển gọi số các
mục trong một tập mục là kích thước của nó và gọi tập mục có kích thước k là tập k-mục
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 12
(tập k mục). Các mục trong mỗi tập mục cũng được giữ ở trật tự từ điển ta sử dụng các ký
hiệu sau:
Lk: Tập các tập k-mục phổ biến (với độ hỗ trợ cực tiểu minsup nào đó)
Ck: Tập các tập k-mục ứng cử (các tập mục phổ biến tiềm năng)
Input: CSDL D, minsup.
Output: Tập các tập mục phổ biến.
L
1
= {Các 1 - itemset phổ biến};
k=2;
While( L
k-1
! =

)
{ C
k
= apriori_gen(L
k-1
, minsup);// các ứng cử mới theo chương trình con ở dưới đây.
for( ∀ giao dịch t∈ D)
{C
t
=Subset (C
k
,t);// ứng cử viên được chứa trong t
for (∀ ứng cử c ∈ C

t
)
c.count ++;
}
L
k
={ c

C
k

c.count

minsup}
k++;}
Return L=

k
L
k'
;
// sinh ứng cử viên mới (**)
Void apriori_gen(L
k-1
, minsup )
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 13
{ for (

itemset l
1


L
k-1
)
for (

itemset l
2

L
k-1
)
if((L
1
(1)== L
2
(1)&&L
1
(2) == L
2
(2)&& && L
1
(k-2) == L
2
(k-2)) &&L
1
(k-1) == L
2
(k-1))
{ c= L

1
kết nối L
2
;
if( has_inrequent_subset(c, L
k-1
)) delete c;
else add c to C
k
;
}
return C
k
.}
Boolean has_infrequent_subset(c,L
k-1
)
{ for (

(k-1)-subset s

c)
if(s ∉ L
k-1
) return TRUE;
else return FALSE ;
}
Lần duyệt đầu tiên, sẽ tính số lần xuất hiện của mỗi mục để xác định các 1- itemset phổ
biến lần duyệt thứ k (k ≥ 2) sẽ bao gồm 2 giai đoạn:
Tập phổ biến L

k-1
đã tìm thấy ở lần duyệt thứ k-1 được sử dụng để sinh ra các tập ứng cử
viên C
k
bằng việc sử dụng hàm Apriori_gen.
Dựa vào CSDL, tính độ hỗ trợ của các ứng của viên trong C
k
. Các ứng cử viên trong C
k
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 được mô tả như sau:
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 14
Trong giai đoạn 2 (giai đoạn sửa, tỉa): xoá bỏ các tập c

C
k
sao cho một vài (k-1) – tập
con của c không nằm trong L
k-1
. Thủ tục này là đầy đủ bởi đối với bất kì tập nào L
k
với độ
hỗ trợ tối thiểu thì các tập con kích cỡ (k-1) cũng có độ hỗ trợ tối thiểu, do đó nếu ta mở
rộng mỗi tập trong L
k-1
với tất cả các tập mục có thể và sau đó xoá tất cả các tập mà (k-1)
– tập con của nó không nằm trong L
k-1
, ta sẽ nhận được tập các tập trong L
k.

Việc kết nối là tương đương với việc mở rộng L
k-1
với mỗi mục nằm trong CSDL và sau
đó xoá bỏ các tập này mà đối với nó (k-1) –itemset nhận được bằng việc xoá đi mục thứ
(k-1) không nằm trong L
k-1
. Ở giai đoạn này C
k


L
k
với lập luận như vậy, giai đoạn tỉa là
giai đoạn người ta xoá khỏi C
k
tất

cả các tập mà các (k-1) tập con của nó không nằm trong
L
k-1
, cũng không xoá bất kỳ một tập nào có thể nằm trong L
k
.
Hàm Subset: Các tập ứng cử viên C
k
được lưu trữ trong một cây băm một nút của cây
này hoặc là chứa một danh sách của các tập (nút lá) hoặc bảng băm (một nút trong).
Trong mỗi một nút trong, mỗi cụm (bucket) của bảng băm chỉ đến một nút khác. Gốc của
cây băm được xem ở độ sâu là 1, một nút trong ở độ sâu d sẽ dẫn đến nút ở độ sâu d+1.
Các tập được lưu trữ trong các lá khi ta bổ sung thêm một tập c, ta bắt từ nút gốc và đi

xuống cây cho đến khi ta chạm vào một lá. Tại một nút ở độ sâu d, ta quyết định sẽ đi
theo cành nào bằng việc áp dụng hàm băm đối với mục thứ d của tập đó và theo con trỏ
trong Bucket tương ứng. Tất cả các nút ban đầu được tạo ra như là nút lá khi số các tập
trong một nút lá vượt quá ngưỡng được chọn, nút lá này được chuyển thành một nút
trong.
Bắt đầu từ nút gốc, hàm Subset tìm tất cả các ứng cử viên được chứa trong giao dịch t
như sau: nếu ta bắt đầu tại một lá, ta tìm những tập trong nút lá này được chứa trong giao
dịch t và bổ sung các mối quan hệ với chúng đối với tập kết quả mong muốn, nếu ta đang
ở một nút trong và ta đến được nó bằng việc băm mục i, ta băm trên mỗi mục đi sau i
trong t và áp dụng một cách đệ quy thủ tục đó đối với nút này trong Bucket tương ứng.
Đối với nút gốc, ta băm theo mỗi mục trong t.
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 15
Để thấy được tại sao hàm Subset trả lại tập các tham khảo mong muốn hãy để ý đến
những gì sẽ xảy ra tại nút gốc. Đối với bất kỳ tập c nào được chứa trong giao dịch t, mục
đầu tiên cần phải có trong t. Tại nút gốc, việc băm mọi mục trong t đảm bảo được rằng ta
chỉ không biết các tập mà nó bắt đầu với một mục không nằm trong t. Những lí luận
tương tự áp dụng cho các mức sâu hơn vì các mục trong bất kì tập nào cũng được sắp thứ
tự, nếu ta đến được một nút hiện tại bằng việc băm mục i, ta chỉ cần quan tâm đến những
mục trong t nó xuất hiện sau i.
// Bước tỉa: Xoá bớt tất cả các tập mục c ∈ C
k
mà (k-1) tập con của c không phụ thuộc L
k-1
.
for (∀ tập mục c ∈ C
k
)
for (∀ (k-1) – tập con s của c)
if(s ∉ L
k-1

)
delete c khỏi C
k
;
Nhận xét: Thuật toán Apriori với n là độ dài lớn nhất của tập được sinh ra vậy thì thuật
toán sẽ thực hiện duyệt toàn bộ các giao tác n+1 lần. Như vậy, nếu bỏ qua thời gian so
sánh tìm sự xuất hiện của một mẫu trong một giao tác thì độ phức tạp của thuật toán
Apriori là O(A) > O(n*L) trong đó L là kích thước CSDL còn n là độ dài cần đạt được
của các mẫu.
Ngoài ra, nếu độ hỗ trợ tối thiểu minsup bị thay đổi thì thuật toán sẽ phải thực hiện lại từ
đầu, điều này sẽ rất mất thời gian, thuật toán Apriori được xây dựng nhằm phát hiện các
luật kết hợp giữa các đối tượng với độ hỗ trợ và độ tin cậy tối thiểu.
III.4. Thuật toán FP-Growth
Ý tưởng của thuật toán khai thác tập phổ biến không dùng hàm tạo ứng viên nén cơ sở dữ
liệu thành cấu trúc dạng cây sau đó duyệt cây để tao ra tập phổ biến
Thiết lập cây FP thiết lập cơ sở mẫu điều kiện cho mỗi hạng mục (là mỗi nút trên cây FP)
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 16
Thiết lập cây FP điều kiện từ mỗi cơ sở mẫu điều kiện khai thác đệ quy cây FP điều kiện
và phát triển mẫu phổ biến cho đến khi cây Fp điều kiện chỉ chưa 1 đường dẫn duy nhất –
tạo ra tất cả các tổ hợp của mẫu phổ biến
Thuật toán
Đầu tiên, thuật toán duyệt CSDL lần thứ nhất để tính độ hỗ trợ của các tập mục (đếm số
lần xuất hiện của từng mục).
Tiếp đến, những mục không đủ độ hỗ trợ bị loại các mục còn lại được sắp theo thứ tự
giảm dần của độ hỗ trợ (cũng tức là giảm dần theo số lần xuất hiện trong CSDL), ta nhận
được danh sách L các mục đã sắp.
Duyệt CSDL lần thứ 2, với mỗi tác vụ t, loại các mục không đủ độ hỗ trợ, các mục còn
lại theo thứ tự giống như xuất hiện trong L (tức là thứ tự giảm dần theo độ hỗ trợ) được
đưa vào cây FP-tree.
Phần tiếp theo thuật toán khai phá tìm các mẫu phổ biến trên cây FP-tree đã xây dựng mà

không cần duyệt lại CSDL nữa.
Cấu trúc cây FP-tree như sau:
Gốc của cây nhãn null, các đường đi trên cây biểu diễn item prefixs
Các liên kết trên cây: liên kết các mục xuất hiện có tên giống nhau
Mỗi nút, (trừ nút gốc) bao gồm:
Tên mục (item identifier)
Count: số đếm
Node link: liên kết đến nút tiếp theo trên cây có cùng tên
Bảng các đầu mục phổ biến (header table): bắt đầu cho các liên kết
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 17
Thủ tục thêm một dãy các mục (đã sắp giảm dần theo độ hỗ trợ) của một tác vụ vào cây
thực hiện đệ quy như sau:
Procedure insert_tree(string [p|P], tree có gốc T)
(ở đó p là mục thứ nhất của dãy các mục và P là phần còn lại trong lần duyệt thứ hai,
với mỗi tác vụ t, gọi thủ tục insert_tree(t’,T), ở đó t’ là nội dung của tác vụ t sau khi đã
bỏ các mục không phổ biến và sắp theo thứ tự giảm dần của độ hỗ trợ, T là gốc của cây)
Procedure insert_tree(string[p|P],tree có gốc T)
Nếu T có nút con N mà N.itemname=p thì N.count++
ngược lại
Tạo một nút mới N;
N.itemname:=p;N.count:=1
Thay đổi nút liên kết cho p bao gồm N;
Nếu p khác rỗng
gọi thủ tục insert_tree(P,N);
Tìm tập mục phổ biến:
Sau khi xây dựng xong FP-tree cho CSDL, việc khai phá tìm các mẫu phổ biến chỉ thực
hiện trên cây FP-tree mà không cần duyệt CSDL nữa.
Thuật toán FP-growth như sau:
Bắt đầu từ dưới lên của bảng header và cây, với mỗi mục A: dùng n liên kết duỵêt qua tất
cả các nút trên cây mà xuất hiện A, với mỗi nút mà n.itemname=A, xác định các tập phổ

biến có xuất hiện A, thực hiện bằng cách chỉ cần tìm các đường đi từ gốc tới n.
Thuật toán FP – growth.
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 18
Khai phá Fp-tree được thực hiện bởi gọi lần đầu FP-growth (Fp-tree, null), thực hiện
như sau:
Procedure FP-growth(Tree,
α
)
Nếu cây Tree chứa một đường đơn P thì
Với tất cả các tổ hợp (ký hiệu
β
) của các nút trong đường đi P
Sinh ra mẫu
β∪α
với support=độ hỗ trợ nhỏ nhất của các nút trong
β
;
Ngược lại: với mỗi mục ai trong header table của Tree{
Sinh ra
β
:= ai
∪α
với support=ai.count;
Xây dựng cơ sở mẫu phụ thuộc của
β
và sau đó FP-tree phụ thuộc của
β
là Tree
β
;

Nếu Tree
β≠∅
thì gọi FP-growth(Tree
β
,
β
)}
a tất cả các tổ hợp của mẫu phổ biến
CHƯƠNG IV. DÙNG THUẬT TOÁN APRIORI TRONG
MẨU DỮ LIỆU CHỨNG KHOÁN
Hiện nay những biến động tại thị trường chứng khoán việt nam đang găp ít nhiều khó
khăn cho nhà đầu tư vì chưa nắm được quy luật của nó nhà đầu tư phải đối mặt với một
lượng lớn thông tin chứa đựng trong các dạng dữ liệu phức tạp. khai phá dữ liệu giúp nhà
đầu tư xử lý lượng lớn dữ liệu này để tìm các thông tin hữu ích trợ giúp họ đưa ra những
quyết định đúng đắn trong đầu tư, luật kết hợp giúp giải quyết vấn đề này.
IV.1. Thực trạng tại thị trường chứng khoán việt nam
Thị trường chứng khoán việt nam ra đời hơn 10 năm nhưng đã có những ảnh hưởng to
lớn đến nền kinh tế quốc gia việc nghiên cứu và xây dựng một hệ thống phân tích và dự
đoán (nhiệm vụ tư vấn, hỗ trợ ra quyết định) cho thị trường chứng khoán là quan trọng và
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 19
cấp thiết cho các nhà đầu tư và nhà hoạch định chính sách vĩ mô. Thị trường chứng
khoán việt nam hiện tại gồm hai sàn giao dịch: HOSE (tại TPHCM) và HASTC (tại HN).
Tại thị trường chứng khoán việt nam các rủi ro thường gặp của nhà đầu tư là rủi ro do
tính thanh khoản thấp, rủi ro từ thông tin, rủi ro từ các quy định và chất lượng dịch vụ của
sàn giao dịch, rủi ro từ biến động thị trường. Hiện nay các nhà đầu tư sử dụng các
phương pháp phân tích hiện nay chủ yếu dựa vào bốn cách chính: dựa vào các phân tích
kỹ thuật để đưa ra tư vấn, dưa vào các phân tích cơ sở để đưa ra tư vấn, dựa vào phương
pháp dự báo chuỗi thời gian quá khứ và dưa vào phương pháp máy học, tuy nhiên cho
đến nay thì sự biến động của thị trường vẫn chưa nằm trong tính toán của các nhà đầu tư,
rủi ro vẫn tồn đọng.

IV.2. Phân tích và ứng dụng luật kết hợp để khai phá
Vơi số lượng giao dịch hằng ngày tăng, bình quân 80.650.490 lượt/ngày cơ sở dữ liệu của
giao dịch ngày càng tăng với mỗi ngày thay đổi, mỗi loại cổ phiếu sẽ tăng thêm một dòng
trong cơ sở dữ liệu ngoài ra các thông tin khác cũng tăng thêm 1 dòng/ 1 ngày. Lượng có
sở dữ liệu mỗi lần phân tích có thể chia theo khoảng thời gian (1 tuần, 1 tháng, 3 tháng,
6 tháng…) tất cả CSDL này hoàn toàn được truy xuất.
Các dữ liệu được thu thập về sẽ được phân tích, định dạng và chứa trong data warehouse,
là loại dữ liệu được sử dụng để khai phá sau giai đoạn khai phá, ta sử dụng thuật toán
Apriori để đưa ra các mẫu phân tích dùng cho dự đoán.
Các dữ liệu dự đoán sẽ bao gồm chỉ số cổ phiếu biến động theo ngày và các khả năng
mua/bán/chuyển nhượng (gọi chung là giao dịch) hằng ngày sẻ được đưa vào dự đoán
các khả năng sẽ diễn ra của các cổ phiếu trong những ngày tiếp theo.
IV.3. Một số hàm của chương trình
private void Solve()
{
double dMinSupport = double.Parse(txt_Support.Text) / 100;
double dMinConfidence = double.Parse(txt_Confidence.Text) / 100;
{
dic_Candidates = GenerateCandidates(dic_FrequentItems);
dic_FrequentItems = GetFrequentItems(dic_Candidates, dMinSupport);
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 20
}
while (dic_Candidates.Count != 0);
……
}
private void AddStrongRule(clssRules Rule, string strXY, ref List<clssRules>
lstStrongRulesReturn, double dMinConfidence)
{
dConfidence = GetConfidence(Rule.Y, strXY);
if (dConfidence >= dMinConfidence)

{
NewRule = new clssRules(Rule.Y, Rule.X, dConfidence);
lstStrongRulesReturn.Add(NewRule);
}
}
private double GetSupport(string strGeneratedCandidate)
{
double dSupportReturn = 0;
foreach (string strTransaction in m_dicTransactions.Values)
{
if (IsSubstring(strGeneratedCandidate, strTransaction))
{
dSupportReturn++;
}
………
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "CSV | *.csv";
ofd.ShowDialog();
if (ofd.FileName != null)
{
private void button2_Click(object sender, EventArgs e)
{
DataGridViewRow dr=new DataGridViewRow();
try
{
dr = dataGridView1.SelectedRows[0];
}
if ((high - open) > (open - low))

{
h1 = "T";
}
else
{
h1 = "F";
}
string h2 = "";
if (close > open)
{
h2 = "H";
}
else
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 21
{
h2 = "L";
}
dr = dataGridView1.SelectedRows[1];
IV.4. Mô phỏng chương trình
Chạy chương trình Apriori sau đó load dữ liệu chứng khoán tăng giảm theo ngày để ta
chọn được loại cổ phiếu phân tích dựa vào thời điểm giá cao, thấp hoặc thời điểm mở cửa
và đóng cửa của thị trường giao dịch
Khi chọn loại cổ phiểu chọn add rules để đưa vào phân tích dự đoán.
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 22
Lúc chọn độ tin cậy và phổ biến chương trình sẽ phân tích quá trình cao thấp của mã
chứng khoán dự đoán có thể tăng hay giảm ngày tiếp theo.
CHƯƠNG V. KẾT LUẬN
Khai phá tri thức bao gồm các bước hình thành, xác định và định nghĩa bài toán; thu thập
và tiền xử lý dữ liệu; KPDL rút ra các tri thức sử dụng tri thức phát hiện được nhằm trợ
giúp cho việc ra quyết định tư vấn trong giao dịch cổ phiếu về thuật toán sinh luật kết hợp

đã xây dựng và minh họa một số thuật toán, luật kết hợp để phát hiện tập chỉ mục phổ
biến và quy luật trong giao dịch cổ phiếu
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 23
Hiện nay các thuật toán được cung cấp thực hiện tốt nhiệm vụ của nó tuy nhiên thị trường
chứng khoán diễn biến liên tục theo thời gian thực nên thuật toán cũng phải đáp ứng được
thời gian thực này. Định hướng phát triển nghiên cứu là đi sâu các thuật toán khai phá dữ
liệu, tiếp tục hoàn thiện và mở rộng giải pháp để có thể thỏa mãn yêu cầu này trong đó
các kỹ thuật chọn lựa để xử lý sẽ được quan tâm nhiều hơn (giống như mờ hóa thông tin)
để loại bỏ các dữ liệu ít liên quan, chỉ xử lý trên lượng dữ liệu được quan tâm. Luât kết
hợp là dạng luât khá đơn giản nhưng lại mang khá nhiều ý nghĩa, thông tin mà dạng luật
này đem lại là rất đáng kể và hỗ trợ không nhỏ trong quá trình ra quyết định.
TÀI LIỆU THAM KHẢO
[1]. PGS TS. Đỗ Phúc, Bài giảng Powerpoint khai thác dữ liệu, 2011.
[2]. TS. Đỗ Phúc, Giáo trình khai thác dữ liệu, NXB Đại Học Quốc Gia TP. Hồ Chí
Minh, 2008.
[3]. Ths. Huỳnh Đức Thuận, Ứng dụng luật kết hợp trong khai phá dữ liệu, NCKH khoa
công nghệ thông tin, Đại Học Đông Nam Á, 2011.
[4] Website tham khảo
 www.codeproject.com
 />
Báo cáo môn khai phá dữ liệu và kho dữ liệuTrang 24

×