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 Mining Algorithms for Association Rules and Clustering, CRC Press.
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
publicclass Data {
public Dictionary<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
publicclass Itemset {
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
publicstatic Itemset 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
publicclass LkItem {
public Itemset 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
public LkItem Copy() //Sao chép }
Lớp tập L
publicclass Lk {
public Dictionary<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.
public Lk 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
publicclass CkItem {
public Itemset 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
publicclass Ck {
public Dictionary<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
publicclass RuleItem {
public Itemset from; //A trong A->B public Itemset 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
publicclass Rules {
public Dictionary<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
publicclass Apriori {
public Lk BuildL1(Data d) //Xây dựng tập L1{large 1-itemset} public Ck Generate(Lk Lk_1) //Sinh Ck tử Lk_1
public List<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 }
publicclass Eclat {
public Lk BuildL1(Data d) //Biểu diễn tập giao dịch theo chiều dọc. public Lk SortLk(Lk lk) //Sắp xếp các phần tử trong tập L
public Lk 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 }