ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG \\\ TRẦN NAM NGỌC
NGHIÊN CỨU LUẬT KẾT HỢP VÀ ỨNG
DỤNG TRONG BÀI TOÁN XÂY DỰNG HỆ HỖ
TRỢ HỌC SINH TRUNG HỌC PHỔ THÔNG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
Thái Nguyên - 2015
ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG LỜI CẢM ƠN TRẦN NAM NGỌC Đầu tiên cho tôi gửi lời cảm ơn chân thành và sâu sắc nhất đến thầy
hƣớng dẫn, chỉ bảo cho tôi trong suốt quá trình làm luận văn.
PGS.TS Lê Bá Dũng - Viện CNTT - Viện KH và CN Việt nam đã tận tình NGHIÊN CỨU LUẬT KẾT HỢP VÀ ỨNG DỤNG Tôi cũng gửi lời cảm ơn đến các thầy cô trƣờng Đại học Công nghệ thông tin và Truyền thông – Đại học Thái Nguyên, các thầy cô Viện ÂNCông TRONG BÀI TOÁN XÂY DỰNG HỆ HỖ TRỢ nghệ thông tin đã truyền đạt những kiến thức và giúp đỡ tôi trong suốt quá HỌC SINH TRUNG HỌC PHỔ THÔNG
trình học của mình.
Chuyên ngành: Khoa học máy tính
Tôi cũng xin gửi lời cảm ơn tới các đồng nghiệp, gia đình và bạn bè
Mã số : 60 48 01 01
những ngƣời đã động viên tạo mọi điều kiện giúp đỡ tôi trong suốt hai năm
học.
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
NGƢỜI HƢỚNG DẪN KHOA HỌC: TS ĐẶNG THỊ THU HIỀN
Thái Nguyên - 2015
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
1
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT ........................................................ 4 DANH MỤC CÁC BẢNG .................................................................................................... 5 MỞ ĐẦU ............................................................................................................................... 1 CHƢƠNG I TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU ....................................................... 2 1.1. Tổ chức và khai thác cơ sở dữ liệu truyền thống........................................................ 2 1.2. Tổng quan về kỹ thuật phát hiện tri thức và khai phá dữ liệu .................................... 3 1.2.1. Qui trình khai phá dữ liệu và phát hiện tri thức. ................................................. 4 1.2.2. Các lĩnh vực liên quan đến khai phá dữ liệu và phát hiện tri thức ...................... 5 1.3. Các nhiệm vụ trong khai phá dữ liệu và phát hiện tri thức. ....................................... 6 CHƢƠNG II: MỘT SỐ KỸ THUẬT KHAI PHÁ LUẬT KẾT HỢP ................................. 15 2.1 Lý thuyết về luật kết hợp ........................................................................................... 15 2.2 Thuật toán kinh điển .................................................................................................. 16 2.2.1. Thuật toán Apriori ............................................................................................. 16 2.2.2 Ý tƣởng .............................................................................................................. 16 2.2.3 Thuật toán ........................................................................................................... 16 2.3 Một số thuật toán luật kết hợp ................................................................................... 19 2.3.1 Thuật toán Fp_Growth ....................................................................................... 19 2.3.2 Thuật toán Fp_Tree ............................................................................................ 20 2.3.3 Thuật toán Fast Algorithm for Discovering Frequent Itemsets (FIT) ................ 21 2.3.4 Thuật toán NSFI ALGORITHM ....................................................................... 22 2.3.5 Thuật toán NSFI ALGORITH ........................................................................... 25 2.4 Thuật toán FSM ........................................................................................................ 26 2.4.1 Cơ sở lý thuyết của thuật toán FSM ................................................................... 27 2.4.2 Nội dung cơ bản của thuật toán FSM ................................................................. 27 2.4.3. Một số khái niệm của thuật toán ....................................................................... 28 2.4.4 Nội dung bài toán: .............................................................................................. 31 CHƢƠNG III: ÁP DỤNG KHAI PHÁ TRÊN CƠ SỞ DỮ LIỆU BẢNG ĐIỂM CỦA HỌC SINH THPT TÂN LẬP - ĐAN PHƢỢNG ........................................................................ 34 3.1. Phát biểu bài toán: .................................................................................................... 34 3.2 Lựa chọn phƣơng pháp .............................................................................................. 35 3.3 Cài đặt và thử nghiệm ................................................................................................ 35 3.3.1. Môi trƣờng cài đặt và thử nghiệm ..................................................................... 35 3.3.2 Cài đặt thuật toán tìm luật kết hợp ..................................................................... 36 3.3.3 Một số giao diện chƣơng trình ........................................................................... 37 3.4 Đánh giá: .................................................................................................................. 38 TÀI LIỆU THAM KHẢO ................................................................................................... 47 PHỤ LỤC ............................................................................................................................ 49
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
MỤC LỤC
2
Tác giả xin chân thành cảm ơn các thầy giáo, cô giáo Trƣờng Đại học Công
nghệ thông tin và Truyền thông Thái Nguyên và các thầy Viện Công nghệ thông
tin – Viện khoa học Công nghệ Việt Nam, đã tận tâm giảng dạy các kiến thức
trong hai năm học qua cùng với sự cố gắng hết mực của bản thân.
Đặc biệt tôi xin bày tỏ sự biết ơn sâu sắc đến thầy giáo Tiến sĩ Đặng Thị
Thu Hiền, PGS. TS Ngô Quốc Tạo ngƣời đã tận tình giảng dạy và hƣớng dẫn
tôi thực hiện luận văn này.
Tác giả cũng xin chân thành cảm ơn các thầy cô giáo trƣờng THPT Tân
Lập, các bạn đồng nghiệp, các bạn trong lớp cao học CK12H đã tạo điều kiện,
giúp đỡ tôi trong suốt thời gian qua.
Rất mong nhận đƣợc sự góp ý của các thầy, cô, bạn bè, đồng nghiệp để
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
luận văn có thể phát triển và hoàn thiện hơn.
3
LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi.
Các số liệu, kết quả nêu trong luận văn và chƣa từng đƣợc ai công bố
trong bất kỳ công trình nào khác.
Thái Nguyên, tháng 12 năm 2015
TÁC GIẢ
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
Trần Nam Ngọc
4
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
Từ viết tắt
Tiếng Anh
Tiếng Việt
Tập các K – itemset ứng cử
Ck
Ck
Conf
Confidence
Độ tin cậy
CSDL
Database
Cơ sở dữ liệu
DW
Data Warehouse
Kho dữ liệu
Item
Item
Khoản mục
Itemset
Itemset
Tập các khoản mục
K- itemset K- itemset
Tập gồm K mục
KDD
Knowledge Discovery and
Kỹ thuật phát hiện tri thức và khai
Data Mining
phá dữ liệu
Tập các K - itemset phổ biến
Lk
Lk
Minconf
Minimum Confidence
Độ tin cậy tối thiểu
Minsup
Minimum Support
Độ hỗ trợ tối thiểu
OLAP
On Line Analytical
Phân tích trực tuyến
Processing
MOLAP
Multidimensional OLAP
Phân tích đa chiều trực tuyến
ROLAP
Relational OLAP
Phân tích quan hệ trực tuyến
Tiếp đầu dãy có độ dài k của s
pre(k, s)
pre(k, s)
Bản ghi
Record
Record
Độ hỗ trợ
Support
Supp
TID
Transaction Indentification
Định danh giao tác
SQL
Structured Query Language
Ngôn ngữ truy vấn có cấu trúc
SQO
Semantic Query Optimization Tối ƣu truy vấn ngữ nghĩa
DBSCAN
Density Based Spatial
Thuật toán phân lớp dựa vào vị trí
Clustering of Application
địa phƣơng
with Noise
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
DENCLUE DENsity Based CLUstEring
Thuật toán phân lớp cơ bản (tổng
quát)
ADO
Activate X Data Object
Đối tƣợng dữ liệu Active X
DFS
Depth First Search
Tìm kiếm theo chiều sâu
BFS
Breadth First Search
Tìm kiếm theo chiều rộng
DHP
Direct Hashing and Pruning
Bảng băm trực tiếp và sự cắt tỉa
PHP
Perfect Hashing and Pruning Bảng băm lý tƣởng và sự cắt tỉa
I/O
Input/Output
Vào/ra
D
Data
CSDL có các trƣờng
Size
Size
Số lƣợng các Item trong tập
Itemset
5
Bảng 1.1. So sánh các nhiệm vụ phát hiện tri thức ................................................... 12 Bảng 2.1. Cơ sở dữ liệu ............................................................................................. 29 Bảng 2.2. Giá trị lmv và cổ phần của các mục dữ liệu trong CSDL bảng 2.1. ........ 30 Bảng 2.3. Các tập mục cổ phần cao của CSDL bảng 2.1. ........................................ 31 Bảng 2.4. CSDL minh họa ngữ nghĩa của tập mục cổ phần cao. ............................. 33
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
DANH MỤC CÁC BẢNG
6
Hình 1.1. Quy trình phát hiện tri thức ........................................................................ 4 Hình 2.1. CSDL giao dịch ......................................................................................... 17 Hình 2.2. Minh họa các bước khai phá ..................................................................... 18 Hình 2.3. Kết quả tìm luật kết hợp ............................................................................ 18 Hình 3.1. Ví dụ về dữ liệu đầu vào cho thực nghiệm ............................................... 37 Hình 3.2. Giao diện chương trình thực hiện ............................................................. 37 Hình 3.3. Kết quả ...................................................................................................... 38
Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.lrc.tnu.edu.vn
DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ
1
MỞ ĐẦU
Ngày nay, thông tin đƣợc coi là tài sản quan trọng của các tổ chức, doanh
nghiệp và các cá nhân. Cá nhân hoặc tổ chức nào thu thập và hiểu đƣợc thông
tin, và hành động kịp thời dựa trên các thông tin đó sẽ đạt đƣợc kết quả tốt.
Chính vì lý do đó, việc tạo ra thông tin, tổ chức lƣu trữ và khai thác thông tin
ngày càng trở nên quan trọng và gia tăng không ngừng.
Sự tăng trƣởng vƣợt bậc của các cơ sở dữ liệu (CSDL) trong các hoạt
động nhƣ: sản xuất kinh doanh, thƣơng mại, quản lý đã làm nảy sinh và thúc
đẩy sự phát triển của kỹ thuật thu thập, lƣu trữ, phân tích và khai phá dữ liệu…
không chỉ bằng các phƣơng pháp thông thƣờng nhƣ: thống kê mà đòi hỏi cách
xử lý thông minh hơn, hiệu quả hơn. Từ đó các nhà quản lý có đƣợc thông tin
hữu ích để tác động lại quá trình sản xuất, kinh doanh của mình… đó là tri
thức. Các kỹ thuật cho phép ta khai thác đƣợc tri thức hữu dụng từ CSDL (lớn)
đƣợc gọi là các kỹ thuật khai phá dữ liệu (DM – Data Mining). Khai phá luật
kết hợp là một nội dung quan trọng trong khai phá dữ liệu.
Luận văn tìm hiểu về luật kết hợp và ứng dụng thử nghiệm khai phá cơ sở
dữ liệu bảng điểm học tập của học sinh trƣờng THPT Tân Lập – Đan Phƣơng
nhằm hỗ trợ cho công tác quản lý, định hƣớng học tập cho học sinh phổ thông.
Nhằm hỗ trợ học sinh chọn trƣờng đại học, cao đẳng phù hợp với khả năng của
bản thân hoặc đi học trƣờng nghề chuyên nghiệp. Giúp cho học sinh tập chung
vào đúng khối mà mình có khả năng cũng nhƣ có thế mạnh. Đồng thời cũng
giúp nhà trƣờng và giáo viên thấy đƣợc điểm mạnh, điểm chƣa mạnh về
chuyên môn của mình. Đƣa ra những hƣớng đi đúng nhằm xây dựng nhà
1
trƣờng thành nhà trƣờng có chuyên môn tốt, môi trƣờng thân thiện.
2
CHƢƠNG I TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU
1.1. Tổ chức và khai thác cơ sở dữ liệu truyền thống
Việc dùng các phƣơng tiện tin học để tổ chức và khai thác cơ sở dữ liệu
(CSDL) đã đƣợc phát triển từ những năm 60 của thế kỉ trƣớc. Từ đó cho đến
nay, rất nhiều CSDL đã đƣợc tổ chức, phát triển và khai thác ở mọi quy mô và
các lĩnh vực hoạt động của con ngƣời và xã hội. Cho đến nay, số lƣợng CSDL
đã trở nên khổng lồ bao gồm các CSDL cực lớn cỡ gigabytes và thậm chí
terabytes lƣu trữ các dữ liệu kinh doanh ví dụ nhƣ dữ liệu thông tin khác hàng,
dữ liệu bán hàng, dữ liệu các tài khoản, ... Nhiều hệ quản trị CSDL mạnh với
các công cụ phong phú và thuận tiện đã giúp con ngƣời khai thác có hiệu quả
nguồn tài nguyên dữ liệu. Mô hình CSDL quan hệ và ngôn ngữ vấn đáp chuẩn
(SQL) đã có vai trò hết sức quan trọng trong việc tổ chức và khai thác CSDL.
Tuy nhiên bên cạnh chức năng khai thác dữ liệu có tính chất tác nghiệp,
sự thành công trong công việc không còn là năng suất của các hệ thống thông
tin nữa mà là tính linh hoạt và sẵn sàng đáp ứng những yêu cầu trong thực tế,
CSDL cần đem lại những “tri thức” hơn là chính những dữ liệu trong đó. Lúc
này, các mô hình CSDL truyền thống và ngôn ngữ SQL đã cho thấy không có
khả năng thực hiện công việc này. Để lấy thông tin có tính “tri thức” trong
khối dữ liệu khổng lồ này, ngƣời ta đã tìm ra những kỹ thuật có khả năng hợp
nhất các dữ liệu từ các hệ thống giao dịch khác nhau, chuyển đổi thành một tập
hợp các CSDL ổn định, có chất lƣợng đƣợc sử dụng chỉ cho riêng một vài mục
đích nào đó. Các kỹ thuật đó gọi chung là kỹ thuật tạo kho dữ liệu (data
warehousing) và môi trƣờng các dữ liệu có đƣợc gọi là các kho dữ liệu (data
warehouse).
Đồng thời, Công nghệ khai phá dữ liệu (data mining) ra đời đáp ứng
những đòi hỏi trong khoa học cũng nhƣ trong hoạt động thực tiễn. Đây chính
là một ứng dụng chính để khai phá kho dữ liệu nhằm phát hiện tri thức
2
(Knowledge Discovery) phục vụ công tác quản lý, kinh doanh,….
3
1.2. Tổng quan về kỹ thuật phát hiện tri thức và khai phá dữ liệu
Chúng ta có thể xem tri thức nhƣ là các thông tin tích hợp, bao gồm các
sự kiện và các mối quan hệ giữa chúng. Các mối quan hệ này có thể đƣợc hiểu
ra, có thể đƣợc phát hiện, hoặc có thể đƣợc học. Nói cách khác, tri thức có thể
đƣợc coi là dữ liệu có độ trừu tƣợng và tổ chức cao.
Phát hiện tri thức trong các cơ sở dữ liệu là một qui trình nhận biết các
mẫu hoặc các mô hình trong dữ liệu với các tính năng: hợp thức, mới, khả ích,
và có thể hiểu đƣợc. Còn khai phá dữ liệu là một bƣớc trong qui trình phát
hiện tri thức gồm có các thuật toán khai thác dữ liệu chuyên dùng dƣới một số
qui định về hiệu quả tính toán chấp nhận đƣợc để tìm ra các mẫu hoặc các mô
hình trong dữ liệu. Nói một cách khác, mục đích của phát hiện tri thức và khai
phá dữ liệu chính là tìm ra các mẫu và/hoặc các mô hình đang tồn tại trong các
cơ sở dữ liệu nhƣng vẫn còn bị che khuất bởi hàng núi dữ liệu.
Định nghĩa: Phát hiện tri thức và khai phá dữ liệu (KDD: Knowledge
Discovery and Data Mining) là quá trình không tầm thƣờng nhận ra những
mẫu có giá trị, mới, hữu ích tiềm năng và hiểu đƣợc trong dữ liệu [7].
Còn các nhà thống kê thì xem Khai phá dữ liệu nhƣ là một qui trình phân
tích đƣợc thiết kế để thăm dò một lƣợng cực lớn các dữ liệu nhằm phát hiện ra
các mẫu thích hợp và/hoặc các mối quan hệ mang tính hệ thống giữa các biến
và sau đó sẽ hợp thức hoá các kết quả tìm đƣợc bằng cách áp dụng các mẫu đã
phát hiện đƣợc cho các tập con mới của dữ liệu. Qui trình này bao gồm ba giai
đoạn cơ bản: thăm dò, xây dựng mô hình hoặc định nghĩa mẫu, hợp thức/kiểm
3
chứng.
4
1.2.1. Qui trình khai phá dữ liệu và phát hiện tri thức.
Hình 1.1. Quy trình phát hiện tri thức
Qui trình phát hiện tri thức đƣợc mô tả tóm tắt trên Hình 1:
Bƣớc thứ nhất: Hình thành, xác định và định nghĩa bài toán. Là tìm hiểu
lĩnh vực ứng dụng từ đó hình thành bài toán, xác định các nhiệm vụ cần phải
hoàn thành. Bƣớc này sẽ quyết định cho việc rút ra đƣợc các tri thức hữu ích
và cho phép chọn các phƣơng pháp khai phá dữ liệu thích hợp với mục đích
ứng dụng và bản chất của dữ liệu.
Bƣớc thứ hai: Thu thập và tiền xử lý dữ liệu. Là thu thập và xử lý thô, còn
đƣợc gọi là tiền xử lý dữ liệu nhằm loại bỏ nhiễu, xử lý việc thiếu dữ liệu, biến
đổi dữ liệu và rút gọn dữ liệu nếu cần thiết, bƣớc này thƣờng chiếm nhiều thời
gian nhất trong toàn bộ qui trình phát hiện tri thức.
Bƣớc thứ ba: Khai phá dữ liệu, rút ra các tri thức. Là trích ra các mẫu
và/hoặc các mô hình ẩn dƣới các dữ liệu. Giai đoạn này rất quan trọng, bao
gồm các công đoạn nhƣ: chức năng, nhiệm vụ và mục đích của khai phá dữ
liệu, dùng phƣơng pháp khai phá nào?
Bƣớc thứ tƣ: Sử dụng các tri thức phát hiện đƣợc. Là hiểu tri thức đã tìm
đƣợc, đặc biệt là làm sáng tỏ các mô tả và dự đoán. Các bƣớc trên có thể lặp đi
lặp lại một số lần, kết quả thu đƣợc có thể đƣợc lấy trung bình trên tất cả các
4
lần thực hiện.
5
Tóm lại: KDD là một quá trình chiết xuất ra tri thức từ kho dữ liệu mà
trong đó khai phá dữ liệu là công đoạn quan trọng nhất.
1.2.2. Các lĩnh vực liên quan đến khai phá dữ liệu và phát hiện tri thức
Khai phá dữ liệu và phát hiện tri thức liên quan đến nhiều ngành, nhiều
lĩnh vực: thống kê, trí tuệ nhân tạo, cơ sở dữ liệu, thuật toán học, tính toán song
song và tốc độ cao, thu thập tri thức cho các hệ chuyên gia, quan sát dữ liệu...
Đặc biệt Phát hiện tri thức và khai phá dữ liệu rất gần gũi với lĩnh vực thống kê,
sử dụng các phƣơng pháp thống kê để mô hình dữ liệu và phát hiện các mẫu,
luật... Kho dữ liệu (Data Warehousing) và các công cụ phân tích trực tuyến
(OLAP) cũng liên quan rất chặt chẽ với Phát hiện tri thức và khai phá dữ liệu.
Khai phá dữ liệu có nhiều ứng dụng trong thực tế. Một số ứng dụng điển
hình nhƣ:
- Bảo hiểm, tài chính và thị trƣờng chứng khoán: 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. Danh
mục vốn và giá, lãi suất, dữ liệu thẻ tín dụng, phát hiện gian lận, ...
- Điều trị y học và chăm sóc y tế: Một số thông tin về chuẩn đoán bệnh
lƣu trong các hệ thống quản lý bệnh viện. Phân tích mối liên hệ giữa các triệu
chứng bệnh, chuẩn đoán và phƣơng pháp điều trị (chế độ dinh dƣỡng, thuốc,
...).
- Text mining và Web mining: Phân lớp văn bản và các trang Web, tóm
tắt văn bản,...
- Lĩnh vực khoa học: Quan sát thiên văn, dữ liệu gene, dữ liệu sinh vật
học, tìm kiếm, so sánh các hệ gene và thông tin di truyền, mối liên hệ gene và
một số bệnh di truyền, ...
- Mạng viễn thông: Phân tích các cuộc gọi điện thoại và hệ thống giám sát
5
lỗi, sự cố, chất lƣợng dịch vụ, ...
6
1.3. Các nhiệm vụ trong khai phá dữ liệu và phát hiện tri thức.
Do sự phát triển mạnh mẽ của các loại hệ thống phát hiện tri thức trong
CSDL (KDD) theo yêu cầu nhằm đáp ứng những đòi hỏi trong nhiều lĩnh vực
khác nhau, việc phát hiện tri thức cũng trở lên đa dạng hơn. Do đó, nhiệm vụ
của phát hiện tri thức trong CSDL cũng trở lên phong phú và có thể phát hiện
rất nhiều kiểu tri thức khác nhau. Một trong các bƣớc đầu tiên trong quá trình
phát hiện tri thức trong CSDL là quyết định xem loại kiến thức nào mà thuật
toán phát hiện tri thức trong CSDL cần phải kết xuất từ dữ liệu. Do đó, vệc
phân loại và so sánh các kiểu nhiệm vụ phát hiện tri thức trong CSDL là vấn
đề đáng quan tâm nhằm tạo ra một hệ thống phát hiện tri thức trong CSDL hữu
ích. Ta sẽ xem xét một số kiểu nhiệm vụ phát hiện tri thức sau:
Phát hiện các luật tối ƣu truy vấn ngữ nghĩa (Sematics Query
Optimization - SQO Rules)
Các luật tối ƣu truy vấn CSDL thông thƣờng thực hiện một phép biến đổi
cú pháp, hay sắp xếp lại thứ tự của các phép toán quan hệ trong một truy vấn
và sản sinh ra một truy vấn hiệu quả hơn. Các phép biến đổi này thƣờng dựa
trên lý thuyết đại số quan hệ. Các luật đƣợc biến đổi trả lại cùng một câu trả lời
nhƣ câu truy vấn ban đầu ở bất kỳ trạng thái nào của CSDL. Ngƣợc lại, luật tối
ƣu truy vấn ngữ nghĩa biến đổi các câu truy vấn ban đầu thành một truy vấn
mới bằng cách thêm vào hoặc xoá đi các mối liên kết bằng việc sử dụng các tri
thức CSDL ngữ nghĩa bao gồm các ràng buộc về tính toàn vẹn và sự phụ thuộc
hàm để sản sinh ra các câu truy vấn hiệu quả hơn. Nhƣ vậy câu truy vấn đã
biến đổi cũng trả lại cùng câu trả lời giống nhƣ câu truy vấn ban đầu trong bất
kỳ trạng thái nào của CSDL thoả mãn kiến thức về ngữ nghĩa đƣợc sử dụng
trong phép biến đổi. Các hệ thống phát hiện luật SQO có thể đƣợc chia thành
6
ba lớp:
7
- Các hệ thống hƣớng truy vấn (hệ thống báo cáo) trong đó thuật toán
phát hiện tri thức trong CSDL nhằm phục vụ các truy vấn CSDL thực của
ngƣời dùng;
- Các hệ thống hƣớng dữ liệu (hệ thống tác nghiệp) trong đó thuật toán
phát hiện tri thức trong CSDL chủ yếu phục vụ sự phân bổ dữ liệu trong trạng
thái hiện thời của CSDL;
- Các hệ thống lai kết hợp các đặc tính của cả hệ thống hƣớng truy vấn và
hƣớng dữ liệu.
Một đặc tính quan trọng của các luật SQO, khác với các kiểu phát hiện tri
thức khác, là việc chọn các thuộc tính để tổng hợp một SQO cần phải tính đến
chi phí liên quan nhƣ dùng phƣơng pháp truy cập nào và sơ đồ chỉ số trong hệ
quản trị CSDL. Việc này là cần thiết để tiết kiệm thời gian xử lý truy vấn. Một
thuật toán phát hiện tri thức trong CSDL loại này đòi hỏi phải xem xét tối ƣu
chi phí.
Phát hiện sự phụ thuộc CSDL (Database Dependencies)
Trong mô hình dữ liệu quan hệ, chúng ta đã nghiên cứu quan hệ trong
CSDL quan hệ không tính đến quan hệ giữa các thuộc tính. Các quan hệ này
thƣờng đƣợc thể hiện thông qua sự phụ thuộc dữ liệu hoặc ràng buộc toàn vẹn.
Ở đây sẽ sử dụng thuật ngữ phụ thuộc CSDL để chỉ sự phụ thuộc dữ liệu kiểu
này. Sự phụ thuộc CSDL đƣợc sử dụng trong thiết kế và duy trì một CSDL.
Phƣơng pháp phát hiện tự động các sự phụ thuộc CSDL này chính là một kiểu
nhiệm vụ của Khai phá dữ liệu.
Phát hiện sự sai lệch (Deviation)
Nhiệm vụ này nhằm phát hiện sự sai lệch đáng kể giữa nội dung của tập
con dữ liệu thực và nội dung mong đợi. Hai mô hình sai lệch hay dùng là mô
hình sai lệch theo thời gian và sai lệch nhóm. Sai lệch theo thời gian là sự thay
đổi có ý nghĩa của dữ liệu theo thời gian. Sai lệch theo nhóm là sự khác nhau 7
8
không chờ đợi giữa dữ liệu trong hai tập con dữ liệu, ở đây tính đến cả trƣờng
hợp tập con này thuộc trong tập con kia, nghĩa là xác định dữ liệu trong một
nhóm con của đối tƣợng có khác đáng kể so với toàn bộ đối tƣợng không.
Theo cách này, các sai sót dữ liệu hay sự sai lệch so với giá trị thông thƣờng
đƣợc phát hiện.
Phát hiện luật kết hợp (Association Rules)
Ta xét một ví dụ: Xét một tập các mặt hàng trong một giỏ mua hàng. Vấn
đề đặt ra là tìm những mối liên quan giữa các mặt hàng trong giỏ.
Một cách chi tiết hơn, xét một tập các thuộc tính nhị phân với một tập các
bộ, mỗi bộ đƣợc gọi là một giỏ. Các thuộc tính nhị phân đƣợc gọi là các mục
hay các mặt hàng trong giỏ mà mỗi mục chỉ nhận một trong hai giá trị đúng
hoặc sai tuỳ thuộc vào khách hàng có mua mặt hàng đó trong giao dịch hay
không. Trên thực tế, loại dữ liệu này rất phổ biến và đƣợc gọi là dữ liệu giỏ.
Chúng thƣờng đƣợc thu thập thông qua công nghệ mã số, mã vạch trong các
hoạt động kinh doanh siêu thị.
Một giao dịch có thể chứa một số khoản mục, tập hợp tất cả các khoản mục
sẽ thuộc vào một không gian T nào đó mà mỗi giao dịch khi đó là một tập con
của T. Ta cần phát hiện những mối tƣơng quan quan trọng hoặc mối quan hệ,
mối kết hợp trong số các khoản mục chứa trong các giao dịch của một dữ liệu
nào đó sao cho sự xuất hiện của một số khoả mục nào đó trong giao dịch sẽ kéo
theo sự xuất hiện của một số khoản mục khác trong cùng một giao dịch đó.
Ta sẽ tìm hiểu luật kết hợp cụ thể hơn ở phần sau.
Mô hình hoá sự phụ thuộc (Dependence Modeling)
Nhiệm vụ này liên quan đến việc phát hiện sự phụ thuộc trong số các thuộc
tính. Những phụ thuộc này thƣờng đƣợc biểu thị dƣới dạng luật “nếu thì”: “nếu
(tiên đề là đúng) thì (kết luận là đúng)”. Về nguyên tắc, cả tiên đề và kết luận
của luật đều có thể là sự kết hợp logic của các giá trị thuộc tính. Trên thực tế, 8
9
tiên đề thƣờng là nhóm các giá trị thuộc tính và kết luận chỉ là một giá trị tuộc
tính. Lƣu ý là những luật này không phải hoàn toàn giống với sự phụ thuộc
CSDL đƣợc nêu ở phần 2.2. Hơn nữa, hệ thống có thể phát hiện các luật với
phần kết luận nhiều thuộc tính. Điều này khác với luật phân lớp trong đó tất cả
các luật cần phải có cùng một thuộc tính do ngƣời dùng chỉ ra trong kết luận.
Mô hình hoá nhân quả (Causation Modeling)
Nhiệm vụ này liên quan đến việc phát hiện mối quan hệ nhân quả trong
thuộc tính. Các luật nhân quả cũng là các luật “nếu - thì” giống các luật phụ
thuộc, nhƣng mạnh hơn. Luật phụ thuộc đơn giản chỉ ra một mối tƣơng hỗ
giữa tiên đề và kết luận của luật mà không có ý nghĩa nhân quả trong quan hệ
này. Do đó, cả tiên đề và kết luận có thể quan hệ dƣới sự ảnh hƣởng của một
biến thứ ba, tức là một thuộc tính hoặc có ở trong tiên đề hoặc có ở trong kết
luận. Luật nhân quả không chỉ chỉ ra mối tƣơng quan giữa tiên đề và kết luận
mà còn cho biết tiên đề thực sự tạo ra kết luận và mối quan hệ giữa hai thành
phần này là trực tiếp. Tập các mối quan hệ nhân quả có thể đƣợc biểu diễn
bằng đồ thị nhân quả.
Các quan hệ nhân quả cần phụ thuộc vào thời gian theo nghĩa là nguyên
nhân trƣớc kết quả (kết luận). Nguyên nhân và kết quả đều có ít nhất một sự
kiện thời gian đi kèm và thời gian của kết quả phải đi sau thời gian của nguyên
nhân. Mặc dù yếu tố thời gian làm rõ ý nghĩa nhân quả nhƣng hệ thống thƣờng
khó phân biệt các liên kết giả tạo.
Phân cụm, nhóm (Clustering).
Một nhiệm vụ của các hệ thống phát hiện tri thức là phân tích các đối
tƣợng dữ liệu dạng nhƣ các giỏ hàng mà không quan tâm tới lớp của chúng.
Các hệ thống này phải tự phát hiện ra các lớp và sinh ra một sơ đồ phân nhóm
9
của tập dữ liệu đó.
10
Tuy nhiên, chất lƣợng của việc phân nhóm này là một vấn dề khó có thể
xác định đƣợc. Bài toán phân nhóm xác định các nhóm dựa vào quan hệ nhiều
- nhiều, tức là bất kỳ thuộc tính nào cũng có thể đƣợc sử dụng để xác định các
nhóm và để dự báo các giá trị thuộc tính khác. Điều này trái với cách xác định
nhiều - một liên quan đến nhiệm vụ phân lớp các đối tƣợng, trong đó, một
thuộc tính đƣợc xem nhƣ lớp và tất cả các thuộc tính khác đƣợc sử dụng để
phán đoán giá trị cho thuộc tính lớp.
Phân lớp (Classification)
Trong nhiệm vụ phân lớp, mỗi bộ dữ liệu theo dạng giỏ mua hàng thuộc
về một lớp nào đó đã đƣợc xác định trƣớc. Các bộ dữ liệu bao gồm tập các
thuộc tính dự báo và một thuộc tính phân lớp cụ thể. Lớp của bộ đƣợc chỉ ra
bởi giá trị của thuộc tính lớp mà ngƣời dùng xác định trƣớc.
Ta xét ví dụ sau: Giả sử, mỗi bộ dữ liệu biểu diễn các thông tin về nhân
viên, trong đó các thuộc tính dự báo là tuổi, giới tính, trình độ học vấn, ... của
nhân viên đó và thuộc tính phân lớp là trình độ lãnh đạo của nhân viên. Mục
tiêu của thuật toán phân lớp là tìm ra mối quan hệ nào đó giữa các thuộc tính
dự báo và thuộc tính phân lớp, từ đó sử dụng mối quan hệ này để dự báo lớp
cho các bộ dữ liệu mới khác cùng khuôn dạng.
Trong trƣờng hợp những kiến thức đƣợc phát hiện biểu diễn dƣới dạng
các luật thì khuôn dạng của luật có thể là: “nếu các thuộc tính dự báo của một
bộ dữ liệu thoả mãn các điều kiện của tiên đề, thì bộ dữ liệu đó có lớp chỉ ra
trong kết luận”.
Hồi quy (Regression)
Về khái niệm, nhiệm vụ hồi quy tƣơng tự nhƣ phân lớp. Điểm khác nhau
chính là ở chỗ thuộc tính để dự báo là liên tục chứ không phải rời rạc. Việc dự
báo các giá trị số thƣờng đƣợc làm bởi các phƣơng pháp thống kê cổ điển, chẳng
10
hạn nhƣ hồi quy tuyến tính. Tuy nhiên, các phƣơng pháp mô hình hoá cũng đƣợc
11
sử dụng, chẳng hạn nhƣ cây quyết định, trong đó nút lá là mô hình tuyến tính phát
sinh tập các lớp giả (pseudo - class) có giá trị thuộc tính đích tƣơng tự nhau, sau
đó sử dụng phƣơng pháp quy nạp để thay thế các lớp trong luật quy nạp bằng tổ
hợp các giá trị của thuộc tính lớp cho các bộ dữ liệu theo luật.
Tổng hợp (Sumarization)
Nhiệm vụ tổng hợp chính là sản sinh ra các mô tả đặc trƣng cho một lớp.
Mô tả này là một kiểu tổng hợp, tóm tắt mô tả các đặc tính chung của tất cả
(hoặc hầu hết) các bộ dữ liệu dạng giỏ mua hàng thuộc một lớp.
Các mô tả đặc trƣng thể hiện dƣới dạng luật có dạng sau: ”nếu một bộ dữ
liệu thuộc về một lớp đã chỉ ra trong tiên đề, thì bộ dữ liệu đó có tất cả các
thuộc tính đã nêu trong kết luận”. Cần lƣu ý là các luật này có những đặc trƣng
khác biệt so với luật phân lớp. Luật phát hiện đặc trƣng cho một lớp chỉ sản
sinh khi các bộ dữ liệu đã thuộc về lớp đó.
So sánh các nhiệm vụ phát hiện tri thức.
Điểm giống và khác giữa các nhiệm vụ phát hiện tri thức đƣợc tóm tắt
trong bảng sau:
Nhiệm vụ Kiểu phát hiện Mục đích Kiểu dự báo
Hƣớng hệ quản trị SQO Tối ƣu truy vấn Không học CSDL
Sự phụ thuộc Hƣớng hệ quản trị Thiết kế và duy trì Không học CSDL CSDL CSDL
Phát hiện sai lệch Mục đích chung Xác định trội Không học
11
Dự báo, xác định Phát hiện liên kết Mục đích chung Có học trội
12
Nhân quả Mục đích chung Dự báo, mô tả Không học
Phân nhóm Mục đích chung Dự báo, mô tả Không học
Phân lớp Mục đích chung Dự báo Có học
Hồi quy Mục đích chung Dự báo Có học
Bảng 1.1. So sánh các nhiệm vụ phát hiện tri thức
Tổng hợp Mục đích chung Dự báo Có học
Trong bảng này, cột đầu tiên chỉ ra nhiệm vụ phát hiện tri thức. Cột thứ
hai chỉ ra kiểu tri thức đƣợc phát hiện. Các kiểu có thể là hƣớng hệ quản trị
CSDL (nhƣ các luật SQO) hoặc phụ thuộc CSDL hoặc là mục đích chung (tức
là các nhiệm vụ phát hiện bổ trợ khác). Tri thức hƣớng hệ quản trị CSDL
thƣờng dùng trong thiết kế và giao dịch của một CSDL. Tuy nhiên, tri thức
hƣớng hệ quản trị CSDL cũng có thể dùng cho việc kiểm tra các luật tối ƣu
truy vấn ngữ nghĩa để cải thiện việc tìm hiểu ứng dụng. Trong khi tri thức theo
kiểu mục đích chung có thể đƣợc sử dụng theo các mục đích khác nhau tuỳ
thuộc vào nhu cầu của ngƣời dùng theo nghĩa mờ và nó có thể sử dụng hiệu
quả trong hệ quản trị CSDL. Tuy vậy, điểm khác biệt quan trọng là tri thức
hƣớng hệ quản trị CSDL yêu cầu độ chính xác cao hơn so với tri thức theo
mục đích chung.
Cột thứ ba trong bảng chỉ ra mục đích của việc phát hiện tri thức. Cột này
xuất phát từ cột hai. Mục đích chính của các tri thức hƣớng hệ quản trị CSDL
là khá cụ thể: Tối ƣu truy vấn (trong trƣờng hợp SQO) và thiết kế, duy trì
CSDL (trong trƣờng hợp sự phụ thuộc CSDL). Các tri thức theo kiểu mục đích
chung thƣờng đƣợc dùng co một sự kết hợp các mục đích dự báo, mô tả và xác
định trội. Dự báo liên quan đến xác định giá trị của các tri thức trên cơ sở xác
định giá trị của các thuộc tính khác. Kỹ thuật đặc trƣng là phân lớp và hồi quy.
12
Tuy nhiên, dự báo cũng dựa trên quan hệ nhân quả, mô hình hoá sự phụ thuộc
13
cũng nhƣ phát hiện luật kết hợp. Mô tả thƣờng gắn với tổng hợp, thông tin
gộp. Do vậy, mô tả là mục tiêu chính của phân nhóm và tổng hợp. Đối với hai
nhiệm vụ này, việc mô tả các thuộc tính chung của các tập dữ liệu đƣợc quan
tâm. Hơn nữa việc mô tả cũng khá quan trọng trong các nhiệm vụ xác định phụ
thuộc và quan hệ nhân quả. Cần chú ý là mục tiêu chính của phát hiện tri thức
phụ thuộc vào dạng mà tri thức biểu diễn, chẳng hạn, mạng nhân quả thích hợp
cho mục tiêu mô tả hơn là luật về sự phụ thuộc.
Cột thứ tƣ chỉ ra loại dự báo liên quan đến từng nhiệm vụ phát hiện tri
thức. Mặc dù các nhiệm vụ SQO và sự phụ thuộc CSDL phát hiện tri thức
hƣớng CSDL và theo mục tiêu cụ thể, nhƣng cũng có các nhiệm vụ dự báo liên
quan đến kiểu này. Nói chung, các nhiệm vụ SQO, sự phụ thuộc CSDL, liên
kết, nhân quả, sự phụ thuộc và phân cụm có kiểu dự báo nhiều - nhiều trong đó
giá trị của một vài thuộc tính có thể dùng để dự báo giá trị của các thuộc tính
khác. Một cách nhìn khác về quan hệ nhiều - nhiều là xem xét các nhiệm vụ
nhƣ một dạng phát hiện không có học, bởi vì ngƣời dùng không chỉ ra thuộc
tính mục tiêu và hệ thống có sự tự chủ hoàn toàn để quyết định thuộc tính nào
sẽ đƣợc đƣa ra trong tri thức. Nhiệm vụ phát hiện sự sai khác không hoàn toàn
đúng với mục tiêu dự báo nhƣng có thể nói nó liên quan đến việc phát hiện
không có học.
Nhiệm vụ phân lớp và hồi quy liên quan đến dự báo nhiều - một trong đó
giá trị của nhiều thuộc tính có thể đƣợc sử dụng để dự báo giá trị của một
thuộc tính do ngƣời dùng xác định trƣớc. Đối với nhiệm vụ tổng hợp, từ lớp
của một bộ dữ liệu, chúng ta có thể dự báo giá trị (hoặc khoảng giá trị, giá trị
trung bình, ...) của các thuộc tính khác. Tri thức đƣợc phát hiện phải bao gồm
quan hệ đó. Do vậy, tính tự chủ của hệ thống chỉ ở chỗ xác định các thuộc liên
quan đến giá trị thuộc tính đích và có hạn chế hơn so với các nhiệm vụ không
13
học. Tuy nhiên, các nhiệm vụ không học có thể chuyển thành có học.
14
Các đặc tính khác của phát hiện tri thức nhƣ tính thông minh và tính hữu
dụng không bao gồm trong bảng trên bởi vì chúng mang tính chủ quanvà thay
đổi lớn trong mỗi nhiệm vụ của từng kĩnh vực cụ thể.
Phát hiện tri thức hƣớng CSDL (SQO và sự phụ thuộc CSDL) có độ
chính xác cao. Đây là điểm khác biệt quan trọng so với các đòi hỏi của các
nhiệm vụ phát hiện tri thức khác. Nhiệm vụ phát hiện sự sai lệch liên quan đến
phát hiện tri thức với mức ý nghĩa do ngƣời dùng xác định. Nhiệm vụ phát
hiện liên kết cũng nhƣ thế với ngƣỡng tin cậy (ngƣỡng confidence) và tần suất
tƣơng đối (ngƣỡng hỗ trợ - support). Nhiệm vụ tổng hợp liên quan đến phát
hiện tri thức có tính phổ biến cao tức là luật đƣợc phát hiện phải bao hàm một
số dữ liệu (mà các nhiệm vụ khác nhƣ phân lớp không đòi hỏi nhƣ vậy).
Các nhiệm vụ nhƣ phát hiện sự phụ thuộc, nhân quả, phân lớp và hồi quy
14
chủ yếu liên quan đến phát hiện tri thức có độ chính xác cao.
15
CHƢƠNG II: MỘT SỐ KỸ THUẬT KHAI PHÁ LUẬT KẾT
HỢP
2.1 Lý thuyết về luật kết hợp
Khái niệm
Trong lĩnh vực Data Mining, mục đích của luật kết hợp (Association
Rule - AR) là tìm ra các mối quan hệ giữa các đối tƣợng trong một cơ sở dữ
liệu khổng lồ. Nội dung cơ bản của luật kết hợp đƣợc tóm tắt nhƣ sau:
-Cho cơ sở dữ liệu gồm các giao dịch T là tập các giao dịch t1, t2, …,
tn.
T = {t1, t2, …, tn}: T gọi là cơ sở dữ liệu giao dịch (Transaction
Database)
-Mỗi giao dịch ti bao gồm tập các đối tượng I (gọi là itemset).
I = {i1, i2, …, im}: Một itemset gồm k items gọi là k-itemset
-Mục đích của luật kết hợp là tìm ra sự kết hợp hay tương quan giữa
các items. Những luật kết hợp này có dạng X =>Y.
Trong kinh doanh, luật kết hợp X =>Y có thể hiểu rằng những ngƣời
mua các mặt hàng trong tập X cũng thƣờng mua các mặt hàng trong tập Y. (X
và Y gọi là itemset).
Ví dụ, nếu X = {Apple, Banana} và Y = {Cherry, Durian} và ta có luật
kết hợp X =>Y thì chúng ta có thể nói rằng những ngƣời mua Apple và
Banana thì cũng thƣờng mua Cherry và Durian.
Theo quan điểm thống kê, X đƣợc xem là biến độc
lập (Independent variable) còn Y đƣợc xem là biến phụ thuộc
15
(Dependent variable).
16
2.2 Thuật toán kinh điển
2.2.1. Thuật toán Apriori
- Thuật toán Apriori được dùng để phát hiện các luật kết hợp dạng
khẳng định (Positive Rule X=>Y) nhị phân (Binary Association Rules) chứ
không thể phát hiện các luật kết hợp ở dạng phủ định (Negative Association
Rule) chẳn hạn như các kết hợp dạng “Khách hàng mua mặt hàng A thường
KHÔNG mua mặt hàng B” hoặc “Nếu ủng hộ quan điểm A thường KHÔNG
ủng hộ quan điểm B”.
- Để 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).
- Minimum support và Minimum confidence gọi là các giá trị ngưỡng
và phải xác định trƣớc khi sinh các luật kết hợp.
2.2.2 Ý tƣởng
- Tìm tất cả frequent itemsets: (k-itemset (itemsets gồm k items) đƣợc
dùng để tìm (k+1)- itemset): đầu tiên tìm 1-itemset (ký hiệu L1). L1 đƣợc dùng
để tìm L2 (2-itemsets). L2 đƣợc dùng để tìm L3 (3-itemset) và tiếp tục cho đến
khi không có k-itemset đƣợc tìm thấy.
- Từ frequent itemsets sinh ra các luật kết hợp mạnh (các luật kết hợp
thỏa mãn 2 tham số min_sup và min_conf).
2.2.3 Thuật toán
B1. Duyệt (Scan) toàn bộ transaction database để có đƣợc support S của
1-itemset, so sánh S với min_sup, để có đƣợc 1-itemset (L1).
B2. Sử dụng Lk-1 nối (join) Lk-1 để sinh ra candidate k-itemset. Loại bỏ
các itemsets không phải là frequent itemsets thu đƣợc k-itemset.
B3. Scan transaction database để có đƣợc support của mỗi candidate k-
16
itemset, so sánh S với min_sup để thu đƣợc frequent k –itemset (Lk).
17
B4. Lặp lại từ bƣớc 2 cho đến khi Candidate set (C) trống (không tìm
thấy frequent itemsets).
B5. Với mỗi frequent itemset I, sinh tất cả các tập con s không rỗng của
I.
B6. Với mỗi tập con s không rỗng của I, sinh ra các luật s => (I-s) nếu
độ tin cậy (Confidence) của nó > =min_conf.
Ví dụ:
Chẳn hạn với I= {A1,A2,A5}, các tập con của I: {A1}, {A2}, {A5},
{A1,A2},{A1,A5},{A2,A5} sẽ có các luật sau
{A1} => {A2,A5},{A2} =>{A1,A5},{A5} =>{A1,A2}
{A1,A2} =>{A5},{A1,A5} =>{A2},{A2,A5} => {A1}
Ví dụ: Giả sử ta có có sở dữ liệu giao dịch (Transaction Database -
Hình 2.1. CSDL giao dịch
TDB) nhƣ sau :
Thuật toán Apriori khai phá luật kết hợp đƣợc mô tả qua các bƣớc sau(
17
với min-sup=2 (50%) và min-con =80%):
Hình 2.2. Minh họa các bước khai phá
18
Với frequent itemsets I ={B,C,E}, ta có tập con : {B}, {C}, {E},
{B,C},{B,E},{C,E}. Các luật đƣợc sinh ra với Confidence tƣơng ứng:
{B} => {C,E}:2/3,{C} =>{B,E}:2/3,{E} =>{B,C}:2/3
{B,C} =>{E}:2/2,{B,E} =>{C}:2/3,{C,E} => {B}:2/2
Với min_conf =80% ta có 2 luật kết hợp là:
Hình 2.3. Kết quả tìm luật kết hợp
{B,C} => {E} và {C,E} => {B}
Tuy nhiên thuật toán này có nhƣợc điểm sau:
- Tập C đƣợc tạo ra bằng cách kết những tập thƣờng xuyên với những
item trong giao tác, do đó phát sinh quá nhiều các tập không thƣờng xuyên
18
không cần thiết.
19
104 frequent 1-itemsets nhiều hơn 107 (≈104(104-1)/2) 2-
itemsets dự tuyển
Một k-itemset cần ít nhất 2k -1 itemsets dự tuyển trƣớc đó.
- Với mỗi tập ứng cử viên C, thuật toán phải duyệt lại toàn bộ cơ sở dữ
liệu để tính độ hỗ trợ, điều này làm tăng quá nhiều thời gian xử lý. Vì vậy,
thuật toán sẽ không đạt hiệu quả tốt đối với các cơ sở dữ liệu lớn.
Chi phí lớn khi kích thƣớc các itemsets tăng lên dần.
Nếu k-itemsets đƣợc khám phá thì cần kiểm tra tập dữ liệu k+1
lần.
2.3 Một số thuật toán luật kết hợp
2.3.1 Thuật toán Fp_Growth
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ích thƣớ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 mẫu nhiều, mẫu dài hoặc độ hỗ trợ cực tiểu thấp, các thuật toán
Apriori gặp phải chi phí lớn.
Chi phí cho số lƣợng khổng lồ các tập ứng cử. Ví dụ: nếu cứ 10^4 tập 1-
mục phổ biến thì thuật toán Apriori sẽ cần sinh ra hơn 10^7 các ứng cử 2-item
và thực hiện kiểm tra sự xuất hiện của chúng. Hơn nữa, để khám phá đƣợc một
số mẫu phổ biến kích thƣớc (độ dài) là l, thuật toán phải kiểm tra (2^l-2 ) các
mẫu phổ biến tiềm năng. Ví dụ l=100, chẳng hạn là {a1,a2,....,a100}, nó phải
sinh ra tổng số 2^100 =10^30 các ứng cử (đấy chính là số tập con của tập có
100 phần tử).
Đòi hỏi lặp lại nhiều lần duyệt CSDL để kiểm tra tập rất lớn các ứng cử.
Số lần duyệt CSDL của thuật toán Apriori bằng độ dài của mẫu phổ biến dài
nhất tìm đƣợc. Trong trƣờng hợp mẫu phổ biến dài hơn và CSDL lớn, có nhiều
19
bản ghi, điều này là không thể thực hiện đƣợc. Thuật toán Apriori chỉ thích
20
hợp cho các CSDL thƣa (sparse), với các CSDL dày (dense) thì thuật toán thực
hiện kém hiệu quả hơn.
Thuật toán tìm các tập phổ biến hiệu quả hơn thuật toán Apriori là thuật
toán Fp-tree và Fp-Growth.
2.3.2 Thuật toán Fp_Tree
Đƣợc gọi là cây mẫu phổ biến (frequent pattern tree hoặc gọi tắt là FP-
tree) dùng để nén dữ liệu thích hợp. Chỉ có các mục độ dài l (l-item) ở trong
cây và các nút của cây đƣợc sắp đặt để các nút xuất hiện thƣờng xuyên hơn có
thể dễ dàng chia sẻ với các nút xuất hiện ít hơn. CSDL lớn đƣợc nén chặt tới
cấu trúc dữ liệu nhỏ hơn (FP-tree), tránh đƣợc chi phí lặp lại duyệt qua CSDL.
Thuật toán xây dựng FP-tree:
Input: Cơ sở dữ liệu giao dịch DB và ngƣỡng hỗ trợ tối thiểu là ξ.
Output: Cây FP-Tree, cây chứa các mẫu phổ biến.
FP-tree được xây dựng theo các bước sau đây:
B1. Duyệt DB lần đầu để thu đƣợc tập F gồm các đối tƣợng phổ biến
(frequent item) và độ hỗ trợ (support count) của chúng. Sắp xếp các đối tƣợng
(item) trong F giảm dần theo supprort count ta đƣợc danh sách L.
B2. Tạo nút gốc T.
Tạo bảng Header H có |F| dòng và đặt tất cả các node –link chỉ đến null.
B3. For each giao tác G thuộc DB
a. Chọn các đối tƣợng phổ biến của G và sắp xếp theo thứ tự của danh
sách L đƣợc dạng [p, P], trong đó p là phần tử đầu tiên và P là danh sách còn
lại.
20
b. Call Insert_Tree([p,P], T);
21
2.3.3 Thuật toán Fast Algorithm for Discovering Frequent Itemsets (FIT)
Khai phá luật kết hợp là một vấn đề khai phá dữ liệu quan trọng đã đƣợc
nghiên cứu rông rãi. Một thuật toán nhanh và đơn giản cho danh sách các
thuộc tính giao nhau sử dụng Bảng dữ liệu hỏng đƣợc trình bày. FIT đƣợc
thiết kế để tính toán một cách hiệu quả tất cả các tập phổ biến trong cơ sở dữ
liệu lớn. Nó triển khai các ý tƣởng tƣơng tự nhƣ Eclat nhƣng có hiệu suất tính
toán tốt hơn nhiều so với Eclat do hai khía cạnh:
1) FIT có tổng số các phép so sánh ít hơn cho từng hoạt động giao nhau
giữa hai danh sách thuộc tính,
2) FIT giảm đáng kể tổng số hoạt động giao nhau. Các kết quả thực nghiệm
chứng minh rằng hiệu suất của FIT là tốt hơn nhiều so với các thuật toán
Apriori và Eclat
Với một cơ sở dữ liệu D, và minsup, mô tả chính thức của các phƣơng pháp
đơn giản đƣợc thể hiện nhƣ sau :
Bƣớc 1)
Chuyển đổi D vào các thuộc tính định dạng danh sách và tính toán
L1. Sắp xếp tài liệu và danh sách thuộc tính tƣơng ứng trong L1 vào trật
tự không tăng theo số lƣợng các thuộc tính trong danh sách. Đánh dấu
tất cả các tập phổ biến ở L1 không truy cập
Bƣớc 2)
Thiết lập một bảng băm (hb) với | D | mục.
Thiết lập từng mục trong hb đến -1. Đặt k đến 1.
Bƣớc 3)
Nếu tất cả các tập phổ biến trong Lk đã đƣợc truy cập, và k bằng 1, các
tính toán chấm dứt. Nếu tất cả các tập phổ biến trong Lk đã đƣợc truy
cập, và k không bằng 1, giảm k bằng 1.
21
Bƣớc 4)
22
Quét các danh sách thuộc tính của các tập phổ biến không truy cập đầu
tiên (X) trong Lk ,. Đối với mỗi thuộc tính (vx) bộ hb [vx] tới 1. Đánh
dấu X truy cập.
Bƣớc 5)
Quét các danh sách thuộc tính của bất kỳ của các tập phổ biến khác (Y)
theo sau X trong Lk. Đối với mỗi thuộc tính (ty), nếu hb [vy] bằng 0, loại
bỏ ty. Nếu hb [vy] bằng 1, đặt vy vào danh sách thuộc tính kết quả. Nếu
số lƣợng các thuộc tính trong danh sách thuộc tính kết quả là không ít
hơn minsup, đặt các tập phổ biến (X∩Y) và danh sách thuộc tính kết quả
vào Lk + 1. Đánh dấu các tập phổ biến X∩Y không truy cập trong Lk + 1
Bƣớc 6)
Thiết lập lại các mục trong hb đến -1. Nếu Lk+1 không phải là trống, tăng
k bằng 1 và quay trở lại bƣớc 4). Nếu không, đi đến bƣớc 3).
2.3.4 Thuật toán NSFI ALGORITHM
Khai thác tập phổ biến là một yếu tố cơ bản liên quan đến nhiều vấn đề
khai thác dữ liệu hƣớng vào việc tìm kiếm mô hình thú vị trong dữ liệu. Gần
đây các thuật toán PrePost, một thuật toán mới cho khai thác tập phổ biến dựa
trên ý tƣởng của N-list, mà trong nhiều trƣờng hợp làm tốt hơn. Tác giả đã đề
xuất một phiên bản cải tiến của PrePost, N-list và bao hàm dựa trên thuật toán
khai thác tập phổ biến (NSFI) thuật toán có sử dụng một bảng băm để tăng
cƣờng quá trình tạo ra các N-list liên kết với 1 tập phổ biến và tồn tại đƣợc cải
thiện N-list thuật toán giao nhau. Hơn nữa, hai định lý mới đƣợc đề xuất để
xác định '' bao hàm index '' của thƣờng xuyên 1-tập phổ biến dựa trên khái
niệm N-list. Sử dụng chỉ số bao hàm, NSFI có thể xác định các nhóm của tập
phổ biến mà không xác định N-list ch liên kết với chúng. Kết quả cho thấy
NSFI nhanh hơn so PrePost về thời gian chạy và sử dụng bộ nhớ và nhanh hơn
22
so với clat triển về mặt thời gian chạy.
23
Deng et al. [3] đề xuất một chức năng giao điểm N-danh sách để xác
định giao điểm của hai N-danh sách đó là O (n + m + k) trong đó n, m và k là
độ dài của đầu tiên, thứ hai và kết quả là N-danh mục (chức năng di chuyển
qua danh sách N- kết quả nhƣ vậy là để hợp nhất cùng PP-mã). Trong phần
này chúng tôi trình bày một chức năng giao điểm N-list đƣợc cải tiến để cung
cấp cho O (n + m). Chức năng cải tiến này cung cấp những lợi thế mà nó
không đi qua các kết quả N-list để hợp nhất các mã PP- cùng. Hơn nữa, chúng
tôi cũng đề xuất một chiến lƣợc đầu bỏ bao gồm ba bƣớc: (i) xác định tổng tần
số đầu tiên và thứ hai N-danh sách ký hiệu là SF, (ii) cho mỗi Ci PP-mã, mà
không thuộc về kết quả N-list, cập nhật SF = SF - C.frequency, và (iii) nếu SF
giảm xuống dƣới \ minSup xn] dừng lại (các tập phổ biến hiện đang đƣợc coi
là không thƣờng xuyên). Với các chức năng trên giao điểm N-list cải thiện
Thuật toán N-list cải tiến
function NL_intersection (PS1, PS2)
1. let PS3 ← ∅, sF ← σ(PS1) + σ (PS2), i = 0, j = 0 and f = 0
2. while i < |PS1 | and j < |PS2| do
3. if PS1[i].pre < PS2[j].pre then
4. if PSi[i].post > PS2[j].post then
5. if |PS3| > 0 and pre value of the last element in PS3 equal
to PS1[i].pre then
6. increase the frequency value of the last element in PS3 by
PS2[j ] .frequency
7. else
8. add the tuple (PS1[i].pre, PS1[i].post, PS2[j]. frequency)
to PS3
9. increase f by PS2[j ].frequency and increase j by 1
10. else
23
11. sF = sF - PSi[i] .frequency and increase i by 1
24
12. else
13. sF = sF - PS2[j].frequency and increase j by 1
14. if sF < threshold then
15. return null // stop the procedure
16. return PS3 and f
procedure Find_Subsume (l1) // chỉ số bao hàm thủ tục
1. for i ← 1 to | l1 | - 1 do 2. for j ← i - 1 to 0 do 3. if j ϵ l1 [i] .Subsumes then continue 4. if checkSubsume (l1 [i] N-list, l1 [j ] .N-list) is true then
5. add l1 [ j ] . name and its index, j, to l1[i].Subsumes
6. . add all elements in l1[j ]. Subsumes to l1[i] . Subsumes
function checkSubsume (Na, Nb)
1. . let i = 0 and j = 0
2. while j < | Na | and i < |Nb| do
3. if Nb [i] .pre < Na[j] .pre and Nb[i].post > Na[j].post then
4. increase j by 1
5. else increase i by 1
6. if j = |Na| then
7. return true
8. return false
Định lý đƣợc đề xuất trong Song et al, đƣợc đại diện trong phái. 2.5,
cũng đã đƣợc thông qua trong thuật toán NSFI để tăng tốc độ Thông qua hoạt
động của định lý này cũng giúp làm giảm nhu cầu sử dụng bộ nhớ các thuật
toán của NSFI, bởi vì nó không phải là cần thiết để xác định và lƣu trữ các N-
danh sách liên kết với một nhóm các tập phổ biến để xác định ngƣỡng hỗ trợ.
Đầu tiên các thuật toán NSFI tạo PPC-cây, sau đó đi qua cây này để tạo
24
ra N-danh sách liên quan đến việc thƣờng xuyên 1-itemset. Sau đó, một chiến
25
lƣợc chia-và-chinh phục, cùng với khái niệm chỉ số bao hàm, đƣợc sử dụng để
tôi tập phổ biến. Đối với mỗi phần tử X, nếu chỉ số bao hàm của nó có các yếu
tố, tập hợp các tập phổ biến đƣợc sản xuất bằng cách kết hợp với các yếu tố X
trong chỉ số bao hàm của nó là thƣờng xuyên và có sự hỗ trợ tƣơng tự nhƣ X.
Đối với mỗi nguyên tố còn lại không đƣợc chứa trong các bao hàm chỉ số của
X, thuật toán sẽ kết hợp chúng với X để tạo ra các tập phổ biến ứng cử viên
thƣờng xuyên. Lƣu ý rằng đối với 2 tập phổ biến hoặc nhiều hơn, thuật toán
không sử dụng các chỉ số bao hàm.
Thuật toán NSFI ALGORITH
Input: A dataset DB and minSup
Output: FIs, the set of all frequent itemsets
1. Construct_PPC_tree (DB, minSup) to generate R., l1, H1 and threshold
2. Generate_NList (R, l1)
3. Find_Subsume (l1)
4. let FIs ← l1 and Subsume ← {}
5. Find_FIs (l1, Subsumes)
6. return FIs
procedure Generate_NList (R, l1)
1. let C ← (R.pre, R.post, R. frequency)
2. add C to H1[R. .name] .N-list
3. increase H1 [R. .name] . frequency by C. frequency
4. for each child in R. .children do
5. Generate_NList(child)
procedure Find_FIs (Is, S)
1. for i ← Is. size - 1 to 0 do
2. let FIsnext ← 0
25
3. if | Is [i] . Subsumes | > 0 then
26
4. let S be the set of subset generated from all elements of
Is [i] . Subsumes
5. for each s in S do
6. add (s. Is [i] . frequency) to FIs //using theorem 4
7. else if |Is[i] | = 1 then
8. S ← {}
9. indexS = |Is [i] .Subsumes | - 1
10. for j ← i - 1 to 0 do
11. if indexS ≥ 0 and Is [i].Subsumes[indexS] = j then 12. indexS = indexS - 1 and continue
13. let efirst be the first item of Is[j]
14. FI ← { efirst } + Is[i] 15. (FI.N-list and FI. frequency) ← NL_intersection (Is [j ] .N-list, Is [i] .N-list)
16. if FI.N-list = null then continue
17. if(FI.frequency ≥ threshold) then
18. add FI to FIs
19. insert FI at first in FIsnext
20. for each subsume in S do
21. let f = FI + subsume
22. f.frequency = FI.frequency
23. add f to FIs // using theorem 4
24. Find_FIS (FIsnext, S)
2.4 Thuật toán FSM
Năm 2005, Yu-Chiang Li và đồng nghiệp tại Khoa Khoa học máy tính và
Kỹ thuật thông tin của Đại học Chung Chen, Đài Loan giới thiệu thuật toán
FSM (Fast Share Measure), đây là một thuật toán hiệu quả tìm ra tất cả các tập
mục cổ phần cao. Thay vì khai thác tính chất Apriori, thuật toán FSM sử dụng
26
một số tính chất của tập mục cổ phần cao để rút gọn các tập mục ứng viên.
27
2.4.1 Cơ sở lý thuyết của thuật toán FSM
Ký hiệu:
Giá trị cổ phần tối thiểu (minimum local measure value) là min_lmv,
min_lmv= minShare x Tmv;
Độ dài cực đại (maximum length) của các giao tác trong cơ sở dữ liệu là
ML,
;
Giá trị cực đại (maximum value) của tất cả các mục trong cơ sở dữ liệu
là MV,
.
Cơ sở lý thuyết của thuật toán đƣợc thể hiện trong mệnh đề sau:
Cho minShare và k-itemset X không là tập mục cổ phần cao. Nếu:
thì tất cả các tập cha của X không là tập mục cổ phần cao.
Đặt , CF(X) gọi là hàm tới hạn.
Mệnh đề trên đảm bảo rằng: nếu X không là tập mục cổ phần cao và
thì không có tập cha nào của X là tập mục cổ phần cao.
Thuật toán FSM dựa vào mệnh đề này để tỉa các tập mục ứng viên.
2.4.2 Nội dung cơ bản của thuật toán FSM
Thuật toán duyệt nhiều lần CSDL, ở lần duyệt thứ k, Ck lƣu các tập mục
ứng viên, RCk lƣu các tập mục nhận đƣợc sau khi kiểm tra hàm tới hạn CF, Fk
lƣu các tập mục cổ phần cao nhận đƣợc.
Giống nhƣ thuật toán Apriori, ban đầu mỗi mục dữ liệu là một ứng viên.
Trong lần duyệt thứ nhất, thuật toán duyệt cơ sở dữ liệu, tính giá trị của mỗi
mục dữ liệu. Mỗi ứng viên 1- tập mục X sẽ bị tỉa nếu CF(X)< min_lmv. Trong
27
mỗi lần duyệt tiếp theo, các tập mục ứng viên đƣợc tạo ra bằng cách nối hai (k-
28
1)-itemset trong RCk-1 nếu chúng có (k-2) mục đầu giống nhau và nhận đƣợc k-
itemset, kết nạp vào tập Ck (giả sử các mục của cơ sở dữ liệu đã đƣợc sắp thứ
tự). Tất cả k tập con với độ dài (k-1) của mỗi k-itemset trong Ck là phải thuộc
RCk-1 , nếu không k-itemset này sẽ bị tỉa. Sau khi Ck đƣợc sinh ra, xóa tập RCk-1
. Tiếp theo, thuật toán duyệt cơ sở dữ liệu để tìm tập mục cổ phần cao. Với mỗi
thì X là tập mục cổ tập mục X trong Ck , nếu tập mục này có
phần cao và đƣợc thêm vào Fk; Ngƣợc lại, xét hàm tới hạn CF, nếu
thì tập ứng viên X bị loại khỏi RCk. Quá trình trên cứ lặp
cho đến khi không có tập mục ứng viên nào đƣợc sinh ra.
2.4.3. Một số khái niệm của thuật toán
Cho tập các mục (item) . Một giao tác (transaction) T là một
tập con của I, TI. Cơ sở dữ liệu là một tập các giao tác .
Mỗi giao tác đƣợc gán một định danh TID. Một tập mục con , gồm k
mục phân biệt đƣợc gọi là một k-itemset. Giao tác T gọi là chứa tập mục X
nếu .
MV (Measure Value – Giá trị tập mục trong giao tác): Ta ký hiệu giá trị
, có giá trị là số tự nhiên của mục ip trong giao tác Tq là
(nhƣ số lƣợng đã bán của một mặt hàng trong giao tác), tức là,
nếu và nếu .
TMV (Transaction Measure Value – Giá trị giao tác): Giá trị của giao tác
Tq là tổng giá trị các mục dữ liệu trong giao tác, ký hiệu là tmv(Tq), tức là
. Tổng giá trị các mục dữ liệu trong cơ sở dữ liệu DB,
ký hiệu là Tmv, . Tƣơng tự, với cơ sở dữ liệu con
28
, .
29
Ví dụ 2.1 : Cho cơ sở dữ liệu bảng 2.1, mv(D,T01)=1, mv(C,T03)=3,
tmv(T01)=7, tmv(T03)=10, Tmv(DB) = 56.
TID A C D E F G H tmv B
T01 T02 T03 T04 T05 T06 T07 T08 lmv 1 0 0 0 0 0 0 4 5 1 0 4 0 3 3 3 0 14 1 0 3 0 2 1 1 0 8 1 0 0 1 0 0 2 0 4 0 4 0 0 0 0 0 1 5 1 0 0 0 0 0 0 1 2 1 3 0 0 0 0 0 0 4 7 7 10 5 5 6 10 6 56
1 0 3 4 0 2 4 0 14 Bảng 2.1. Cơ sở dữ liệu
Ký hiệu là tập các giao tác chứa tập mục X,
.
IMV (Itemset Measure Value): Cho giao tác Tq chứa tập mục X. Giá trị của
tập mục X trong Tq, ký hiệu , là tổng giá trị của các mục ip trong
thuộc X, , với .
LMV (Local Measure Value):Cho tập mục X, là tập các giao tác chứa X.
Giá trị của tập mục X ký hiệu lmv(X), là tổng giá trị của tập mục X tại các
giao tác trong , tức là .
Sh (Share Value): Cổ phần hay đóng góp của tập mục X , ký hiệu là Sh(X), là
tỉ số giữa giá trị của tập mục X và tổng giá trị của tất cả các mục trong cơ sở dữ
liệu, tức là: .
Sh(X) cho biết trong tổng giá trị của tất cả các mục dữ liệu trong cơ sở dữ
29
liệu thì giá trị của tập X chiếm bao nhiêu phần trăm. Ví dụ, với CSDL giao tác
30
bán hàng, Sh(X)=30% tức là trong tổng số lƣợng hàng đã bán đƣợc thì số
lƣợng các mặt hàng trong X chiếm 30%.
MinShare: ngƣỡng cổ phần (minimum share) minShare s% và tập mục X. X
đƣợc gọi là tập mục cổ phần cao nếu Sh(X) ≥ minShare. Trƣờng hợp ngƣợc
lại, X đƣợc gọi là tập mục cổ phần thấp.
Ký hiệu giá trị cổ phần tối thiểu (minimum local measure value) là
min_lmv, min_lmv= minShare x Tmv, có thể thay điều kiện Sh(X) ≥ minShare
trong định nghĩa 2.4 bởi điều kiện .
Ví dụ: Xét cơ sở dữ liệu cho ở bảng 2.1 và minShare=30% . Bảng 2.2 là
giá trị của các mục dữ liệu và cổ phần của chúng.
Mục dữ liệu A B C D E F G H Tổng số
5 14 14 8 4 5 2 4 56 lmv(ip)
Bảng 2.2. Giá trị lmv và cổ phần của các mục dữ liệu trong CSDL bảng 2.1.
8,9% 25,0% 25,0% 14,3% 7,1% 8,9% 3,6% 7,1% 100% Sh(ip)
Xét , giá trị của tập mục X là:
Đóng góp của tập mục X:
Do đó, là tập mục cổ phần cao.
Bảng 2.3 biểu diễn tất cả các tập mục cổ phần cao của cơ sở dữ liệu bảng
2.1.
Bảng 2.3: Các tập mục cổ phần cao của CSDL bảng 2.1.
Tập mục BD BCD BC
cổ phần cao lmv(X) 22 27 21
30
Sh(X) 37,5% 39,3% 48,2%
Bảng 2.3. Các tập mục cổ phần cao của CSDL bảng 2.1.
31
2.4.4 Nội dung bài toán:
Cho CSDL giao tác DB và ràng buộc cổ phần minShare, khai phá tập mục cổ
phần cao là tìm tập HS (High Share), chứa tất cả các tập mục cổ phần cao, tức
là tập .
Thủ tục mô tả thuật toán FSM nhƣ sau :
Thuật toán FSM
Input: Cơ sở dữ liệu giao tác DB, ngƣỡng cổ phần minShare (s%).
Output: Tập F gồm các tập mục cổ phần cao.
Method:
1. k:=1, F1:=, C1:=I;
2. for each TDB // duyệt cơ sở dữ liệu DB
3. tính giá trị lmv(ip) và CF(ip) của các mục ip trong C1 ;
4. for each ipC1
5. if lmv(ip) ≥min_lmv then
6.
7. else if then
8.
9.
11. for k:=2 to h
12. begin
13. for each Xp, Xq ∈RCk-1
14. Ck :=Apriori-join(Xp, Xq);
15. for each T∈DB // duyệt cơ sở dữ liệu DB
16. tính giá trị lmv(X) và CF(X) của các ứng viên X trong Ck;
31
17. for each X∈Ck
32
18. if lmv(X)≥ min_lmv
19.
20. else if CF(X) 21. 22. RCk:= Ck; 22. end 23. return ; Nhận xét: - Dữ liệu cho khai phá tập mục phổ biến là trƣờng hợp đặc biệt của dữ liệu cho khai phá cổ phần cao khi tất cả các mục dữ liệu trong các giao tác có giá trị là 0 hoặc 1. - Tập mục cổ phần cao mang ý nghĩa khác với tập mục phổ biến. Tập mục phổ biến chỉ quan tâm đến số lần xuất hiện của tập mục trong các giao tác, trong khi đó tập mục cổ phần cao quan tâm đến tổng giá trị các mục dữ liệu của tập mục trong các giao tác. Tập mục phổ biến quan tâm xem nhóm hàng X (tập mục) có bán đƣợc hay không mà bỏ qua các tham số rất quan trọng là tổng số lƣợng hàng bán đƣợc hoặc tổng lợi nhuận mang lại,…Với ngƣỡng minShare cho trƣớc, một tập mục X có thể chỉ chứa trong một số ít giao tác của CSDL nhƣng lại là tập mục cổ phần cao nếu cổ phần Sh(X) của nó vƣợt ngƣỡng minShare. Kể cả khi khai phá trên tập dữ liệu có giá trị nhị phân ( 0 hoặc 1) thì khai phá tập mục cổ phần cao cũng cho kết quả khác với khai phá tập mục phổ biến. Chẳng hạn, với CSDL cho trong bảng 2.4, tập mục chỉ xuất hiện trong giao tác T01, có cổ phần và độ hỗ trợ . Nếu ngƣỡng cổ phần minShare=30% thì X là tập mục cổ phần cao, cũng lấy ngƣỡng độ hỗ trợ minsup=30% thì X không 32 phải tập mục phổ biến. 33 TID A B C D E F G H tmv 1
0
0
1
0
2 1
1
1
0
0
3 1
0
0
0
0
1 1
0
0
0
0
1 0
0
1
0
0
1 1
0
0
0
0
1 0
0
0
1
0
1 6
1
T01
1
0
T02
2
0
T03
2
0
T04
1
1
T05
12
2
lmv
Bảng 2.4. CSDL minh họa ngữ nghĩa của tập mục cổ phần cao. - Tính chất cơ bản đƣợc khai thác để xây dựng các thuật toán khai phá tập mục phổ biến là tính chất Apriori. Dễ thấy, tính chất này không còn đúng với ràng buộc cổ phần. Ví dụ, xét cơ sở dữ liệu ở bảng 2.1 với minShare=30%, lmv(BCD)=27, lmv(BC)=21, lmv(B)=14, Sh(BCD)=27/56=48,2%, Sh(BC)=21/56=37,5%, Sh(B)=14/56=25,0%. Nhƣ vậy, BCD là tập mục cổ phần cao, tập con của nó BC là tập mục cổ phần cao nhƣng tập con khác B lại không phải. Do đó không thể áp dụng các thủ pháp sử dụng tính chất Apriori vào việc khai phá tập mục cổ phần cao. Đã có nhiều công trình nghiên cứu các thuật toán tìm tập mục cổ phần cao, các tác giả đã đề xuất một số thuật toán nhƣ thuật toán ZP, ZSP, SIP, FSM. Trong số các thuật toán đó, thuật toán FSM là 33 một thuật toán hiệu quả. 34 3.1. Phát biểu bài toán: Vào thời điểm cuối năm học, sau khi có bảng điểm của lớp, của trƣờng và muốn đƣa ra một vài kết luận nào đó về tình hình học tập của học sinh trƣờng mình phụ trách. Nhà trƣờng cùng các thầy cô bộ môn sẽ làm sẽ thực hiện: - Thứ nhất : tính điểm trung bình. Đây là một trong những cách đơn giản nhất. Dựa vào điểm trung bình có thể đƣa ra vài nhận xét về tình hình học tập của học sinh. Giả sử năm nay điểm trung bình tổng kết của của một học sinh là 7.5 nhƣ vậy có thể nhận xét “nóng vội” cho rằng rằng năm nay học sinh này học chƣa tốt. Tất nhiên những nhận xét này là “nóng vội” vì có thể có học sinh điểm rất cao, ngƣợc lại cũng có điểm rất thấp. Rõ ràng tính trung bình rất đơn giản và “mạnh mẽ” nhƣng không đánh giá hết đƣợc năng lực của học sinh đó. Ví dụ: học sinh đó học môn Toán, Sinh học,Thể dục học rất tốt thì em đó có thể phát triển năng khiếu Thể dục thể thao…. - Thứ hai, dựa vào điểm tổng kết trung bình môn khó có thể đánh giá đƣợc hết đƣợc các môn yếu kém của học sinh hoặc những năng khiếu của học sinh cũng nhƣ trình độ chuyên môn của giáo viên. Ban giám hiệu không có đánh giá chính xác đƣợc cần khắc phục yếu kém môn nào, cần đầu tƣ trọng điểm. - Thứ 3: Học sinh không biết mình nên tập chung chọn môn nào để thi đại học, hay không biết chọn nghành nghề trong tƣơng lai. Vài dòng nêu trên để chúng ta thấy đƣợc rằng việc phân tích, đánh giá kết quả học tập của học sinh trong nhà trƣờng không phải là chuyện đơn giản. Nó đòi hỏi Ban giám hiệu nhà trƣờng, các nhà quản lý giáo dục có một sự đầu tƣ, nghiên cứu, tìm tòi và sáng tạo nhằm đƣa ra đƣợc các phân tích, đánh giá 34 đúng đắn nhất, chính xác nhất về kết quả học tập của học sinh từ đó đề ra định 35 hƣớng, hoạch định cho nhà trƣờng trong việc đầu tƣ bồi dƣỡng giáo viên bộ môn còn yếu, phát hiện học sinh giỏi để bồi dƣỡng, học sinh kém để phụ đạo, có kế hoạch tăng giờ, tăng tiết, định hƣớng nghề nghiệp cho học sinh dựa trên sở thích, năng khiếu môn học v.v… Bản thân cũng đã và đang từng trải qua những khó khăn, vất vả trên và em cố gắng vận dụng những kiến thức đƣợc học tại lớp Cao học ngành khoa học máy tính của Trƣờng Đại học Công nghệ thong tin và truyền thông Thái Nguyên để đƣa ra một công cụ hỗ trợ phân tích điểm số của học sinh ra đa dạng hơn, đa chiều hơn, nhiều góc độ hơn nhằm giúp cho Ban giám hiệu, các nhà quản lý giáo dục có thêm cơ sở để đánh giá đúng đắn nhất, chính xác nhất về tình hình học tập của học sinh, hoạt động giảng dạy của giáo viên và giúp các em có sự đánh giá chính xác năng lực và năng khiếu của mình trong việc định hƣớng tƣơng lai. 3.2 Lựa chọn phƣơng pháp Trong các thuật toán luật kết họp đã tìm hiểu ở Chƣơng 2 thì thuật toán FMS có tốc độ tƣơng đối nhanh, thích hợp với dữ liệu số khi không có phần tử ngoại lai hay giá trị nhiễu. Và thật vậy, dữ liệu điểm của học sinh hiện nay đáp ứng tốt yêu cầu của thuật toán FSM (dữ liệu số, điểm số trải dài chỉ từ 0- 10 và không có phần tử nhiễu). Từ đó, em mạnh dạn đề xuất sử dụng thuật toán FSM để giải quyết bài toán đƣa ra. 3.3 Cài đặt và thử nghiệm 3.3.1. Môi trƣờng cài đặt và thử nghiệm Chƣơng trình minh họa các thuật toán phân mảnh đƣợc viết bằng ngôn ngữ C# trên bộ Visual Studio 2013 sử dụng phiên bản .Net Framewok 4.0. Yêu cầu tối thiểu của hệ thống khi sử dụng chƣơng trình: 35 - Cài đặt .Net Framework phiên bản 4.0 trở lên. 36 3.3.2 Cài đặt thuật toán tìm luật kết hợp Mô tả dữ liệu đầu vào Dữ liệu về điểm số của trƣờng Trung học đƣợc lƣu trữ dƣới dạng tệp excel nhƣ sau: Để chuẩn hóa dữ liệu sử dụng trong thuật toán, tệp đầu vào cần đƣợc xử lý qua các bƣớc sau: Loại bỏ các môn học mà có điểm số là chữ (ví dụ mộ Mỹ thuật ở hình trên) Chuyển tên các môn học về dạng không dấu và xóa bỏ dấu cách Lƣu lại tệp dƣới dạng file .csv Sau bƣớc xử lý, tệp dữ liệu đầu vào của chƣơng trình sẽ có cấu trúc nhƣ sau: Dòng đầu tiên ghi tên của các môn hoc, mỗi môn học đƣợc phân cách nhau bằng dấu phẩy Mỗi bản ghi về điểm đƣợc biểu diễn trên một dòng, mỗi dòng chứa 36 giá trị về điểm của các môn học 37 Các giá trị của mỗi môn học đƣợc biểu diễn bằng số thực, phân cách nhau bởi dấu phẩy, các điểm không có giá trị thì đƣợc biểu diễn bằng giá trị 0. Hình 3.1. Ví dụ về dữ liệu đầu vào cho thực nghiệm Ví dụ về tệp dữ liệu điểm học sinh sau khi chuyển đổi về dạng chuẩn: 3.3.3 Một số giao diện chƣơng trình Hình 3.2. Giao diện chương trình thực hiện 37 Giao diện chính của chƣơng trình nhƣ sau: 38 Để thực hiện thuật toán, chọn vào nút “Chọn tệp” và lựa chọn tệp dữ liệu theo đúng định dạng đƣợc mô tả trong 3.3.2. Sau khi chƣơng trình tải dữ liệu vào bộ nhớ, ta nhập ngƣỡng cổ phần tối thiểu (minShare) để tìm tập mục cổ phần cao và ngƣỡng tin cậy tối thiểu (minConf) để tìm các luật kết hợp thỏa mãn, sau đó nhấn nút “Thực hiện”. Kết quả thử nghiệm với bộ dữ liệu mẫu trong hình 3.1 với ngƣỡng minShare = 40% và minConf = 95% nhƣ sau: Hình 3.3.Kết quả 3.4 Đánh giá: - Dựa vào kết quả *, Với các tập phổ biến có trọng số( NguVan, Toan, VatLy, TinHoc) 38 đƣợc các tập luật sau: 39 NguVan Toan,VatLy, TinHoc có độ tin cậy là : 100% Toan NguVan, VatLy,TinHoc có độ tin cậy là : 100% VatLy NguVan, Toan, TinHoc có độ tin cậy là : 100% TinHoc NguVan, Toan,VatLy, có độ tin cậy là : 100% NguVan, Toan VatLy, TinHoc có độ tin cậy là : 100% NguVan, VatLy Toan, TinHoc có độ tin cậy là : 100% Toan,VatLy NguVan, TinHoc có độ tin cậy là : 100% Toan,Tin Hoc NguVan, VatLy có độ tin cậy là : 100% VatLy,Tin Hoc NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, VatLy TinHoc có độ tin cậy là : 100% NguVan, Toan, TinHoc VatLy có độ tin cậy là : 100% NguVan, VatLy, TinHoc Toan có độ tin cậy là : 100% Toan, VatLy, TinHoc NguVan có độ tin cậy là : 100% *, Với các tập phổ biến có trọng số( NguVan, Toan, SinhHoc, TinHoc) đƣợc các tập luật sau: NguVan Toan,SinhHoc, TinHoc có độ tin cậy là : 100% Toan NguVan, SinhHoc,TinHoc có độ tin cậy là : 100% SinhHoc NguVan, Toan, TinHoc có độ tin cậy là : 100% TinHoc NguVan, Toan,SinhHoc, có độ tin cậy là : 100% NguVan, Toan SinhHoc, TinHoc có độ tin cậy là : 100% NguVan, SinhHoc Toan, TinHoc có độ tin cậy là : 100% 39 Toan,SinhHoc NguVan, TinHoc có độ tin cậy là : 100% 40 Toan,Tin Hoc NguVan, SinhHoc có độ tin cậy là : 100% SinhHoc,Tin Hoc NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, SinhHoc TinHoc có độ tin cậy là : 100% NguVan, Toan, TinHoc SinhHoc có độ tin cậy là : 100% NguVan, SinhHoc, TinHoc Toan có độ tin cậy là : 100% Toan, SinhHoc, TinHoc NguVan có độ tin cậy là : 100% *, Với các tập phổ biến có trọng số( NguVan, Toan, LichSu, TinHoc) đƣợc các tập luật sau: NguVan Toan,LichSu, TinHoc có độ tin cậy là : 100% Toan NguVan, LichSu,TinHoc có độ tin cậy là : 100% LichSu NguVan, Toan, TinHoc có độ tin cậy là : 100% TinHoc NguVan, Toan,LichSu, có độ tin cậy là : 100% NguVan, Toan LichSu, TinHoc có độ tin cậy là : 100% NguVan, LichSu Toan, TinHoc có độ tin cậy là : 100% Toan, LichSu NguVan, TinHoc có độ tin cậy là : 100% Toan,Tin Hoc NguVan, LichSu có độ tin cậy là : 100% LichSu,Tin Hoc NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, LichSu TinHoc có độ tin cậy là : 100% NguVan, Toan, TinHoc LichSu có độ tin cậy là : 100% NguVan, LichSu, TinHoc Toan có độ tin cậy là : 100% 40 Toan, LichSu, TinHoc NguVan có độ tin cậy là : 100% 41 *, Với các tập phổ biến có trọng số( NguVan, Toan, LichSu, CongNghe) đƣợc các tập luật sau: NguVan Toan,LichSu, CongNghe có độ tin cậy là : 100% Toan NguVan, LichSu,CongNghe có độ tin cậy là : 100% LichSu NguVan, Toan, CongNghe có độ tin cậy là : 100% CongNghe NguVan, Toan,LichSu, có độ tin cậy là : 100% NguVan, Toan LichSu, CongNghe có độ tin cậy là : 100% NguVan, LichSu Toan, CongNghe có độ tin cậy là : 100% Toan, LichSu NguVan, CongNghe có độ tin cậy là : 100% Toan, CongNghe NguVan, LichSu có độ tin cậy là : 100% LichSu, CongNghe NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, LichSu CongNghe có độ tin cậy là : 100% NguVan, Toan, CongNghe LichSu có độ tin cậy là : 100% NguVan, LichSu, CongNghe Toan có độ tin cậy là : 100% Toan, LichSu, CongNghe NguVan có độ tin cậy là : 100% *, Với các tập phổ biến có trọng số( NguVan, Toan, DiaLy, CongNghe) đƣợc các tập luật sau: NguVan Toan, DiaLy, CongNghe có độ tin cậy là : 100% Toan NguVan, DiaLy, CongNghe có độ tin cậy là : 100% DiaLy NguVan, Toan, CongNghe có độ tin cậy là : 100% CongNghe NguVan, Toan, DiaLy, có độ tin cậy là : 100% 41 NguVan, Toan DiaLy, CongNghe có độ tin cậy là : 100% 42 NguVan, DiaLy Toan, CongNghe có độ tin cậy là : 100% Toan, DiaLy NguVan, CongNghe có độ tin cậy là : 100% Toan, CongNghe NguVan, DiaLy có độ tin cậy là : 100% DiaLy, CongNghe NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, DiaLy CongNghe có độ tin cậy là : 100% NguVan, Toan, CongNghe DiaLy có độ tin cậy là : 100% NguVan, DiaLy, CongNghe Toan có độ tin cậy là : 100% Toan, DiaLy, CongNghe NguVan có độ tin cậy là : 100% *, Với các tập phổ biến có trọng số( NguVan, Toan, DiaLy, TinHoc) đƣợc các tập luật sau: NguVan Toan, DiaLy, TinHoc có độ tin cậy là : 100% Toan NguVan, DiaLy, TinHoc có độ tin cậy là : 100% DiaLy NguVan, Toan, TinHoc có độ tin cậy là : 100% TinHoc NguVan, Toan, DiaLy, có độ tin cậy là : 100% NguVan, Toan DiaLy, TinHoc có độ tin cậy là : 100% NguVan, DiaLy Toan, TinHoc có độ tin cậy là : 100% Toan, DiaLy NguVan, TinHoc có độ tin cậy là : 100% Toan, TinHoc NguVan, DiaLy có độ tin cậy là : 100% DiaLy, TinHoc NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, DiaLy TinHoc có độ tin cậy là : 100% NguVan, Toan, TinHoc DiaLy có độ tin cậy là : 100% 42 NguVan, DiaLy, TinHoc Toan có độ tin cậy là : 100% 43 Toan, DiaLy, TinHoc NguVan có độ tin cậy là : 100% *, Với các tập phổ biến có trọng số( NguVan, Toan, TiengAnh, TinHoc) đƣợc các tập luật sau: NguVan Toan, TiengAnh, TinHoc có độ tin cậy là : 100% Toan NguVan, TiengAnh, TinHoc có độ tin cậy là : 100% TiengAnh NguVan, Toan, TinHoc có độ tin cậy là : 100% TinHoc NguVan, Toan, TiengAnh, có độ tin cậy là : 100% NguVan, Toan TiengAnh, TinHoc có độ tin cậy là : 100% NguVan, TiengAnh Toan, TinHoc có độ tin cậy là : 100% Toan, TiengAnh NguVan, TinHoc có độ tin cậy là : 100% Toan, TinHoc NguVan, TiengAnh có độ tin cậy là : 100% TiengAnh, TinHoc NguVan, Toan có độ tin cậy là : 100% NguVan, Toan, TiengAnh TinHoc có độ tin cậy là : 100% NguVan, Toan, TinHoc TiengAnh có độ tin cậy là : 100% NguVan, TiengAnh, TinHoc Toan có độ tin cậy là : 100% Toan, TiengAnh, TinHoc NguVan có độ tin cậy là : 100% …. Một số ý nghĩa rút ra đƣợc từ các luật trên: - Đa số các em học sinh có kết quả học tập tốt thì có rất nhiều lựa chọn 43 cho mình học theo khối nào mình yêu thích 44 - Đây là tín hiệu đáng mừng cho thành tích của nhà trƣờng và giáo viên vì đây là nguồn học sinh giỏi cần bồi dƣỡng để thi học sinh giỏi cấp thành phố và quốc gia - Bên cạnh đó nhà trƣờng cũng quan tâm tới các lớp có số lƣợng học sịnh còn yếu, phụ đạo cho các em để các em có thành tích tôt hơn. Để các em có thể thi vào các trƣờng Đại học, Cao đẳng hoặc các trƣờng dạy nghề. - Nhà trƣờng cũng sẽ quan tâm tới các giáo viên bộ môn còn yếu trong trình độ chuyên môn và năng lực. Các giáo viên bộ môn còn yếu về trình độ và 44 năng lực thì tự mình nâng cao cho phù hợp với điều kiện hiện tại của trƣờng. 45 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN Kết Luận Luận văn đề cập đến các nội dung về kho dữ liệu và ứng dụng của lƣu trữ và khai phá tri thức trong kho dữ liệu nhằm hỗ trợ ra quyết định. Về mặt lý thuyết, 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; khai phá dữ liệu, rút ra các tri thức; sử dụng các tri thức phát hiện đƣợc. Phƣơng pháp khai phá dữ liệu có thể là: phân lớp, hồi quy, cây quyết định, suy diễn, quy nạp, K- láng giềng gần, … các phƣơng pháp trên có thể áp dụng trong dữ liệu thông thƣờng và trên tập mờ. Về thuật toán khai phá tri thức, luận văn trình bày một số thuật toán và minh hoạ một số thuật toán kinh điển về phát hiện tập chỉ báo phổ biến và khai phá luật kết hợp, nhƣ: Apriori, AprioriTid, Fp_Growth , NSFI ALGORITHM ,FIT, PPC-tree. Về mặt cài đặt thử nghiệm, luận văn giới thiệu kỹ thuật khai phá dữ liệu theo thuật toán FSM áp dụng vào bài toán xây dựng hỗ trợ học sinh phổ thông Tân Lập. Bƣớc đầu ít nhiều đã giúp cho Ban giám hiệu nhà trƣờng, các nhà quản lý giáo dục có đƣợc một cái nhìn nhiều chiều hơn, đa dạng hơn, nhiều góc cạnh hơn về điểm số của học sinh từ đó thu đƣợc một số kết quả: - Lựa chọn học sinh giỏi để bồi dƣỡng. - Phát hiện học sinh yếu kém để phụ đạo cũng nhƣ đề ra kế hoạch giảng dạy. - So sánh kết quả học tập giữa các khối lớp hay các lớp. - Định hƣớng cho học sinh nên thi theo khối học nào, bậc học nào cho phù hợp với năng lực và khả năng. Trong quá trình thực hiện luận văn, tôi đã cố gắng tập trung tìm hiểu và tham khảo các tài liệu liên quan. Tuy nhiên, với thời gian và trình độ có hạn 45 nên không tránh khỏi những hạn chế và thiếu sót. Tôi rất mong đƣợc sự nhận 46 xét và góp ý của các thầy cô giáo và bạn bè, đồng nghiệp và những ngƣời cùng quan tâm để hoàn thiện hơn các kết quả nghiên cứu của mình. * Hƣớng phát triển Tiếp tục hoàn thiện và mở rộng chƣơng trình trong luận văn này để có thể áp dụng vào thực tế không chỉ áp dụng trong phạm vi nhỏ mà áp dụng trên 46 phạm vi lớn một cách triệt để nhất. 47 TÀI LIỆU THAM KHẢO Tiếng Việt [1] PGS.TS Ngô Quốc Tạo(2013),“Bài giảng môn Data Mining” – lớp CHK12 - ĐH Thái Nguyên [2] Đặng Thị Thu Hiền(2013), “Bài giảng cao học môn học Data mining”, Trƣờng Đại học Giao thông vận tải. [3] Nguyễn Ngọc Hải (2013), “ Tìm hiểu về luật kết hợp và ứng dụng thử nghiệm khai phá cơ sở dữ liệu Bảo hiểm y tế nhằm hỗ trợ cho công tác quản lý, sử dụng quỹ BHYT tại tỉnh Bắc Giang”. Luận văn Thạc sỹ, Đại học công nghệ thông và truyền thông Thái Nguyên. mục thường xuyên và tập mục cổ phần cao trong cơ sở dữ liệu”. Luận văn [4] Bế Quang Huấn (2012),“ Nghiên cứu một số thuật toán khai phá tập Thạc sỹ, Đại học công nghệ thông và truyền thông Thái Nguyên. Tiếng Anh [1] Anuradha Rehal, M.Tech. Scholar, An Effective Algorithmic Appoach for Associative Classification using Metaheuristics, International Journal of Computing and Business Research (IJCBR), ISSN (Online) : 2229-6166, Volume 5 Issue 3 May 2014 [2] A Review, NCI2TM: 2014, Shikha Dubey, Dr. Shivaji D. Mundhe,
Association Rule Mining Algorithm: 2014, International Journal on Natural
Language Computing (IJNLC) Vol. 3, No.1, February 2014, DOI :
10.5121/ijnlc.2014.3103 21 [3] Bay Vo, Tuong Le, Frans Coenen & Tzung-Pei Hong , Mining frequent
itemsets using the N-list and subsume concepts, International Journal of
Machine Learning and Cybernetics, ISSN 1868-8071, DOI 10.1007/s13042-
014-0252-2. 2014. [4] Bay Vo, Tuong Le, A Hybrid Approach for Mining Frequent Itemsets, 47 IEEE International Conference on Systems, Man, and Cybernetics, 2013. 48 [5] D. Bhalodiya, K. M. Patel and C. Patel. An Efficient way to Find Frequent
Pattern with Dynamic Programming Approach. NIRMA UNIVERSITY
INTERNATIONAL CONFERENCE ON ENGINEERING, NUiCONE-2013,
28-30 NOVEMBER, 2013 [6] Jun Luo and Sanguthevar Rajasekaran, FIT: A Fast Algorithm for
Discovering Frequent Itemsets in Large Databases. [7] Jiawei Han, Micheline Kamber and Jian Pei, Data Mining Concepts and Techniques 2nd Edition,2008. [8] Jiawei Han, Micheline Kamber and Jian Pei, Data Mining Concepts and
Techniques Third Edition. [9] Jiawei Han (2006), Data mining: concepts and techniques, University of
Illinois at Urbana'Champaign. [10] Mohammed Al-Maolegi, Bassam Arkok, Computer Science, An Improved
Apriori Algorithm For Association Rules, Jordan University of Science and
Technology, Irbid, Jordan, 2014 [11] Mohammed Zaki and Wagner Meira Jr (2014),Data Mining and
Analysis: Fundamental Concepts and Algorithms, Cambridge University
Press. [12] Ramezani, Reza, Mohamad Saraee, and Mohammad Ali Nematbakhsh;
MRAR: Mining Multi-Relation Association Rules, Journal of Computing and
Security, 1, no. 2 (2014). [13] Vo, B., Hong, T.P., Le B.: A Lattice – based Approach for Mining Most
Generalization Association Rules. Knowledge - Based Systems, 45, 20-30,
2013. 48 [14] Z. H. Deng and S. L. Lv. Fast mining frequent itemsets using Nodesets.
Expert Systems with Applications, 41(10): 4505–4512, 2014. 49 *, Mã nguồn của chƣơng trình. B1. Tìm giá trị tmv và lmv // Tính giá trị transaction measure value private int tmv(string values, DataGridView DB) { int t = 0; foreach (DataGridViewRow row in DB.Rows) if (!row.IsNewRow) if (exist(values, row)) for (int i = 0; i < row.Cells.Count; i++) t += (int)row.Cells[i].Value; return t; } // Tính giá trị local measure value private int lmv(string values, DataGridView DB) { int t = 0; foreach (DataGridViewRow row in DB.Rows) if (!row.IsNewRow) if (exist(values, row)) for (int i = 0; i < values.Length; i++) t += (int)row.Cells[values[i].ToString()].Value; return t; } B2. Kết nối Apriori 49 // Xây dựng kết nối Apriori private string Candidate_Join(string L_k_sub_1, int k_sub_1) { string join = ""; //Bước kết nối string[] xyz = L_k_sub_1.Split(new char[] { ',' }); if (!k_sub_1.Equals(1)) { for (int i = 0; i < xyz.Length - 1; i++) for (int j = i + 1; j < xyz.Length; j++) if (xyz[i].Substring(0, k_sub_1 - 1) == xyz[j].Substring(0, k_sub_1 - 1) && xyz[i][k_sub_1 - 1] < xyz[j][k_sub_1 - 1]) join += xyz[i] + xyz[j][k_sub_1 - 1] + ","; } else { for (int i = 0; i < xyz.Length - 1; i++) { for (int j = i + 1; j < xyz.Length; j++) { join += xyz[i] + xyz[j] + ","; } } } //Bước tỉa xyz = join.Split(new char[] { ',' }); for (int i = xyz.Length - 2; i > 0; i--) for (int j = i - 1; j >= 0; j--) if (xyz[i].Equals(xyz[j])) { 50 50 xyz[i] = ""; break; } string str = ""; for (int i = 0; i < xyz.Length; i++) if (!xyz[i].Equals("")) str += xyz[i] + ","; return (join.Equals("") ? join : str.Substring(0, str.Length - 1)); } B3. Vòng lặp tìm các tập phổ biến từ tập ứng viên do { k++; string RC = null; C = Candidate_Join(C, k); if (C.Equals("")) break; itemsC = C.Split(new char[] { ',' }); for (int i = 0; i < itemsC.Length; i++) if (tmv(itemsC[i], GridData) >= min_lmv) { RC += itemsC[i] + ","; if (lmv(itemsC[i], GridData) >= min_lmv) HS += itemsC[i] + ","; } if (RC != null) C = RC.Substring(0, RC.Length - 1); } while (!C.Equals(null)); 51 using System; using System.Collections.Generic; 51 using System.Data; using System.IO; using System.Windows.Forms; namespace AFSM { public partial class AFSMProgram : Form { public AFSMProgram() { InitializeComponent(); GridData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; } private DataTable viewTable(string fileName) { using (StreamReader sr = File.OpenText(fileName)) { DataTable dataSource = new DataTable(); // Doc dong dau tien string s = sr.ReadLine(); string[] colName = s.Split(new char[] { ',' }); int length = colName.Length; // Tạo cấu trúc bảng dữ liệu for (int i = 0; i < length; i++) { dataSource.Columns.Add(colName[i], typeof(double)); } while ((s = sr.ReadLine()) != null) { dataSource.Rows.Add(s.Split(new char[] { ',' })); } return dataSource; } 52 52 } private void BtnBrowser_Click(object sender, EventArgs e) { if (OpenFileDialog.ShowDialog() == DialogResult.OK) { try { string fileName = OpenFileDialog.FileName; TxtFileName.Text = fileName; // Hiển thị thông tin dữ liệu DataTable dataSource = viewTable(fileName); GridData.DataSource = null; GridData.DataSource = dataSource; for (int i = 0; i < GridData.Columns.Count; i++) GridData.Columns[i].Name = Convert.ToChar(i + 65).ToString(); //GridData.DataSource = AutoNumberedTable(dataSource); TxtNumOfItems.Text = dataSource.Columns.Count.ToString(); TxtNumOfTrans.Text = dataSource.Rows.Count.ToString(); GroupThres.Enabled = true; GroupData.Enabled = true; } catch { } } } private DataTable AutoNumberedTable(DataTable SourceTable) { DataTable ResultTable = new DataTable(); DataColumn AutoNumberColumn = new DataColumn(); AutoNumberColumn.ColumnName = "TID"; AutoNumberColumn.DataType = typeof(int); AutoNumberColumn.AutoIncrement = true; AutoNumberColumn.AutoIncrementSeed = 1; AutoNumberColumn.AutoIncrementStep = 1; 53 53 ResultTable.Columns.Add(AutoNumberColumn); ResultTable.Merge(SourceTable); return ResultTable; } // Tính giá trị local measure value private double lmv(string values, DataGridView DB) { double t = 0; foreach (DataGridViewRow row in DB.Rows) if (!row.IsNewRow) if (exist(values, row)) for (int i = 0; i < values.Length; i++) t += (double)row.Cells[values[i].ToString()].Value; return t; } // Tính giá trị transaction measure value private double tmv(string values, DataGridView DB) { double t = 0; foreach (DataGridViewRow row in DB.Rows) if (!row.IsNewRow) if (exist(values, row)) for (int i = 0; i < row.Cells.Count; i++) t += (double)row.Cells[i].Value; return t; } private double sum_exist(string values, DataGridView DB) { double t = 0; foreach (DataGridViewRow row in DB.Rows) if (!row.IsNewRow) if (exist(values, row)) 54 54 t++; return t; } private bool exist(string values, DataGridViewRow DGVRow) { for (int i = 0; i < values.Length; i++) { if ((double)DGVRow.Cells[values[i].ToString()].Value == 0) return false; } return true; } // Xây dựng kết nối Apriori private string Candidate_Join(string L_k_sub_1, int k_sub_1) { string join = ""; //Bƣớc kết nối string[] xyz = L_k_sub_1.Split(new char[] { ',' }); if (!k_sub_1.Equals(1)) { for (int i = 0; i < xyz.Length - 1; i++) for (int j = i + 1; j < xyz.Length; j++) if (xyz[i].Substring(0, k_sub_1 - 1) == xyz[j].Substring(0, k_sub_1 - 1) && xyz[i][k_sub_1 - 1] < xyz[j][k_sub_1 - 1]) join += xyz[i] + xyz[j][k_sub_1 - 1] + ","; } else { for (int i = 0; i < xyz.Length - 1; i++) { for (int j = i + 1; j < xyz.Length; j++) { join += xyz[i] + xyz[j] + ","; 55 55 } } } //Bƣớc tỉa xyz = join.Split(new char[] { ',' }); for (int i = xyz.Length - 2; i > 0; i--) for (int j = i - 1; j >= 0; j--) if (xyz[i].Equals(xyz[j])) { xyz[i] = ""; break; } string str = ""; for (int i = 0; i < xyz.Length; i++) if (!xyz[i].Equals("")) str += xyz[i] + ","; return (join.Equals("") ? join : str.Substring(0, str.Length - 1)); } private bool validateInput(TextBox txtBox) { if (txtBox.Text.Length == 0) { errorProvider.SetError(txtBox, "Chƣa nhập giá trị"); return false; } else { try { if (Double.Parse(txtBox.Text) > 100 || Double.Parse(txtBox.Text) < 0) { errorProvider.SetError(txtBox, "Nhập giá trị giữa 0 và 100"); return false; 56 56 } else { errorProvider.SetError(txtBox, ""); return true; } } catch { errorProvider.SetError(txtBox, "Giá trị không đúng định dạng"); return false; } } } private string getNameItem(string names, DataGridView dgW) { string lviItem = ""; for (int j = 0; j < names.Length; j++) { int index = names[j] - 65; lviItem += dgW.Columns[index].HeaderText + ", "; } lviItem = lviItem.Substring(0, lviItem.Length - 2); return lviItem; } private class clssRules { string strCombination, strRemaining; double _confidence; public clssRules(string strCombination, string strRemaining, double Confidence) { this.strCombination = strCombination; this.strRemaining = strRemaining; 57 57 this._confidence = Confidence; } public string X { get { return strCombination; } } public string Y { get { return strRemaining; } } public double Confidence { get { return _confidence; } } } private void GenRule(string ruleItem, List { if (ruleItem.Length > 1) { string strcombination; for (int i = 1; i < ruleItem.Length; i++) { strcombination = ""; bool[] checki = new bool[ruleItem.Length]; for (int j = 0; j < checki.Length; j++) checki[j] = true; GeneKRule(1, 0, ref checki, i, ruleItem, strcombination, lstRule); } } } private void GeneKRule(int i, int ti, ref bool[] checki, int k, string ruleItem, string strcombination, List { for (int j = ti; j < checki.Length; j++) { if (checki[j]) { strcombination += ruleItem[j].ToString(); checki[j] = false; if (i == k) { string remaining = getRemaining(strcombination, ruleItem); 58 58 clssRules clsRule = new clssRules(strcombination, remaining, confidence(strcombination, ruleItem)); lstRule.Add(clsRule); } else GeneKRule(i + 1, j, ref checki, k, ruleItem, strcombination, lstRule); strcombination = strcombination.Substring(0, strcombination.Length - 1); checki[j] = true; } } } private string getRemaining(string strCombination, string strAFSMItem) { string temp = strAFSMItem; foreach (char ch in strCombination) { temp = temp.Replace(ch.ToString(), ""); } return temp; } private double confidence(string strCombination, string strAFSMItem) { return (double)sum_exist(strAFSMItem, GridData) / sum_exist(strCombination, GridData); } public static string HS; private void TxtExecute_Click(object sender, EventArgs e) { if (validateInput(TxtMinShare) && validateInput(TxtMinConf)) { //Tính tổng giá trị của bảng dữ liệu DB Tdb try { 59 59 HS = ""; double T = 0; int k = 0; foreach (DataGridViewRow row in GridData.Rows) if (!row.IsNewRow) foreach (DataGridViewCell cell in row.Cells) T += (double)cell.Value; double min_lmv = T * double.Parse(TxtMinShare.Text) / 100; double min_conf = double.Parse(TxtMinConf.Text) / 100; string C1 = null, C = null; foreach (DataGridViewColumn col in GridData.Columns) C1 += col.Name.ToString() + ","; C1 = C1.Substring(0, C1.Length - 1); string[] itemsC = C1.Split(new char[] { ',' }); for (int i = 0; i < itemsC.Length; i++) if (tmv(itemsC[i], GridData) >= min_lmv) { C += itemsC[i] + ","; if (lmv(itemsC[i], GridData) >= min_lmv) HS += itemsC[i] + ","; } C = C.Substring(0, C.Length - 1); do { k++; string RC = null; C = Candidate_Join(C, k); if (C.Equals("")) break; itemsC = C.Split(new char[] { ',' }); for (int i = 0; i < itemsC.Length; i++) if (tmv(itemsC[i], GridData) >= min_lmv) { 60 60 RC += itemsC[i] + ","; if (lmv(itemsC[i], GridData) >= min_lmv) HS += itemsC[i] + ","; } if (RC != null) C = RC.Substring(0, RC.Length - 1); } while (!C.Equals(null)); //In kết quả ra form Result if (!HS.Equals("")) { Result frmResult = new Result(); string[] itemAFSM = HS.Split(new char[] { ',' }); for (int i = 0; i < itemAFSM.Length; i++) { if (itemAFSM[i] != "") { ListViewItem lvi = new ListViewItem(getNameItem(itemAFSM[i], GridData)); lvi.SubItems.Add(lmv(itemAFSM[i], GridData).ToString()); frmResult.lv_Frequent.Items.Add(lvi); } } //In tập luật List for (int i = 0; i < itemAFSM.Length; i++) if (itemAFSM[i].Length > 1) { GenRule(itemAFSM[i], lstRules); } foreach (clssRules rule in lstRules) { if (rule.Confidence >= min_conf) { 61 61 ListViewItem lvi = new ListViewItem(getNameItem(rule.X, GridData) + "->" + getNameItem(rule.Y, GridData)); lvi.SubItems.Add(String.Format("{0}%", Math.Round(rule.Confidence * 100, 2))); frmResult.lv_Rules.Items.Add(lvi); } } frmResult.ShowDialog(); } else { MessageBox.Show("Không tìm thấy tập mục thỏa mãn"); } } catch(Exception ex1) { String msg = ex1.StackTrace; MessageBox.Show("Không tìm thấy tập mục thỏa mãn"); } } } } } 62 namespace AFSM { partial class Result { Required designer variable. 62 private System.ComponentModel.IContainer components = null; Clean up any resources being used. true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code Required method for Designer support - do not modify the contents of this method with the code editor. private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Result)); this.gb_FrequentItems = new System.Windows.Forms.GroupBox(); 63 63 this.lv_Frequent = new System.Windows.Forms.ListView(); this.colItem = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colLmv = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.gb_StrongRules = new System.Windows.Forms.GroupBox(); this.lv_Rules = new System.Windows.Forms.ListView(); this.colRule = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.colConfidence = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.gb_FrequentItems.SuspendLayout(); this.gb_StrongRules.SuspendLayout(); this.SuspendLayout(); gb_FrequentItems this.gb_FrequentItems.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorS tyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gb_FrequentItems.Controls.Add(this.lv_Frequent); this.gb_FrequentItems.Location = new System.Drawing.Point(3, 12); this.gb_FrequentItems.Name = "gb_FrequentItems"; this.gb_FrequentItems.Size = new System.Drawing.Size(536, 261); 64 64 this.gb_FrequentItems.TabIndex = 2; this.gb_FrequentItems.TabStop = false; this.gb_FrequentItems.Text = "Các tập phổ biến có trọng số"; lv_Frequent this.lv_Frequent.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles. Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.lv_Frequent.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.colItem, this.colLmv}); this.lv_Frequent.Location = new System.Drawing.Point(3, 16); this.lv_Frequent.Name = "lv_Frequent"; this.lv_Frequent.Size = new System.Drawing.Size(530, 242); this.lv_Frequent.TabIndex = 0; this.lv_Frequent.UseCompatibleStateImageBehavior = false; this.lv_Frequent.View = System.Windows.Forms.View.Details; colItem this.colItem.Text = "Tập các môn học"; this.colItem.Width = 402; colLmv this.colLmv.Text = "LMV"; this.colLmv.Width = 0; gb_StrongRules 65 65 this.gb_StrongRules.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.B ottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.gb_StrongRules.Controls.Add(this.lv_Rules); this.gb_StrongRules.Location = new System.Drawing.Point(3, 279); this.gb_StrongRules.Name = "gb_StrongRules"; this.gb_StrongRules.Size = new System.Drawing.Size(536, 336); this.gb_StrongRules.TabIndex = 3; this.gb_StrongRules.TabStop = false; this.gb_StrongRules.Text = "Các luật kết hợp thỏa mãn ngƣỡng tin cậy"; lv_Rules this.lv_Rules.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.colRule, this.colConfidence}); this.lv_Rules.Dock = System.Windows.Forms.DockStyle.Fill; this.lv_Rules.Location = new System.Drawing.Point(3, 16); this.lv_Rules.Name = "lv_Rules"; this.lv_Rules.Size = new System.Drawing.Size(530, 317); this.lv_Rules.TabIndex = 1; this.lv_Rules.UseCompatibleStateImageBehavior = false; this.lv_Rules.View = System.Windows.Forms.View.Details; colRule this.colRule.Text = "Luật"; this.colRule.Width = 408; 66 66 colConfidence this.colConfidence.Text = "Độ tin cậy"; this.colConfidence.Width = 115; Result this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(542, 620); this.Controls.Add(this.gb_StrongRules); this.Controls.Add(this.gb_FrequentItems); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "Result"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Show; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Kết quả"; this.gb_FrequentItems.ResumeLayout(false); this.gb_StrongRules.ResumeLayout(false); this.ResumeLayout(false); } 67 67 #endregion private System.Windows.Forms.GroupBox gb_FrequentItems; public System.Windows.Forms.ListView lv_Frequent; private System.Windows.Forms.ColumnHeader colItem; private System.Windows.Forms.ColumnHeader colLmv; private System.Windows.Forms.GroupBox gb_StrongRules; private System.Windows.Forms.ColumnHeader colRule; private System.Windows.Forms.ColumnHeader colConfidence; public System.Windows.Forms.ListView lv_Rules; } } 68 68CHƢƠNG III: ÁP DỤNG KHAI PHÁ TRÊN CƠ SỞ DỮ LIỆU
BẢNG ĐIỂM CỦA HỌC SINH THPT TÂN LẬP - ĐAN PHƢỢNG
PHỤ LỤC
CÀI ĐẶT SOURCE CODE
Các hàm xử lý chính
Mã nguồn AFSMProgram
Mã nguồn Result.Designer