Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 121 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
121
Dung lượng
3,32 MB
Nội dung
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG NGUYỄN ĐÔNG HUY MỘT SỐ KỸ THUẬT PHÂN CỤM DỮ LIỆU VÀ ỨNG DỤNG PHÂN LOẠI KHÁCH HÀNG SỬ DỤNG DỊCH VỤ VIỄN THÔNG LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Thái Nguyên - 2014 LỜI CẢM ƠN Trong trình làm luận văn, thân em nhận nhiều giúp đỡ bảo tận tình thầy giáo, giúp đỡ, tạo điều kiện gia đình, bạn bè để hồn thành khóa luận tiến độ Em xin trân trọng cảm ơn thầy giáo TS Nguyễn Huy Đức trực tiếp hướng dẫn nhiệt tình, bảo cặn kẽ trình làm luận văn Em xin gửi lời cám ơn chân thành tới Ban lãnh đạo nhà trường, cán giảng viên trường Đại học Công nghệ Thông tin Truyền thông – Đại học Thái Nguyên tạo điều kiện thuận lợi để em hồn thành tốt khóa luận Học viên Nguyễn Đơng Huy Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ LỜI CAM ĐOAN Em xin cam đoan kiến thức trình bày luận văn em tm hiểu, nghiên cứu trình bày lại theo cách hiểu em Trong trình làm luận văn em có tham khảo tài liệu liên quan ghi rõ nguồn tài liệu tham khảo Phần lớn kiến thức em trình bày luận văn chưa trình bày hồn chỉnh tài liệu Thái Nguyên, ngày 10 tháng năm 2014 Học viên Nguyễn Đơng Huy Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH SÁCH HÌNH VẼ DANH SÁCH BẢNG BIỂU DANH MỤC CÁC TỪ VIẾT TẮT LỜIMỞ ĐẦU 10 CHƯƠNG 1: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU 10 1.1 Khai phá liệu phát tri thức 11 1.1.1 Khai phá liệu 11 1.1.2 Quá trình khám phá tri thức 12 1.1.3 Khai phá liệu lĩnh vực liên quan 13 1.1.4 Các kỹ thuật áp dụng khai phá liệu 13 1.1.5 Ứng dụng khai phá liệu 15 1.2 Kỹ thuật phân cụm khai phá liệu 16 1.2.1 Tổng quan kỹ thuật phân cụm 16 1.2.2 Ứng dụng phân cụm liệu 18 1.2.3 Các yêu cầu kỹ thuật phân cụm liệu 19 1.3 Tổng kết chương 20 CHƯƠNG 2: MỘT SỐ KỸ THUẬT PHÂN CỤM DỮ LIỆU 21 2.1 Phâncụmphânhoạch 21 2.1.1 Thuật toán k-means 22 2.1.2 Thuật toán PAM 24 2.1.3 Thuật toán CLARA 28 2.1.4 Thuật toán CLARANS 29 2.2 Phân cụm phân cấp 31 2.2.1 Thuật toán BIRCH 32 2.2.2 Thuật toán CURE 35 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 2.3 Phân cụm dựa mật độ 37 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 2.3.1 Thuật toán DBSCAN 38 2.3.2 Thuật toán OPTICS 42 2.3.3 Thuật toán DENCLUE 43 2.4 Phân cụm lưới 44 2.4.1 Thuật toán STING 45 2.4.2 Thuật toán CLIQUE 46 2.5 Phân cụm liệu dựa mơ hình 47 2.5.1 Thuật toán EM 48 2.5.2 Thuật toán COBWEB 49 2.6 Phân cụm liệu mờ 49 2.7 Tổng kết chương 50 CHƯƠNG 3: ỨNG DỤNG PHÂN CỤM DỮ LIỆU ĐỂ PHÂN LOẠI KHÁCH HÀNG SỬ DỤNG DỊCH VỤ VIỄN THÔNG 52 3.1 Đặt vấn đề toán 52 3.2 Cài đặt Cơ sở liệu 52 3.3 Cài đặt thuật toán 56 3.4 Đánh giá kết phân cụm thuật toán PAM 60 3.5 Kết luận chương 61 KẾT LUẬN 62 TÀILIỆUTHAMKHẢO 63 PHỤ LỤC 65 Số hóa Trung tâm Học liệu – Đại học Thái Ngun http://www.lrc-tnu.edu.vn/ DANH SÁCH HÌNH VẼ Hình 1.1.Quátrìnhkhámphátri thức 11 Hình 1.2.Cáclĩnh vựcliênquan đến khámphátri thứctrongCSDL 13 Hình 1.3.Trựcquanhóakết quảKPDLtrongOracle .15 Hình 1.4.Môphỏngsự PCDL 16 Hình 2.1.Thuậttốnk-means 22 Hình 2.2.Hìnhdạngcụmdữ liệu khámphábởi k-means .23 Hình2.3.Trườnghợp Cjmp=d(Oj,Om,2) –d(Oj,Om) khơngâm 25 Hình2.4.Trường hợp Cjmp=(Oj,Op)- d(Oj,Om)có thểâm hoặcdương .26 Hình2.5.Trườnghợp Cjmpbằngkhơng 26 Hình2.6.Trườnghợp Cjmp=(Oj,Op)- d(Oj,Om,2)lnâm 27 Hình 2.7.Thuậttốn PAM 27 Hình 2.8.ThuậttốnCLARA 28 Hình 2.9.ThuậttốnCLARANS .31 Hình 2.10.Cácchiến lượcphâncụmphâncấp 32 Hình 2.11.CâyCF đượcsử dụngbởi thuật tốnBIRCH 34 Hình 2.12.ThuậttốnBIRCH 35 Hình 2.13.Ví dụvềkết quảphâncụmbằngthuậttốnBIRCH .35 Hình 2.14.Cáccụmdữ liệu đượckhámphábởi CURE 37 Hình 2.15.ThuậttốnCURE 37 Hình 2.16.Một sốhìnhdạngkhámphá phâncụmdựa trênmật độ 38 Hình 2.17.LâncậncủaP với ngưỡngEps 39 Hình 2.18.Mật độ-đến đượctrựctếp 40 Hình 2.19.Mật độ đến 40 Hình 2.20.Mật độ liênthông 41 Hình 2.21.Cụmvà nhiễu 41 Số hóa Trung tâm Học liệu – Đại học Thái Ngun http://www.lrc-tnu.edu.vn/ Hình 2.22.ThuậttốnDBSCAN .42 Hình 2.23.Thứ tự phâncụmcácđối tượngtheoOPTICS 43 Hình 2.24.DENCLUEvới hàmphân phối Gaussian 45 Hình2.25.Mơhìnhcấutrúcdữliệulưới 46 Hình2.26.ThuậttốnCLIQUE 48 Hình2.27.QtrìnhnhậndạngcácơcủaCLIQUE 48 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ DANH SÁCH BẢNG BIỂU Hình 3.1 Các trường khai báo liệu 54 Hình 3.2.Dữ liệu khách hàng .55 Hình 3.3.Dữ liệu khách hàng SQL Server 56 Hình 3.4.Giao diện chương trình nhập liệu 57 Hình 3.5.Giao diện chọn tham số cho thuật toán 58 Hình 3.6.Giao diện phân cụm theo thời lượng gọi 58 Hình 3.7.Danh sách khách hàng thuộc cụm theo thời lượng gọi Hình 3.8.Danh sách khách hàng thuộc cụm theo thời lượng gọi Hình 3.9.Danh sách khách hàng thuộc cụm theo thời lượng gọi Hình 3.10.Giao diện phân cụm theo tiền dịch vụ 60 Hình 3.11.Danh sách khách hàng thuộc cụm theo tiền dịch vụ 60 Hình 3.12.Danh sách khách hàng thuộc cụm theo tền dịch vụ 61 Hình 3.13.Danh sách khách hàng thuộc cụm theo tền dịch vụ 61 DANH MỤC CÁC TỪ VIẾT TẮT Stt Viết tắt Cụm từtiếngAnh Cụm từtiếngViệt CNTT InformatonTechnology Côngnghệthôngtn CSDL Database Cơ sởdữliệu KDD KnowledgeDiscovery inDatabase KPDL Datamining Khaiphá dữliệu KPVB TextMining Khaiphávănbản PCDL DataClustering Phâncụmdữ liệu Khámphá trithứctrongcơ sởdữliệu if (jj == ii || medoids.Contains(elements[jj])) continue; if (nearestDistances[jj] > distances.getValue(ii, jj)) { // add i will improve j's nearest distances // (if selected, i will be the new nearest neighbour of j) gain += nearestDistances[jj] - distances.getValue(ii, jj); } } gains[ii] = gain; } } // select candidate with maximum gain double maxGain = Double.NegativeInfinity; int maxIndex = -1; for (int ii = 0; ii < m; ++ii) { if (gains[ii] > maxGain) { maxGain = gains[ii]; maxIndex = ii; } } // add element to medoid set addMedoid(maxIndex); } // check that the number of medoids match the expected if (nClusters != medoids.Count) 77 { throw new Exception("Expected error in BUILD phase: Number of medoids does not match parameter k."); } } /** * SWAP phase Atempt to improve clustering quality by exchanging medoids with non-medoids */ private void swapPhase() { bool notConverged = true; bool contnueLoop = true; int nSwaps = 0; while (notConverged && continueLoop) { notConverged = false; contnueLoop = false; IEnumerator medIt = medoids.GetEnumerator(); while (medIt.MoveNext() && continueLoop) { int ii = medIt.Current; IEnumerator nonmedIt = nonmedoids.GetEnumerator(); while (nonmedIt.MoveNext()) { int hh = nonmedIt.Current; // Consider swapping medoid i and nonmedoid h 78 // by calculating gains by all other elements // Calculate cumulative change to distance to nearest medoid for all nonmedoids j != h double change = 0; IEnumerator nonmedIt2 = nonmedoids.GetEnumerator(); while (nonmedIt2.MoveNext()) { int jj = nonmedIt2.Current; if (jj == hh) continue; double d = nearestDistances[jj]; if (distances.getValue(ii, jj) > d) { // if removed, i will have no impact if (distances.getValue(jj, hh) < d) { // if selected, h will improve nearest distance for j change += distances.getValue(jj, hh) - d; } } else { // i cannot be closer than the nearest neighbour for j; // therefore, distances[i][j] == d // and i is currently the nearest neighbour for j double e = nextNearestDistances[jj]; if (distances.getValue(jj, hh) < e) { 79 // if i and h are swapped, h will become the nearest neighbour // nearest distance for j may improve or worsen change += distances.getValue(jj, hh) d; } 80 else { // if i is removed, the current next-nearest of j will promoted to nearest be change += e - d; } } } if (change < 0) { // distance to nearest medoid summed over all nonmedoids improved: swap is swap(hh, ii); //System.out.print("Swap " + hh + " and " + ii + " for change = " + change + "\n"); // non-convergence if any swap occurs, up to a maximum number of swaps (to guard against swap cycles) if (nSwaps++ < maxSwaps) { notConverged = true; } else { 81 continueLoop = false; } // reset iterator medIt = medoids.GetEnumerator(); // break out of inner loop to consider next medoid break; } } } } } private void addMedoid(int add) { medoids.Add(elements[add]); nonmedoids.Remove(elements[add]) ; updateNearest(add, -1); } private void swap(int add, int remove) { medoids.Add(elements[add]); nonmedoids.Remove(elements[add]) ; medoids.Remove(elements[remove]) ; nonmedoids.Add(elements[remove]) ; updateNearest(add, remove); } /** * Update nearest and next-nearest distances * Does not check whether {@code added} or {@ removed} have been added to or removed from the medoid set * FIXME optimize * @param added Index of element added to medoid set (-1 for none) * @param removed Index of element removed from medoid set (-1 for none) */ private void updateNearest(int added, int removed) { int m = size(); if (added >= 0) { // added index is valid // check if any nearest distance improves for (int ii = 0; ii < m; ++ii) { double d = distances.getValue(ii, added); if (d < nearestDistances[ii]) { u // el e m e nt i is n e ar er to a d d e d m e d oi d th a n pr e vi o us n e ar es t: d o u ble oldDi stan ce = near estDi stan ces[ii ]; int oldMedoid = nearestMedoids[ii]; nearestMedoids[ii] = added; nearestDistances[ii] = d; // pump nearest distance to next-nearest distance nextNearestMedoids[ii] = oldMedoid; nextNearestDistances[ii] = oldDistance; } else if (d < nextNearestDistances[ii]) { // element i is nearer to added medoid than previous nextnearest: updat e nextNearestMedoids[ii] = added; nextNearestDistances[ii] = d; } } } if (removed >= 0) { // removed index is valid // check if the removed medoid is the nearest or next-nearest of any elemen t for (int ii = 0; ii < m; ++ii) { if (nearestMedoids[ii] == removed) { // promote next-nearest to nearest nearestMedoids[ii] = nextNearestMedoids[ii]; nearestDistances[ii] = nextNearestDistances[ii]; // find new nextnearest updateNextNearest(ii); } else if (nextNearestMedoids[ii] == removed) { // find new nextnearest updateNextNearest(ii); } } } } /** * Update next nearest for element i * Assume nearest medoid is already set * @param ii element index to be updated */ private void updateNextNearest(int ii) { int nearestMedoid = nearestMedoids[ii]; // find the next-nearest IEnumerator it = medoids.GetEnumerator(); double minDistance = Double.PositiveInfinity; int nextNearestMedoid = -1; while (it.MoveNext()) { int jj = it.Current; // ignore if j is the nearestMedoid, since we are interested in the next- neares t if (jj == nearestMedoid) continue; if (distances.getValue(ii, jj) < minDistance) { minDistance = distances.getValue(ii, jj); nextNearestMedoid = jj; } } // update nextNearestDistances[ii] = minDistance; nextNearestMedoids[ii] = nextNearestMedoid; } } } ... vào thực trạng kết hợp với kỹ thuật phân cụm khai phá liệu để thực đề tài: Một số kỹ thuật phân cụm liệu ứng dụng phân loại khách hàng sử dụng dịch vụ Viễn thông Bố cục luận văn gồm chương:... liệu phát tri thức, kỹ thuật phân cụm khai phá liệu Chương 2: Giới thiệu số liệu phân cụm phổ biến thường sử dụng khai phá liệu phát tri thức Chương 3: Sử dụng kỹ thuật phân cụm để ứng dụng vào... cụm để ứng dụng vào phân loại khách hàng sử dụng dịch vụ viễn thơng Trong chương trình bày chương 10 trình mơ áp dụng kỹ thuật phân cụm để phân loại sử dụng dịch vụ Viễn thông Phần kết luận luận