Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
2,11 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC QUY NHƠN NGUYỄN QUANG QUYỀN ĐỀ XUẤT CẢI TIẾN THUẬT TOÁN K PHẦN TỬ GẦN NHẤT TRONG KHAI PHÁ DỮ LIỆU LỚN VỚI MƠ HÌNH MAPREDUCE Chun ngành: Mã ngành: Khoa học máy tính 8480101 Ngƣời hƣớng dẫn: TS HỒ VĂN LÂM LỜI CAM ĐOAN Tôi xin cam đoan: Luận văn cơng trình nghiên cứu thực cá nhân, thực hướng dẫn khoa học TS Hồ Văn Lâm Các số liệu, kết luận nghiên cứu trình bày luận văn trung thực chưa công bố hình thức Tơi xin chịu trách nhiệm nghiên cứu LỜI CẢM ƠN Tơi xin chân thành cảm ơn hướng dẫn dạy giúp đỡ tận tình Thầy Cơ giảng dạy Sau Đại Học – Trường Đại Học Quy Nhơn Đặc biệt, xin cảm ơn thầy Hồ Văn Lâm, giảng viên khoa Công Nghệ Thông Tin, Trường Đại Học Quy Nhơn tận tình hướng dẫn truyền đạt kiến thức kinh nghiệm q báu giúp tơi có đầy đủ kiến thức hồn thành luận văn Và tơi xin cảm ơn bạn bè, người thân gia đình tin tưởng, động viên tơi q trình học tập nghiên cứu đề tài Mặc dù cố gắng việc thực luận văn, song đề tài khơng thể tránh khỏi thiếu sót chưa hồn chỉnh Tối mong nhận ý kiến đóng góp Thầy, Cô bạn để đề tài hồn thiện Một lần nữa, tơi xin chân thành cảm ơn! Học viên Nguyễn Quang Quyền MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN DANH MỤC CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC CÁC HÌNH MỞ ĐẦU 1 Tính cấp thiết đề tài Mục đích nghiên cứu Đối tượng nghiên cứu Phạm vi nghiên cứu Phương pháp nghiên cứu CHƢƠNG 1: TỔNG QUAN KHAI PHÁ DỮ LIỆU LỚN 1.1 Big Data 1.2 Data Mining 1.2.1 Khái niệm 1.2.2 Quá trình khai phá tri thức sở liệu 1.2.3 Các kỹ thuật tiếp cận khai phá liệu 1.2.4 Kiến trúc hệ thống khai phá liệu 1.2.5 Ứng dụng khai phá liệu 10 1.3 Apache Hadoop 10 1.3.1 HDFS gì? 10 1.3.2 Mapreduce 12 1.4 Apache Spark 15 1.4.1 Giới thiệu 15 1.4.2 Kiến trúc Spark 17 1.4.3 Quản lý nhớ Apache Spark 18 1.4.4 Tại nên sử dụng Apache Spark 19 CHƢƠNG 2: GIỚI THIỆU THUẬT TOÁN K-NEAREST NEIGHBORS 23 2.1 Thuật toán K – phần tử gần 23 2.1.1 Khái niệm 23 2.1.2 Phương thức làm việc K phần tử gần 24 2.1.3 Phương pháp chọn K 25 2.1.4 Khoảng cách không gian vectơ 25 2.2 Ứng dụng K phần tử gần 27 2.3 Ưu nhược điểm K phần tử gần 30 CHƢƠNG 3: ĐỀ XUẤT CẢI TIẾN TRONG MƠ HÌNH MAPREDUCE 31 3.1 Môi trường xử lý song song 31 3.2 Thuật toán Secondary Sorting (sắp xếp thứ cấp) 32 3.3 Kết hợp K phần tử gần Spark xếp liệu đầu vào 35 CHƢƠNG 4: CÀI ĐẶT THỬ NGHIỆM 46 4.1 Kết 47 4.2 Đánh giá 48 4.3 Kết luận 48 DANH MỤC TÀI LIỆU THAM KHẢO QUYẾT ĐỊNH GIA0 ĐỀ TÀI LUẬN VĂN (bản sao) DANH MỤC CHỮ VIẾT TẮT STT Ký hiệu Diễn giải K-NN K-Nearest Neighbors KDD Khai phá tri thức CSDL Cơ sở liệu - Knowledge Discovery in Databases HDFS Hadoop Distributed File System RDD Resilient Distributed Dataset DAG Directed Acyclic Graph DANH MỤC CÁC BẢNG Bảng 2.1: Bộ liệu hoa Iris 28 Bảng 2.2: Bộ liệu hoa Iris mã hóa 29 Bảng 2.3: Khoảng cách liệu loại hoa 29 Bảng 2.4: Khoảng cách trung bình 30 Bảng 4.1: So sánh kết chạy thuật toán thể bên dưới: 47 DANH MỤC CÁC HÌNH Hình 1.1: Khai phá liệu bước trình khai phá tri thức [8] Hình 1.2: Kiến trúc hệ thống khai phá liệu [5] Hình 1.3: Kiến trúc HDFS 11 Hình 1.4: Sơ đồ tổng quan hoạt động Mapreduce 13 Hình 1.5: Sơ đồ hoạt động trình Mapreduce 14 Hình 1.6: Các thành phần sử dụng Apache Spark [6] 16 Hình 1.7: Kiến trúc Apache Spark [6] 17 Hình 1.8: Thành phần Apache Spark [6] 19 Hình 1.9: Sự khác Hadoop Spark 21 Hình 1.10: So sánh Hadoop Spark 21 Hình 1.11: Thành phần thư viện Spark 22 Hình 1.12: Các ngơn ngữ Spark năm 2014 -2015 22 Hình 2.1: Ví dụ minh họa K phần tử gần 24 Hình 2.2: Ví dụ minh họa K phần tử gần 24 Hình 3.1: Mơ hình hoạt động K-NN Spark 31 Hình 3.2: Mơ hình hoạt động huấn luyện liệu đầu vào 35 Hình 4.1: Biểu đồ thời gian thực nghiệm thuật toán K-NN 48 MỞ ĐẦU Tính cấp thiết đề tài Thời đại cách mạng công nghiệp thứ tư, với phát triển công nghệ thông tin thông tin gia tăng bùng nổ liệu từ mức độ terabytes đến mức độ petabytes Chúng ta hoàn toàn bị tràn ngập liệu, liệu quan trọng bị bỏ thừa không dược tận dụng hết Do nhu cầu khai phá, phân tích liệu để tìm kiếm thơng tin từ nguồn tài ngun quý giá điều cấp thiết Bài toán phân loại liệu toán thường gặp khai phá liệu Có nhiều cách tiếp cận giải thuật đưa để giải toán phân loại Một số thuật tốn K phần tử gần (K-Nearest Neighbors) K phần tử gần phương pháp phân loại biết đến nhiều nhất, hiệu tính đơn giản mà khơng cần q nhiều điều chỉnh Xây dựng mơ hình thường nhanh dễ sử dụng, nhiên nhu cầu tính tốn cao tốn nhớ làm cho K phần tử gần cổ điển không khả thi cho việc khai phá liệu lớn ngày Để khắc phục hạn chế, số phương pháp kết hợp môi trường phân tán đề xuất Mục đích nghiên cứu Trong luận văn này, tác giả tập trung vào việc đưa số giải pháp cải tiến thuật toán K phần tử gần khai phá liệu lớn với mơ hình Mapreduce Đối tƣợng nghiên cứu Thuật tốn K phần tử gần Mơ hình xử lý Mapreduce Thuật tốn xếp thứ cấp Phạm vi nghiên cứu Áp dụng thuật toán K phân tử gần cải tiến khai phá liệu với mơ hình Mapreduce Phƣơng pháp nghiên cứu Từ kiến thức học máy, liệu lớn, tốn lập trình áp dụng nghiên cứu, cài đặt thuật toán K phần tử gần cổ điển sau áp dụng phương pháp cải tiến xử lý song song thu gọn khơng gian tìm kiếm nghiệm, sau so sánh hai mơ hình đánh giá 37 Ví dụ 3.3: kết nối máy master final JavaSparkContext ctx = new JavaSparkContext(); Bƣớc 4: tạo JavaRDD Bước này, đọc file từ HDFS tạo JavaRDD Ví dụ 3.4: tạo JavaRDD JavaRDD lines = ctx.textFile(inputPath, 1); Bƣớc 5: Tạo cặp key_value từ JavaRDD Bước này, thực trình ánh xạ Mỗi ghi chuyển đổi thành cặp giá trị khóa, khóa tên giá trị Tuple2 (thời gian, giá trị) Ví dụ 1.5: tạo key_value JavaPairRDD pairs = lines.map(new PairFunction() { public Tuple2 call(String s) { String[] tokens = s.split(","); // x,2,5 System.out.println(tokens[0] + "," + tokens[1] + "," + tokens[2]); Integer time = new Integer(tokens[1]); Integer value = new Integer(tokens[2]); Tuple2 timevalue = new Tuple2(time, value); return new Tuple2(tokens[0],timevalue); } }); Bƣớc 6: Xác thực bước Mục đích bước để gỡ lỗi xác thực bước, sử dụng JavaRDD.collect() JavaPairRDD.collect() 38 Ví dụ 3.6: xác thực bước List output = pairs.collect(); for (Tuple2 t : output) { Tuple2 timevalue = (Tuple2) t._2; System.out.println(t._1 + "," + timevalue._1 + "," + timevalue._1); } Bƣớc 7: Nhóm giá trị JavaPairRDD theo khóa Ta thực Pha Reduce việc sử dụng groupBykey() Ví dụ 3.7: nhóm giá trị JavaPairRDD JavaPairRDD groups = pairs.groupByKey(); Bƣớc 8: Xác thực bước Bước này, xác nhận bước trước cách sử dụng hàm collect() Ví dụ 3.8: xác thực bước System.out.println("===DEBUG1==="); List output2 = groups.collect(); for (Tuple2 t : output2) { Iterable list = t._2; System.out.println(t._1); for (Tuple2 t2 : list) { System.out.println(t2._1 + "," + t2._2); } System.out.println("====="); } 39 Bƣớc 9: Sắp xếp giá trị Pha Reduce Bước này, sử dụng phương thức Spark mạnh mẽ khác, mapValues(), để xếp giá trị tạo Reduce Phương thức mapValues() cho phép ta chuyển đổi (K, V1) thành (K, V2), V2 V1 xếp Ví dụ 3.9: xếp giá trị JavaPairRDD sorted = groups.mapValues( new Function< Iterable, // input Iterable // output >() { public Iterable call(Iterable s) { List newList = new ArrayList(s); Collections.sort(newList, new TupleComparator()); return newList; } }); Bƣớc 10: Kết đầu Ta sử dụng hàm collect() để thu thập tất phần tử RDD sau lặp lại qua Danh sách để có tất kết cuối Ví dụ 3.10: cho kết đầu System.out.println("===DEBUG2="); List output3 = sorted.collect(); for (Tuple2 t : output3) { Iterable list = t._2; System.out.println(t._1); for (Tuple2 t2 : list) { 40 System.out.println(t2._1 + "," + t2._2); } System.out.println("====="); } Bƣớc 11: Xử lý liệu đầu vào Dữ liệu sau xếp đem xử lý Bước này, truyền bốn tham số đầu vào: k số nguyên cho K-Nearest Neighbors d số nguyên cho kích thước vectơ R S Dữ liệu truy vấn đặt R (dưới dạng tệp HDFS) Tập liệu huấn luyện S (dưới dạng tệp HDFS Ví dụ 3.11: xử lý liệu if (args.length < 4) { System.err.println("Usage: kNN "); System.exit(1); } Integer k = Integer.valueOf(args[0]); // k for kNN Integer d = Integer.valueOf(args[1]); // d-dimension String datasetR = args[2]; String datasetS = args[3]; Bƣớc 12: Tạo đối tượng Spark context Bước này, tạo đối tượng JavaSparkContext để tạo RDDs Ví dụ 3.12: tạo Spark context JavaSparkContext ctx = createJavaSparkContext("knn"); Bƣớc 13: truyền liệu Để cho phép truy cập vào đối tượng cấu trúc liệu chia sẻ từ tất nút cụm, Spark cung cấp lớp Broadcast mà bạn đăng ký đối tượng Sau bạn đọc chúng từ nút 41 Ví dụ 3.13: truyền liệu final Broadcast broadcastK = ctx.broadcast(k); final Broadcast broadcastD = ctx.broadcast(d); Bƣớc 14: Tạo RDDs cho liệu truy vấn huấn luyện bước tạo hai RDD (một cho R cho S) Các RDDs biểu thị liệu thô dạng đối tượng chuỗi Ví dụ 3.14: tạo RDD dạng chuỗi JavaRDD R = ctx.textFile(datasetR, 1); R.saveAsTextFile("/output/R"); JavaRDD S = ctx.textFile(datasetS, 1); S.saveAsTextFile("/output/S"); Bước tạo đầu cho tập liệu truy vấn (R) 1000;3.0,3.0 1001;10.1,3.2 1003;2.7,2.7 1004;5.0,5.0 1005;13.1,2.2 1006;12.7,12.7 đầu cho 100;c1;1.0,1.0 101;c1;1.1,1.2 102;c1;1.2,1.0 103;c1;1.6,1.5 104;c1;1.3,1.7 105;c1;2.0,2.1 106;c1;2.0,2.2 107;c1;2.3,2.3 208;c2;9.0,9.0 209;c2;9.1,9.2 210;c2;9.2,9.0 liệu đào tạo ( ) 42 211;c2;10.6,10.5 212;c2;10.3,10.7 213;c2;9.6,9.1 214;c2;9.4,10.4 215;c2;10.3,10.3 300;c3;10.0,1.0 301;c3;10.1,1.2 302;c3;10.2,1.0 303;c3;10.6,1.5 304;c3;10.3,1.7 305;c3;10.0,2.1 306;c3;10.0,2.2 307;c3;10.3,2.3 Bƣớc 15: Tính khoảng cách Cartesian (R, S) Bước này, tìm khoảng cách Cartesian tập liệu truy vấn (R) với tập liệu huấn luyện (S) Nó tạo RDD sau: {(r,s)/r Є R, s Є S} Ví dụ 3.15: tính tích hai tập liệu JavaPairRDD cart = R.cartesian(S); cart.saveAsTextFile("/output/cart"); ước cho t qu đầu (1000;3.0,3.0,100;c1;1.0,1.0) (1000;3.0,3.0,101;c1;1.1,1.2) (1000;3.0,3.0,306;c3;10.0,2.2) (1000;3.0,3.0,307;c3;10.3,2.3) (1001;10.1,3.2,100;c1;1.0,1.0) (1001;10.1,3.2,101;c1;1.1,1.2) (1001;10.1,3.2,306;c3;10.0,2.2) (1001;10.1,3.2,307;c3;10.3,2.3) 43 (1006;12.7,12.7,306;c3;10.0,2.2) (1006;12.7,12.7,307;c3;10.3,2.3) Bƣớc 16: Tìm khoảng cách (r, s) cho r R s S Bước này, tìm thấy khoảng cách Euclidian cặp (R, S) Dựa liệu yêu cầu tốn mình, ta chọn sử dụng thuật toán khoảng cách khác (chẳng hạn Minkowski) Việc lựa chọn thuật toán khoảng cách ảnh hưởng đến độ lệch phân loại K-Nearest Neighbors Bước tạo RDD sau: {(r, (distance, classification)} Ví dụ 3.16: tìm khoảng cách r,s JavaPairRDD knnMapped = cart.mapToPair(new PairFunction() { public Tuple2 call( Tuple2 cartRecord) { String rRecord = cartRecord._1; String sRecord = cartRecord._2; String[] rTokens = rRecord.split(";"); String rRecordID = rTokens[0]; String r = rTokens[1]; // r.1, r.2, , r.d String[] sTokens = sRecord.split(";"); // sTokens[0] = s.recordID String sClassificationID = sTokens[1]; String s = sTokens[2]; // s.1, s.2, , s.d Integer d = broadcastD.value(); double distance = calculateDistance(r, s, d); String K = rRecordID; // r.recordID Tuple2 V = new Tuple2( distance, sClassificationID); 44 return new Tuple2(K, V); } }); knnMapped.saveAsTextFile("/output/knnMapped"); ước cho t qu đầu (1000,(2.8284271247461903,c1)) (1000,(2.6172504656604803,c1)) (1000,(7.045565981523415,c3)) (1000,(7.333484846919642,c3)) (1001,(9.362157870918434,c1)) (1001,(0.9219544457292893,c3)) (1006,(10.84158659975559,c3)) (1006,(10.673331251301065,c3)) Bƣớc 17: Nhóm khoảng cách theo r R Sau tìm khoảng cách cho {(r, s)}, để tìm k hàng xóm gần nhất, ta nhóm liệu theo r Khi liệu nhóm theo r, sau ta qt giá trị nhóm tìm k khoảng cách gần Bước tạo RDD sau: {(r, {(distance, classification)}} Ví dụ 3.17: nhóm khoảng cách theo r JavaPairRDD knnGrouped = knnMapped.groupByKey(); Bƣớc 18: Tìm K phần tử gần phân loại r Bước này, ta qt giá trị nhóm để tìm K phần tử gần Để tìm phần tử k có khoảng cách nhỏ nhất, ta sử dụng SortedMap, giữ k lân cận gần Ở lần lặp, ta đảm bảo giữ phần tử k gần 45 Khi k phần tử gần tìm thấy, ta phân loại liệu truy vấn theo quy tắc đa số Ví dụ 3.18: tìm k phân loại r JavaPairRDD knnOutput = knnGrouped.mapValues(new Function< Iterable, String >() { public String call(Iterable neighbors) { Integer k = broadcastK.value(); SortedMap nearestK = findNearestK(neighbors,k); Map majority = buildClassificationCount(nearestK); String selectedClassification = classifyByMajority(majority); return selectedClassification; } }); knnOutput.saveAsTextFile("/output/knnOutput"); ước cho (1001,c3) (1000,c1) (1004,c1) (1006,c2) (1003,c1) t qu đầu 46 CHƢƠNG 4: CÀI ĐẶT THỬ NGHIỆM Tác giả tiến hành thực nghiệm thuật toán K-NN hệ thống máy tính liệu Ta có hai file csv file liệu huấn luyện, file kiểm thử: DLYT_train.csv : tập huấn luyện 1,141,123 bytes (48760 mẫu) DLYT_test.csv : tập kiểm thử 19,289 bytes (1000 mẫu) Chuyển hai file csv thành file txt theo định dạng đầu vào K-NN Spark Train.txt: Tập huấn luyện 1,141,123 bytes 48760 mẫu Test.txt: Tập kiểm thử 19,289 bytes 1000 mẫu Dùng tất 48760 mẫu để train Tạo test tách từ file Test.txt, để so sánh hai thuật toán: Test10.txt: 191 bytes, 10 mẫu Test50.txt: 984 bytes, 50 mẫu Test100.txt: 1893 bytes, 100 mẫu Test200.txt: 3800 bytes, 200 mẫu Test500.txt: 9955 bytes, 500 mẫu K-NN cổ điển Thuật toán cài đặt PC với cấu hình: Intel® Core™ i3-3240U CPU @ 3.4GHz GB Ram Hệ điều hành Window 8.1 64bit Thuật toán K-NNcổ điển cài đặt ngôn ngữ Python, tham số k = 5, d = 568 K-NN cải tiến Được triển khai GCP (Google Cloud Platform) 47 Masternode: Cores: 4vCPUs Menory: 15GB Primary disk size: 32GB Workernodes: Nodes với cấu hình node Cores: 4vCPUs Menory: 25GB Primary disk size: 32GB Tổng cấu hình cluster YARN cores: 20 YARN memory: 105 GB Hệ điều hành môi trường: Ubuntu 14.04, Hadoop 2.7, Spark 2.2 Thuật toán K-NN Spark cài đặt ngôn ngữ Java, tham số k = 5, d = 568 4.1 Kết Bảng 4.1: So sánh kết chạy thuật toán đƣợc thể bên dƣới: Số mẫu test K-NN (giây) K-NN cải tiến (giây) 10 249 59 50 1394 334 100 2764 697 200 5849 1468 500 15009 3649 48 Hình 4.1: Biểu đồ thời gian thực nghiệm thuật toán K-NN 4.2 Đánh giá Từ kết thực nghiệm ta thấy rằng, việc sử dụng K phần tử gần cổ điển liệu lớn điều không khả thi Đối với liệu hàng Terebyte, Petabyte, K phần tử gần cải tiến cho ta hiệu suất, thời gian, kết tốt nhiều Điểm hạn chế nghiên cứu chưa tận dụng hết lợi ích việc xếp, giai đoạn tính tích thực node nên nhiều thời gian Nghiên cứu đặc biệt làm tiền đề cho việc cải tiến thuật toán K phần tử gần tốt nữa, thuật tốn khác có khai thác xếp liệu 4.3 Kết luận Nhu cầu khai thác liệu lớn ngày tăng Với hệ thống truyền thống, liệu lớn hoàn tồn khó có khả đáp ứng thời gian nhận dạng phải đối mặt với giới hạn tài nguyên nhớ khả xử lý máy tính Do đó, xử lý hiệu liệu lớn bước 49 quan trọng để phân tích phân loại liệu Điều chứng tỏ tầm quan trọng việc sử dụng mô hình MapReduce tảng xử lý phân tán để xử lý khối lượng liệu lớn Trong nghiên cứu này, tác giả đề xuất phương pháp hiệu mặt thời gian thực gán nhãn liệu với việc ứng dụng mơ hình MapReduce xếp liệu môi trường Spark để xử lý lượng lớn liệu Hệ thống hỗ trợ tính tốn trực tiếp nhớ làm cho trình truy vấn liệu nhanh so với hệ thống dựa đĩa cứng Hadoop Việc xếp liệu giúp cho việc tính tốn nghiệm đơn giản Thuật tốn K phần tử gần dựa mơ hình MapReduce đáp ứng yêu cầu hiệu suất xử lý Kết thực nghiệm cho thấy độ xác thời gian thực giảm rõ rệt so với phương pháp truyền thống sử dụng kỹ thuật tính tốn song song xếp liệu DANH MỤC TÀI LIỆU THAM KHẢO [1] Hoàng Trọng Hiếu, 2017, “Tổng quan Apache Spark cho hệ thống Big Data” [2] ThS Trần Hùng Cường, ThS Ngô Đức Vĩnh, (2011), “Tổng quan phát tri thức khai phá liệu” [3] Ge Song, Justine Rochas, Lea Beze, Fabrice Huet, Frederic Magoules, 2017, ”K Nearest Neighbour Joins for Big Data on MapReduce: A Theoretical and Experimental Analysis” [4] Annapoorna P S, K Aafreen, Preethi J D, Dr Jitendranath Mungara, 2017, “Survey on K-Nearest Neighbour Joins for Big Data on MapReduce”, International Journal of Innovative Research in Computer and Communication Engineering, Vol.5, Special Issue 5, June 2017 [5] Thilina Gunarathme, Srinath Perena, 2013, “Hadoop Mapreduce cookbook” [6] Jon Lentz, Jonathan R Owens, Brian Femiano, 2013, “Hadoop RealWorld Solutions Cookbook” [7] Databricks, 2017, “The Data Engineer’s Guide to Apache Spark”, [8] Aishwarya M R, Debaswini Khuntia, Preethi J D, 2017, “Data Classification by KNN using Mapreduce In Hadoop“, International Journal of Scientific Research in Computer Science, Engineering and Information Technology [9] Kauser Ahmed P, D.P Acharjya, 2016, “A survey on Big Data Analytics: International Challenges, Journal Open of Research Advanced Applications, Vol 7, No 2, 2016 Issues Computer and Tools”, Science and [10] Jesús Maillo, Isaac Triguero, 2015, “A MapReduce-Based k-Nearest Neighbor Approach for Big Data Classification”, 2015 IEEE Trustcom/BigDataSE/ISPA ... toán K phần tử gần khai phá liệu lớn với mơ hình Mapreduce Đối tƣợng nghiên cứu Thuật tốn K phần tử gần Mơ hình xử lý Mapreduce Thuật toán xếp thứ cấp 2 Phạm vi nghiên cứu Áp dụng thuật toán. .. thuật toán K phân tử gần cải tiến khai phá liệu với mơ hình Mapreduce Phƣơng pháp nghiên cứu Từ kiến thức học máy, liệu lớn, tốn lập trình áp dụng nghiên cứu, cài đặt thuật toán K phần tử gần cổ... giai đoạn trình phát tri thức từ số lượng lớn liệu lưu trữ sở liệu, kho liệu nơi lưu trữ khác Hình 1.2: Kiến trúc hệ thống khai phá liệu [5] 10 1.2.5 Ứng dụng khai phá liệu Khai phá liệu thu hút