Chƣơng trình cài đặt thử nghiệm sinh các luật kết hợp của hai thuật toán song song Count Distribution và Eclat. Cơ sở dữ liệu vào của chƣơng trình đƣợc lƣu trữ trên đĩa cục bộ tại vị trí nút 0. Khi thực thi chƣơng trình sẽ yêu cầu nhập vào độ hỗ trợ và độ tin cậy của luật cần khai phá, số bộ xử lý. Khi chƣơng trình thực hiện xong, tại mỗi nút sẽ nhận đƣợc nội dung các luật kết hợp đƣợc sinh ra bởi chƣơng trình.
Thời gian thực hiện của thuật toán song song Count Distribution và Eclat đƣợc tính từ khi bắt đầu chạy cho đến khi bộ xử lý cuối cùng trong nhóm truyền thông thực hiện xong. Thời gian thực thi của thuật toán Count Distribution gần bằng thuật toán Apriori tuần tự với dung lƣợng dữ liệu vào bằng dung lƣợng dữ liệu tại các nút . Với thuật toán Count Distribution trong giai đoạn đầu thực thi nhanh hơn thuật toán Apriori tuần tự, cuối mỗi giai đoạn thực thi chậm hơn thuật toán Apriori tuần tự vì phải chờ các nút xử lý đồng bộ. Riêng với thuật toán Eclat, số lần quét cơ sở dữ liệu ít nên thực hiện nhanh hơn so với các thuật toán còn lại. Ngoài ra, kết quả thực hiện các thuật toán trên còn phụ thuộc rất nhiều vào việc chọn độ hỗ trợ, độ tin cậy, kích thuớc dữ liệu cần khai phá, ...
KẾT LUẬN
Khai phá dữ liệu là một lĩnh vực nghiên cứu mới về việc phát hiện ra tri thức trong một cơ sở dữ liệu rộng lớn bằng các phƣơng thức thông minh đang thu hút các nhà nghiên cứu và ngƣời dùng trong ngành tin học. Nghiên cứu ở lĩnh vực này đòi hỏi sự tích hợp các kết quả nghiên cứu ở nhiều lĩnh vực của khoa học máy tính và việc áp dụng nó trong từng nhiệm vụ của khai phá dữ liệu.
Qua thời gian hai năm học tập, tìm hiểu và nghiên cứu cùng với khoảng thời gian làm luận văn, luận văn đã đạt đƣợc một số kết quả cụ thể và hƣớng phát triển nhƣ sau:
1. Kết quả đạt đƣợc
Trình bày một cách khái quát về khai phá dữ liệu và phát hiện tri thức, quy trình khai phá dữ liệu, lựa chọn phƣơng pháp khai phá dữ liệu. Trình bày đƣợc một số ứng dụng, khó khăn và thách thức trong khai phá dữ liệu.
Giới thiệu chi tiết các vấn đề về khai phá luật kết hợp nhƣ: các khai niệm cơ sở, bài toán xuất phát đến các mô hình, các thuật toán khai phá luật kết hợp cơ sở. Trên cơ sở thuật toán Apriori tuần tự và các thuật toán thuộc họ Apriori, luận văn đã trình bày chi tiết một số thuật toán khai phá các luật kết hợp song song trong khai phá dữ liệu, phân tích, đánh giá một số thuật toán song song. Xây dựng và cài đặt đƣợc chƣơng trình thử nghiệm khai phá các luật kết hợp
song song dựa vào hai thuật toán song song là Count Distribution và Eclat để ứng dụng cho bài toán khai phá dữ liệu. Ngoài ra, luận văn còn cài đặt thêm thuật toán Apriori để đối chiếu.
Luận văn cũng tiến hành thử nghiệm các thuật toán trên dữ liệu của Ngân hàng nhằm tìm ra các luật kết hợp giữa các sản phẩm/ dịch vụ của Ngân hàng.
2. Hƣớng phát triển
Các giải thuật khai phá dữ liệu (ví dụ nhƣ các giải thuật sinh luật kết hợp song song) chỉ là một phần công việc trong phát hiện tri thức. Trong tƣơng lai, tôi cũng cần phải quan tâm hơn đến các giai đoạn khác: lựa chọn dữ liệu, làm sạch và tiền xử lý dữ liệu, … Khai phá dữ liệu, phát hiện tri thức đƣợc thực hiện lặp đi lặp lại, có sự tƣơng tác với nhau vì vậy ta cũng cần tìm hiểu thêm sự tác động lẫn nhau đó, kết hợp nhiều thuật toán khai phá dữ liệu với nhau để tạo ra kết quả tốt hơn nữa.
Tiếp tục nghiên cứu sâu hơn về các thuật toán khai phá các luật kết hợp song song, tìm cách cải tiến và khắc phục nhƣợc điểm của các thuật toán song song hiện có, xây dựng các thuật toán mới nhằm đạt hiệu quả tốt hơn.
Tăng cƣờng khả năng song song hoá cho phù hợp với sự phát triển của công nghệ.
Nghiên cứu khả năng tích hợp với các hệ quản trị cơ sở dữ liệu song song nhằm tăng khả năng thực hiện, lƣu trữ, tìm kiếm, … phù hợp với việc giải quyết những bài toán mà cơ sở dữ liệu lến đến giga/ tera-bytes một cách có hiệu quả.
Mở rộng, hoàn thiện chƣơng trình trong luận văn này để có thể xây dựng các ứng dụng vào thực tế: tài chính, ngân hàng, quy luật thị trƣờng chứng khoán và bất động sản, dự đoán rủi ro tín dụng, định hƣớng kinh doanh, y tế, ...
TÀI LIỆU THAM KHẢO Tiếng Việt
1. Đoàn Văn Ban, Nguyễn Mậu Hân (2006), Xử lý song song và phân tán, NXB Khoa học và Kỹ thuật Hà Nội.
2. Đỗ Phúc (2006), Giáo trình khai thác dữ liệu, NXB Đại học Quốc gia TP Hồ Chí Minh.
3. Nguyễn Thanh Thuỷ (2001), Khai phá dữ liệu - Kĩ thuật và ứng dụng, Bài giảng trƣờng thu Hệ Mờ và ứng dụng, Hà Nội. trƣờng thu Hệ Mờ và ứng dụng, Hà Nội.
Tiếng Anh
4. Agrawal and J.Shafer (1996), ―Parallel mining of association rules‖, In IEEE trans,
on Knowledge and Data Engg, 8(6), pp. 962-969.
5. Agrawal, H. Mannila, R. Srikant (1996), Fast discovery of association rules, MIT Press.
6. Agrawal, R. Srikant (1994), ―Fast algorithms for mining association rules‖, In 20 th VL.DBConf.
7. Agrawal, Heikki Mannila, Ramakrishnan Srikant, Hannu Toivonen, and A. Inkeri Verkamo (1996), Advances in Knowledge Discovery and Data Mining, pp. 307-328, AAAI Press.
8. D. Hand, H. Mannila and P. Smyth (2001), Principles of Data Mining, The MIT Press, London, England.
9. Douglas Gregor and Benjamin Martin (2008), MPI.NET Tutorial in C#, Open Systems Laboratory, Indiana University.
10. H. D. K. Moonesinghe, Moon-Jung Chung, Pang-Ning Tan (1996), Fast Parallel
Mining of Frequent Itemsets, Department of Computer Science & Engineering,
Michigan State University.
11. I. H. Witten and E. Frank (2000), Data Mining: Practical Machine Learning Tools
and Techniques with Java Implementations, Morgan Kaufmann Publishers, New York.
12. J. Han and M. Kamber (2006), Data Mining: Concepts and Techniques, 2nd Edition, Morgan Kaufmann Publishers.
13. J. Han, J. Pei and Y. Yin (1999), ―Mining Frequent Pattens without Candidate Generation‖, In ACM SIGMOD.
14. Jianwei Li, Ying Liu, Wei-keng Liao, Alok Choudhary (2006), Parallel Data
15. M. Kantardzic (2003), Data Mining: Concepts, Models, Method, and Algorithms, John Wiley & Sons, New York, NY.
16. Margaret H. Dunham, Yongqiao Xiao, Le Gruenwald, Zahid Hossain (1997), A
survey of association rules, IEEE Press.
17. Mohammed Javeed Zaki (1999), Hierarchical Parallel Algorithms for Association
Mining, Computer Science Department Rensselaer Polytechnic Institute, Troy, NY
12180, USA.
18. Mohammed Javeed Zaki, Srinivasan Parthasarathy, and Wei Li (1998), A
Localized Algorithm for Parallel Association Mining, Department of Computer
Science, University of Rochester, Rochester, NY 14627.
19. Mohammed J. Zaki (1999), Parallel and Distributed Association Mining: A Survey, Rensselaer Polytechnic Institute, IEEE Concurrency.
20. T. Mitchell (1999), ―Machine Learning and Data Mining‖, Communications of the ACM, 42(11), pp. 30—36.
21. U. M. Fayyad, G. Piatetsky-Shapiro, P.Smyth and R. Uthurusamy (1996),
Advances in Knowledge Discovery and Data Mining, AAAI Press, Menlo Park, CA.
22. Yi Wang, Haoyuan Li, Dong Zhang, Ming Zhang, Edward Chang (2001), PFP:
Parallel FP-Growth for Query Recommendation, ACM.
Internet
PHỤ LỤC Mô tả chƣơng trình cài đặt
1. Tổ chức dữ liệu
Lớp tập dữ liệu D
publicclassData {
publicDictionary<string, DRow> data; //Tập hợp các dòng giao dịch public Data() //Khởi tạo tập dữ liệu
publicstring Add(DRow dr) //Thêm một giao dịch vào tập dữ liệu
publicstring Add(string rowValues) // Thêm một giao dịch vào tập dữ liệu
public Data Di(int i, int size) //Chia tập dữ liệu thành nhiều phần, phục vụ cho thuật toán song song
publicvoid FromFile(string path) //Đọc tập dữ liệu từ file }
Lớp Itemset
publicclassItemset {
publicstring[] items; //Mảng lƣu các phần tử của một itemset public Itemset(int k) //Khởi tạo itemset
publicbool Include(string str) //Kiểm tra một phần tử thuộc itemset hay không publicbool Compare(string[] items1, string[] items2) //So sánh 2 itemset
publicstaticItemset GenK_1Subset(Itemset kItemset, int ignoreIndex) // Tạo một tập k-1 itemset từ tập k-itemset bằng cách bỏ đi một phần tử
publicstatic Itemset GetRest(Itemset items1, Itemset items2) // Lấy phần bù của 2 itemset
publicstatic Itemset Intersec(Itemset items1, Itemset items2) //Lấy phần giao của 2 itemset
publicvoid sort() //Sắp xếp các phần tử trong itemset }
Lớp một phần từ của tập L
publicclassLkItem {
publicItemset item; //Chứa 1 itemset
publicint count; //Chứa tổng số giao dịch chứa itemset public LkItem(int k) //Khởi tạo
publicLkItem Copy() //Sao chép }
Lớp tập L
publicclassLk {
publicDictionary<string, LkItem> data; //Lƣu các phần tử của tập L public Lk() //Khởi tạo
publicbool Contains(LkItem item) //Kiểm tra một phần tử thuộc tập L hay không public bool Contains(string item) // Kiểm tra một phần tử có thuộc tập L hay không. Với phần tử đƣa vào theo định dạng chuỗi
public bool ContainsItemset(Itemset itemset) //Kiểm tra itemset có tồn tại trong tập L hay không.
public LkItem GetLkItemByItemset(Itemset itemset) //Lấy một phần tử dựa vào itemset
publicstring Add(LkItem item) //Thêm một phần tử vào tập L publicvoid CountSup(Data d) //Đếm số hỗ trợ cho các phần tử
publicvoid RemoveUnsup(Data d, double minsup) //Xóa các phần tử có độ hỗ trợ không thỏa mãn
public static List<Lk> SetI(List<Lk> sets, int i, int size) //Chia thành các tập hợp nhỏ để đƣa vào xử lý song song.
publicLk Copy() //Sao chép
publicvoid Append(Lk from) //Nối thêm một tập khác
public void Append(List<Lk> eclatSets, Lk from) //Nối thêm một tập khác dùng cho thuật toán eclat
public void EclatRemoveUnSup(Data d, double minsup) //Xóa các phần tử có độ hỗ trợ không thỏa mãn, dùng cho thuật toán eclat.
}
Lớp một phần tử của tập C
publicclassCkItem {
publicItemset item; //Chứa một itemset
publicint count; // Chứa tổng số giao dịch chứa itemset publicint CountSup(Data d) //Đếm độ hỗ trợ
}
Lớp tập C
publicclassCk {
publicDictionary<string, CkItem> data; //Lƣu các phần tử public Ck() //Khởi tạo
publicstring Add(CkItem item) //Thêm một phần tử
publicvoid CountSup(Data d) //Đếm độ hỗ trợ cho các phần tử }
Lớp chứa 1 luật
publicclassRuleItem {
publicItemset from; //A trong A->B publicItemset to; //B trong A->B
publicdouble conf; //Độ tin cậy của luật publicdouble sup; //Độ hỗ trợ của luật public RuleItem(int kf, int kt) //Khởi tạo }
Lớp tập luật
publicclassRules {
publicDictionary<string, RuleItem> data; //Lƣu danh sách các luật. public Rules() //Khởi tạo
publicstring Add(RuleItem ri) //Thêm một luật
publicvoid Append(Rules from) //Thêm một tập luật khác publicoverride string ToString() //Hiển thị tập luật
}
2. Các hàm
publicclassApriori {
publicLk BuildL1(Data d) //Xây dựng tập L1{large 1-itemset} publicCk Generate(Lk Lk_1) //Sinh Ck tử Lk_1
publicList<Lk> FindSet(Data d, double minsup) //Tìm các tập L thỏa mãn
public Rules GenRules(List<Lk> sets, Data d, double minconf) //Xây dựng tập luật
public Rules GenRules(List<Lk> worldSets, List<Lk> sets, Data d, double
minconf) //Xây dựng tập luật dùng cho thuật toán song song }
publicclassEclat {
publicLk BuildL1(Data d) //Biểu diễn tập giao dịch theo chiều dọc. publicLk SortLk(Lk lk) //Sắp xếp các phần tử trong tập L
publicLk ClassDivide(Lk lk, int i, int size) //Chia lớp tƣơng đƣơng
public static Rules GenRules(List<Lk> eclatSets, List<Lk> sets, Data d, double
minconf) //Sinh luật cho thuật toán Eclat }