Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 131 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
131
Dung lượng
1,99 MB
Nội dung
SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ TÂY TRƯỜNG THPT PHÚ XUYÊN B GIÁO ÁN TIN HỌC LỚP 11 Năm học 2007-2008 Biên soạn: Trần Nguyên Hương -1- Mục lục Mục lục DANH SÁCH HÌNH VẼ BẢNG TỪ VIẾT TẮT TỪ KHOÁ LỜI CẢM ƠN MỞ ĐẦU Chƣơng TỔNG QUAN VỀ PHÂN CỤM TRONG KHAI PHÁ DỮ LIỆU VÀ CÁC KHÁI NIỆM CƠ BẢN 1.1 Giới thiệu chung 1.2 Khai phá liệu gì? 10 1.3 Qúa trình khai phá tri thức sở liệu 10 1.4 Các kỹ thuật áp dụng khai phá liệu 11 1.4.1 Các kỹ thuật tiếp cận khai phá liệu 11 1.4.2 Các dạng liệu khai phá 12 1.5 Ứng dụng khai phá liệu 13 1.6 Phân cụm liệu ứng dụng 13 1.6.1 Mục đích phân cụm liệu 13 1.6.2 Các bước để phân cụm 14 1.6.3 Các loại đặc trưng 15 1.6.4 Các ứng dụng phân cụm 16 1.6.5 Phân loại thuật toán phân cụm 17 1.7 Các khái niệm định nghĩa 20 1.7.1 Các định nghĩa phân cụm 20 1.7.2 Các độ đo gần gũi 21 Chƣơng CÁC THUẬT TOÁN PHÂN CỤM TUẦN TỰ 33 2.1 Số cách phân cụm 33 2.2 Thuật toán phân cụm - BSAS 34 2.3 Ƣớc lƣợng số cụm 36 2.4 Sửa đổi thuật toán BSAS - Thuật toán MBSAS 37 2.5 Thuật toán phân cụm hai ngƣỡng - TTSAS 39 2.6 Giai đoạn tinh chế 42 -2- Chƣơng CÁC THUẬT TOÁN PHÂN CỤM PHÂN CẤP 44 3.1 Giới thiệu 44 3.2 Các thuật tốn tích tụ - GAS 45 3.2.1 Một số định nghĩa 46 3.2.2 Một số thuật tốn tích tụ dựa lý thuyết ma trận 49 3.2.3 Monotonicity Crossover 56 3.2.4 Một sơ thuật tốn tích tụ dựa lý thuyết đồ thị 59 3.2.5 Ảnh hưởng ma trận gần gũi tới sơ đồ phân cụm 70 3.3 Các thuật toán phân rã - GDS 73 3.3.1 Cải tiến sơ đồ GDS 76 3.4 Lựa chọn phân cụm tốt 80 Chƣơng CÁC THUẬT TOÁN PHÂN CỤM QUA TỐI ƢU HOÁ 82 4.1 Tổng quan tối ƣu hoá khái niệm 82 4.1.1 Một số khái niệm giải tích lồi 82 4.1.2 Các toán tối ưu 84 4.1.3 Một số phương pháp giải toán tối ưu 86 4.2 Bài toán phân cụm theo tâm 93 4.2.1 Phân cụm qua quy hoạch toán học 93 4.2.2 Phân cụm qua tối ưu hoá d.c 98 Chƣơng PHÂN TÍCH VÀ CÀI ĐẶT THỬ NGHIỆM 108 5.1 Cài đặt 108 5.1.1 MBSAS 109 5.1.2 TTSAS 109 5.1.3 GAS 110 5.1.4 GDS 111 5.2 Mô cụm 112 5.2.1 Sinh liệu khởi tạo thuật toán 113 5.3 Kết thử nghiệm 114 5.3.1 Ảnh hưởng tham số 115 KẾT LUẬN 117 Hƣớng phát triển đề tài 118 TÀI LIỆU DẪN 119 PHỤ LỤC: MÃ NGUỒN CỦA MỘT SỐ THUẬT TOÁN 121 -3- DANH SÁCH HÌNH VẼ Hình 1-1 Các bƣớc thực trình khai phá tri thức 11 Hình 1-2 Các bƣớc trình phân cụm 15 Hình 1-3 Hình dạng loại cụm 20 Hình 1-4 Phân bố vector rời rạc lƣới ℓ - chiều 25 Hình 1-5 Các loại cụm đại diện 30 Hình 2-1 Sự phụ thuộc số cụm đƣợc tạo số cụm lớn đƣợc phép q 35 Hình 2-2 Đồ thị ƣớc lƣợng số cụm 37 Hình 2-3 Minh hoạ phân cụm thuật tốn MBSAS (a) thuật tốn TTSAS (b) 42 Hình 3-1 Sơ đồ phân cụm phân cấp với tập liệu X ví dụ 3.2 47 Hình 3-2 Minh hoạ sơ đồ tƣơng tự không tƣơng tự 48 Hình 3-3 Tập liệu X (a) Sơ đồ không tƣơng tự sinh thuật toán liên kết đơn (b), thuật toán liên kết đầy đủ (c) 51 Hình 3-4 Sơ đồ khơng tƣơng tự sinh thuật tốn Liên kết đơn, Liên kết đầy đủ, UPGMC WPGMC với tƣợng crossover 57 Hình 3-5 Minh hoạ đƣờng loại đồ thị 60 Hình 3-6 Các đồ thị ngƣỡng đồ thị gần gũi xây dựng từ ma trận khơng tƣơng tự P(X) ví dụ 3.2 61 Hình 3-7 Đồ thị với khả liên kết cạnh đỉnh bậc đỉnh 62 Hình 3-8 Các đồ thị ngƣỡng ma trận khơng tƣơng tự P ví dụ 3.5 65 Hình 3-9 Đồ thị gần gũi G(13) sinh từ ma trận không tƣơng tự P ví dụ 3.6 67 Hình 3-10 Các sơ đồ phân cụm dùng thuật toán GTAS thoả thuộc tính h(k) ví dụ 3.6 68 Hình 3-11 Sơ đồ ngƣỡng ví dụ 3.6 với thuộc tính bậc đỉnh k =3 69 Hình 3-12 Cây khung nhỏ ma trận không tƣơng tự (a) Sơ đồ không tƣơng tự tƣơng ứng áp dụng thuật toán dựa MST (b) cho ví dụ 3.7 70 Hình 3-13 Các sơ đồ minh hoạ cho trƣờng hợp ma trận khơng tƣơng tự có hai phần tử ví dụ 3.8 71 Hình 3-14 Sơ đồ khơng tƣơng tự đạt đƣợc thuật toán liên kết đơn (a) thuật toán liên kết đầy đủ (b) với ma trận P1 72 Hình 3-15 Minh hoạ bƣớc phân cụm sơ đồ GDS 79 Hình 3-16 Sơ đồ trƣờng hợp có hai cụm (a) có cụm (b) tập liệu 80 -4Hình 3-17 Ví dụ độ đo “Tự - tương tự” (a) mô điều kiện kết thúc phƣơng pháp II (b) 81 Hình 4-1 Sơ đồ nhánh cận 92 Hình 4-2 Các đƣờng cong sống sót đại diện cho cụm 194 bệnh nhân ung thƣ áp dụng thuật toán k-Median 97 Hình 4-3 Các đƣờng cong sống sót đại diện cho cụm 194 bệnh nhân ung thƣ áp dụng thuật toán k-Mean 98 Hình 5-1 Quan sát cụm đƣợc tạo 113 Hình 5-2: Màn hình sinh liệu 114 Hình 5-3 Màn hình thiết lập thơng số cho thuật toán 114 Hình 5-4 Ý nghĩa việc chọn tham số đắn 115 Hình 5-5 Ý nghĩa đắn số cụm tạo 116 DANH SÁCH BẢNG BIỂU Bảng 3-1 Các kết thuật toán thảo luận áp dụng ma trận gần gũi ví dụ 3.4 56 Bảng 5-1: Thời gian thực thuật toán với liệu khác 115 -5- BẢNG TỪ VIẾT TẮT Từ tiếng Anh Từ cụm từ Từ tiếng Việt BLP BiLinear Programming Quy hoạch song tuyến tính BSAS Basic Sequential Algorithmic Scheme Sơ đồ thuật toán phân cụm sở CSDL D.C DM GAS Data Base Difference of two Convex functions Dissimilarity Measure Generalized Agglomerative Scheme Cơ sở liệu Hiệu hai hàm lồi Độ đo không tương tự Sơ đồ tích tụ tổng quát GDS Generalized Divisive Scheme Sơ đồ phân rã tổng quát GTAS Graph Theory – based Algorithmic Scheme KDD Knowledge Discovery in Databases LP Linear Programming Sơ đồ thuật toán dựa lý thuyết đồ thị Khai phá tri thức sở liệu Quy hoạch tuyến tính MBSAS Modified Basic Sequential Algorithmic Scheme Sơ đồ thuật toán phân cụm sở sửa đổi MST Minimum Spanning Tree Cây khung nhỏ MUAS Matrix Updating Algorithmic Scheme Sơ đồ thuật toán biến đổi ma trận SM Similarity Measure Độ đo tương tự TTSAS Two – Threshold Sequential Algorithmic Scheme Sơ đồ thuật toán ngưỡng UPGMA Unweighted Pair Group Method Average Phương pháp trung bình theo cặp khơng trọng số UPGMC Unweight Pair Group Method Centroid Phương pháp trọng tâm theo cặp không chọn số WPGMA Weighted Pair Group Method Average Phương pháp trung bình theo cặp trọng số WPGMC Weighted Pair Group Method Centroid Phương pháp trọng tâm theo cặp trọng số TỪ KHOÁ Clustering algorithms, Sequential Clustering algorithms, Hierarchical Clustering algorithms, Clustering Algorithms Based on Cost Function Optimization, Clustering via D.C Optimization, Clustering via Mathematical Programming, Mathematical Programming in data mining, Optimization Global, Clustering software… Thank you for evaluating AnyBizSoft PDF Splitter A watermark is added at the end of each output PDF file To remove the watermark, you need to purchase the software from http://www.anypdftools.com/buy/buy-pdf-splitter.html -7- MỞ ĐẦU Ngày nay, với phát triển mạnh mẽ công nghệ phần cứng truyền thông, hệ thống liệu phục vụ cho lĩnh vực kinh tế - xã hội không ngừng tăng lên, lượng liệu tạo ngày lớn Sự phong phú liệu, thông tin với khả kịp thời khai thác chúng mang đến suất chất lượng cho công tác quản lý, hoạt động kinh doanh,…Nhưng yêu cầu thông tin lĩnh vực hoạt động đó, đặc biệt lĩnh vực làm định, ngày đòi hỏi cao hơn, người định cần liệu mà cịn cần có thêm nhiều hiểu biết, nhiều tri thức để hỗ trợ cho việc định Cho đến năm 90 kỷ trước, nhu cầu khám phá tri thức thực bùng nổ, theo đó, hàng loạt lĩnh vực nghiên cứu tổ chức kho liệu kho thông tin, hệ trợ giúp định, thuật toán nhận dạng mẫu phân lớp mẫu, …và đặc biệt khai phá liệu (Data Mining) đời Từ đời, khai phá liệu trở thành hướng nghiên cứu phổ biến lĩnh vực khoa học máy tính cơng nghệ tri thức Nhiều kết nghiên cứu, ứng dụng khai phá liệu lĩnh vực khoa học, kinh tế, xã hội Khai phá liệu bao hàm nhiều hướng nghiên cứu quan trọng, số phân cụm liệu (Data Clustering) Phân cụm liệu trình tìm kiếm phát cụm mẫu liệu tự nhiên sở liệu lớn Các kỹ thuật áp dụng phân cụm liệu phần lớn kế thừa từ lĩnh vực thống kê, học máy, nhận dạng, lượng hố, Đến nay, có nhiều ứng dụng phân cụm liệu cho việc giải vấn đề lĩnh vực tài chính, thơng tin địa lý, sinh học, nhận dạng ảnh,… Trong thời gian gần đây, lĩnh vực phân cụm liệu, người ta tập trung chủ yếu vào nghiên cứu, phân tích mơ hình liệu phức tạp liệu văn bản, Web, hình ảnh,…và đặc biệt mơ hình liệu hỗn hợp để áp dụng chúng phân cụm liệu Ở Việt Nam, năm trở lại đây, nhu cầu tự động khám phá tri thức từ liệu sẵn có nhằm tăng lực cạnh tranh ngành kinh tế phát triển nhanh Vì vậy, tơi chọn hướng nghiên cứu "Một số thuật toán phân cụm liệu khai phá liệu" làm đề tài nghiên cứu cho luận văn Luận văn trình bày có hệ thống số họ thuật tốn phân cụm liệu điển hình, bao gồm cách tiếp cận đặc điểm ứng dụng -8Cấu trúc nội dung luận văn bao gồm phần nhƣ sau: Chương 1: Trình bày tổng quan khai phá liệu, phân cụm, thuật toán phân cụm phân loại khai phá liệu đồng thời trình bày khái niệm số độ đo tương tự, không tương tự… Chương chương 3: Trình bày thuật tốn phân cụm truyền thống gồm họ thuật toán phân cụm thuật toán phân cụm phân cấp điển hình ưu điểm, nhược điểm chúng Chương 4: Tập trung nghiên cứu giải toán cụm theo tâm dựa vào tối ưu hố Có hai cách tiếp cận đưa phân cụm qua quy hoạch toán học phân cụm qua tối ưu hố d.c Để khẳng định tính hiệu cách tiếp cận, luận văn trình bày lại kết thí nghiệm phân cụm bệnh nhân ung thư vú sở liệu đại học Wisconsin Đây cơng trình nghiên cứu GS TSKH Hồng Tuỵ (viện Tốn học Việt Nam), GS Mangasarian (đại học Wisconsin, Madison) cộng Chương 5: Phân tích cài đặt thử nghiệm phân cụm tập liệu vector không gian ba chiều sử dụng số thuật toán tiêu biểu MBSAS, TTSAS, GAS, GDS Chúng ta đưa cách cài đặt kết đạt Phần kết luận trình bày tóm tắt nội dung thực luận văn, đồng thời đưa vấn đề nghiên cứu tiếp cho tương lai Phần phụ lục trình bày số modul chương trình cài đặt cho thuật toán MBSAS, TTSAS, GAS, GDS Do thời gian nghiên cứu trình độ có hạn, luận văn khơng tránh khỏi có hạn chế thiếu sót Tơi xin tiếp thu ý kiến, đánh giá, bảo thầy giáo bạn bè đồng nghiệp Tôi xin chân thành cảm ơn Hà Nội, tháng 10 năm 2007 Học viên Trần Nguyên Hƣơng -9- Chƣơng TỔNG QUAN VỀ PHÂN CỤM TRONG KHAI PHÁ DỮ LIỆU VÀ CÁC KHÁI NIỆM CƠ BẢN 1.1 Giới thiệu chung Những năm 60 kỷ trước, người ta bắt đầu sử dụng công cụ tin học để tổ chức khai thác CSDL Cùng với phát triển vượt bậc công nghệ điện tử truyền thông, khả thu thập lưu trữ xử lý liệu cho hệ thống tin học khơng ngừng nâng cao, theo đó, lượng thông tin lưu trữ thiết bị nhớ không ngừng tăng lên Thống kê sơ cho thấy, lượng thông tin hệ thống tin học sau 20 tháng lại tăng gấp đôi [3] Cuối thập kỷ 80 kỷ 20, phát triển rộng khắp CSDL quy mô tạo bùng nổ thơng tin tồn cầu Vào thời gian này, người ta bắt đầu đề cập đến khái niệm khủng hoảng phân tích liệu tác nghiệp để cung cấp thông tin với yêu cầu chất lượng ngày cao cho người làm định tổ chức tài chính, thương mại, khoa học,… Đúng John Naisbett cảnh báo “Chúng ta chìm ngập liệu mà đói tri thức” Lượng liệu khổng lồ thực nguồn “tài ngun” có nhiều giá trị thơng tin yếu tố then chốt hoạt động quản lý, kinh doanh, phát triển sản xuất dịch vụ, … giúp người điều hành quản lý có hiểu biết mơi trường tiến trình hoạt động tổ chức trước định để tác động đến trình hoạt động nhằm đạt mục tiêu cách hiệu bền vững Khai phá liệu (Data Mining) lĩnh vực xuất hiện, nhằm tự động khai thác thông tin, tri thức có tính tiềm ẩn, hữu ích từ CSDL lớn cho đơn vị, tổ chức, doanh nghiệp,… từ làm thúc đẩy khả sản xuất, kinh doanh, cạnh tranh cho đơn vị, tổ chức Các kết khoa học ứng dụng thành công khám phá tri thức, cho thấy, khai phá liệu lĩnh vực phát triển bền vững, mang lại nhiều lợi ích có nhiều triển vọng, đồng thời có ưu hẳn so với cơng cụ phân tích liệu truyền thống Hiện nay, khai phá liệu ứng dụng ngày rộng rãi lĩnh vực như: Thương mại, tài chính, điều trị y học, viễn thơng, tin – sinh,… - 121 - PHỤ LỤC: MÃ NGUỒN CỦA MỘT SỐ THUẬT TOÁN /** * Cluster.h * * La mot lop co so chua cac vector mau * */ /** * Dinh nghia mot cum don Mot cum co mot danh sach cac vector * thuoc cum Cac vector co the duoc them vao hoac loai bo * khoi cum * Cac lop khac co the kế thừa lop Chang han nhu cac * lop co cac vector dai dien khac Lop su dung dai * dien la vec tor trung binh * */ class CCluster { protected: /** Danh sach Cac vector dang thuoc ve cum */ VList Vectors; /** Dai dien trung binh */ fVector3 Medium; /** Cac vector Outlier hien tai */ fVector3 Outlier; /** Khoang cach tu cac vector Outlier toi vector dai dien */ float fOutlierDist; /** La cac outlier hop le */ bool bOutlierValid; /** Cap nhat gia tri dai dien */ virtual void UpdateMedium(); /** Cap nhat vector outlier (vector nam xa vetor dai dien nhat */ virtual void UpdateOutlier(); public: CCluster(void); /** Kiem tra xem cum co rong khong? */ bool IsEmpty() const; /** Them mot vector vao cum */ virtual void AddVector(const fVector3& vec); /** Loai bo mot vector khoi cum */ virtual void RemoveVector(const fVector3& vec); /** Chua tat ca vector cua mot cum da cho */ virtual void Include(CCluster& cluster); /** Tra ve mot tham chieu toi danh sach cac vector */ virtual const VList& GetVectors() const; /** Tra ve vector dai dien */ virtual fVector3 GetRepresentative() const { return Medium; } /** Tra ve vector outlier */ - 122 virtual fVector3 GetOutlier(); /** Tra ve khoang cach outlier */ virtual float GetOutlierDist(); /** Tra ve mot doi tuong cum moi */ virtual CCluster* GetNewCluster() { return new CCluster(); } /** Tra ve binh phuong khoang cach toi virtual float Distance(const fVector3& /** Tra ve binh phuong khoang cach toi virtual float Distance(const CCluster* /** Lam sach va xoa cum */ virtual ~CCluster(void); }; /** Mot danh sach cac tro cum */ typedef list ClList; vector da cho */ vec); mot cum khac */ clust); // Cluster.cpp… void CCluster::Include(CCluster& cluster) { VList::iterator i; for (i = cluster.Vectors.begin(); i != cluster.Vectors.end(); ++i) { Vectors.push_back(*i); } UpdateMedium(); bOutlierValid = false; } const VList& CCluster::GetVectors() const { return Vectors; } float CCluster::Distance(const fVector3& vec) { return Medium.SquaredDistance(vec); } float CCluster::Distance(const CCluster* clust) { return Medium.SquaredDistance(clust->GetRepresentative()); } /** * ClustAlgorithm.h **/ #pragma once #include "Cluster.h" /** * Cung cap lop co so cho tat ca cac thuat toan phan cum */ class CClustAlgorithm { - 123 public: CClustAlgorithm() {}; virtual void SetParameters(float theta, int q = 0) = 0; /** * Tao phep phan cum toi uu cac vector su dung cac lop empty da cho * Co the cho cac loai lop cum khac nhu tham so * */ virtual ClList* Clusterize(const VList* vectors, CCluster* empty) const = 0; /** Tra ve so cum tim duoc, neu khong co*/ virtual int GetClusters() { return 0; } /** Tra ve tham so theta duoc su dung, neu khong su dung */ virtual float GetTheta() { return 0.f; } virtual float GetTheta2() { return 0.f; } /** Tra ve ten cua thuat toan */ virtual const char* GetName() const = 0; virtual ~CClustAlgorithm(void) {}; }; // MBSAS.cpp… ClList* CMBSAS::Clusterize(const VList* vectors, CCluster* empty) const { int numVectors = 0; int clusters = 0; fVector3 tmp; if ((vectors == NULL) || (empty == NULL)) return NULL; if ((int)vectors->size() < 1) return NULL; // Day khong la cach toi uu VList tmplist = *vectors; ClList* ClusterList = new ClList(); VList::iterator iter; ClList::iterator iter2; // Khoi tao tat ca cac vector iter = tmplist.begin(); empty->AddVector(*iter); iter++; ClusterList->push_back(empty); // 'Tạo cac cum' for (; iter != tmplist.end(); iter++) { tmp = *iter; float mindist = FLT_MAX; // Tim khoang cach nho nhat for (iter2 = ClusterList->begin(); iter2 != ClusterList->end(); iter2++) { - 124 float dist = (*iter2)->Distance(tmp); if (dist < mindist) mindist = dist; } // Co tao cum moi khong? if ((mindist > fTheta) && ((int)ClusterList->size() < iq)) { CCluster* newclust = empty->GetNewCluster(); newclust->AddVector(tmp); ClusterList->push_back(newclust); } } // Phai loai bo mau vua tao for (iter2 = ClusterList->begin(); iter2 != ClusterList->end(); iter2++) { tmp = (*iter2)->GetRepresentative(); // Dai dien la nhat tmplist.remove(tmp); } // Phan loai cac vector lai for (iter = tmplist.begin(); iter != tmplist.end(); iter++) { tmp = *iter; float mindist = FLT_MAX; CCluster* minclust = NULL; // Tim khoang cach cum nho nhat for (iter2 = ClusterList->begin(); iter2 != ClusterList->end(); iter2++) { float dist = (*iter2)->Distance(tmp); if (dist < mindist) { mindist = dist; minclust = *iter2; } } minclust->AddVector(tmp); // them vector vao cum } return ClusterList; } // TTSAS.cpp ClList* CTTSAS::Clusterize(const VList* vectors, CCluster* empty) const { if ((vectors == NULL) || (empty == NULL)) return NULL; if ((int)vectors->size() < 1) return NULL; bool* clas = new bool[vectors->size()]; fVector3* tmplist = new fVector3[vectors->size()]; VList::const_iterator iter; int i = 0; for (iter = vectors->begin(); iter != vectors->end(); iter++, i++) { tmplist[i] = *iter; clas[i] = false; - 125 } ClList* ClusterList = new ClList(); int numVectors = (int)vectors->size(); int numDone = 0; // So mau da duoc phan lop int existsChange = 0; // So vector duoc phan lop lan duyet int curChange = 0; // So vector da duoc phan lop tinh den lan duyet hien tai int prevChange = 0; // So vector da duoc phan lop cac lan duyet truoc float mindist = FLT_MAX; CCluster* minclust = NULL; ClList::iterator iter2; while (numDone < numVectors) { bool gotOne = false; for (i = 0; i < numVectors; i++) { if (!clas[i] && existsChange == && !gotOne) { // Dam bao rang vong while se phai ket thuc :) CCluster* clust = empty->GetNewCluster(); clust->AddVector(tmplist[i]); ClusterList->push_back(clust); clas[i] = true; curChange++; numDone++; gotOne = true; } else if (clas[i] == 0) { mindist = FLT_MAX; minclust = NULL; // Tim cum khoang cach nho nhat for (iter2 = ClusterList->begin(); iter2 != ClusterList->end(); iter2++) { float dist = (*iter2)->Distance(tmplist[i]); if (dist < mindist) { mindist = dist; minclust = *iter2; } } if (mindist < fTheta1) { // them vector vao cum da co minclust->AddVector(tmplist[i]); clas[i] = true; curChange++; numDone++; } else if (mindist > fTheta2) { // can tao cum moi CCluster* clust = empty->GetNewCluster(); clust->AddVector(tmplist[i]); ClusterList->push_back(clust); clas[i] = true; curChange++; numDone++; } } else // clas == curChange++; - 126 } existsChange = abs(curChange - prevChange); prevChange = curChange; curChange = 0; } delete empty; delete[] clas; delete[] tmplist; return ClusterList; } // GDS.cpp ClList* CGDS::Clusterize(const VList* vectors, CCluster* empty) const { if ((vectors == NULL) || (empty == NULL)) return NULL; if ((int)vectors->size() < 1) return NULL; // Tạo phep phan cum khoi tao ClList* ClusterList = new ClList(); VList::const_iterator iter; CCluster* tmp = empty->GetNewCluster(); for (iter = vectors->begin(); iter != vectors->end(); iter++) tmp->AddVector(*iter); ClusterList->push_back(tmp); float maxdist, maxdist2; CCluster* maxclust; ClList::iterator iter2; while ((int)ClusterList->size() < iq) { maxdist = 0; maxclust = NULL; // Tim cum co phan tu outlier lon nhat for (iter2 = ClusterList->begin(); iter2 != ClusterList->end(); iter2++) if ((*iter2)->GetOutlierDist() > maxdist) { maxdist = (*iter2)->GetOutlierDist(); maxclust = *iter2; } // Chuyen outlier vao mot cum moi CCluster* newclust = empty->GetNewCluster(); newclust->AddVector(maxclust->GetOutlier()); maxclust->RemoveVector(maxclust->GetOutlier()); ClusterList->push_back(newclust); bool foundOne = true; // Khi tim thay mot vector tuong tu hon mot cum moi while (foundOne) { foundOne = false; // Chua tim thay vector nao fVector3 vect(0, 0, 0); maxdist = FLT_MAX; // Duyet qua tat ca cac vector cum cu for (iter = maxclust -> GetVectors().begin();iter != maxclust-> GetVectors().end(); iter++) { - 127 maxdist2 = newclust->Distance(*iter); // Khoang cach toi cum moi if (maxclust->Distance(*iter) > maxdist2 && maxdist2 < maxdist) { foundOne = true; maxdist = maxdist2; // Khoang cach gan nhat toi cum moi vect = *iter; } } if (foundOne) { // Tim thay mot vector? newclust->AddVector(vect); maxclust->RemoveVector(vect); } } } delete empty; return ClusterList; } // GAS.cpp ClList* CGAS::Clusterize(const VList* vectors, CCluster* empty) const { if ((vectors == NULL) || (empty == NULL)) return NULL; if ((int)vectors->size() < 1) return NULL; // Tao mot phan cum khoi tao ClList* ClusterList = new ClList(); VList::const_iterator iter; for (iter = vectors->begin(); iter != vectors->end(); iter++) { CCluster* tmp = empty->GetNewCluster(); tmp->AddVector(*iter); ClusterList->push_back(tmp); } ClList::iterator iter2; ClList::iterator iter3; float mindist; CCluster* minclust1; CCluster* minclust2; while ((int)ClusterList->size() > iq) { mindist = FLT_MAX; minclust1 = NULL; minclust2 = NULL; // Duyet hai cum ma no co khoang cach nho nhat (slow) for (iter2 = ClusterList->begin(); iter2 != ClusterList->end(); iter2++) { iter2++; // Tang gia for (iter3 = iter2 ; iter3 != ClusterList->end(); iter3++) { float dist = (*iter2)->Distance(*iter3); if (dist < mindist) { mindist = dist; minclust1 = *iter2; minclust2 = *iter3; } - 128 } } // va ket hop hai cum voi if (minclust2 != NULL) { minclust1->Include(*minclust2); ClusterList->remove(minclust2); delete minclust2; } } delete empty; return ClusterList; } // GLRenderer.cpp… void CGLRenderer::DrawVolumes(const ClList* list) { int c = 0; glColor4f(0.5f, 0.5f, 0.5f, 0.4f); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); for (ClList::const_iterator iter=list->begin();iter!= iter++, c+=3){ glPushMatrix(); float dist = (*iter)->GetOutlierDist(); fVector3 out = (*iter)->GetRepresentative(); glTranslatef(out.x, out.y, out.z); glutWireSphere(sqrt(dist), 8, 8); glutSolidSphere(sqrt(dist), 8, 8); glPopMatrix(); } glDisable(GL_BLEND); } void CGLRenderer::RotateCamera(float xrot, float yrot) { // Quay len tren vdir = vdir.Rotate(vup, 3.1415f * yrot / 180.f); vleft = vleft.Rotate(vup, 3.1415f * yrot / 180.f); vup = vdir.Cross(vleft); // Quay sang trai vup = vup.Rotate(vleft, 3.1415f * xrot / 180.f); vdir = vdir.Rotate(vleft, 3.1415f * xrot / 180.f); vleft = vup.Cross(vdir); vdir.Normalize(); vleft.Normalize(); vup.Normalize(); } list->end(); Thank you for evaluating AnyBizSoft PDF Splitter A watermark is added at the end of each output PDF file To remove the watermark, you need to purchase the software from http://www.anypdftools.com/buy/buy-pdf-splitter.html Thank you for evaluating AnyBizSoft PDF Merger! To remove this page, please register your program! Go to Purchase Now>> AnyBizSoft PDF Merger Merge multiple PDF files into one Select page range of PDF to merge Select specific page(s) to merge Extract page(s) from different PDF files and merge into one ... phá liệu 11 1. 4 .1 Các kỹ thuật tiếp cận khai phá liệu 11 1. 4.2 Các dạng liệu khai phá 12 1. 5 Ứng dụng khai phá liệu 13 1. 6 Phân cụm liệu ứng dụng 13 1. 6 .1 Mục... đích phân cụm liệu 13 1. 6.2 Các bước để phân cụm 14 1. 6.3 Các loại đặc trưng 15 1. 6.4 Các ứng dụng phân cụm 16 1. 6.5 Phân loại thuật toán phân cụm 17 1. 7... Chƣơng PHÂN TÍCH VÀ CÀI ĐẶT THỬ NGHIỆM 10 8 5 .1 Cài đặt 10 8 5 .1. 1 MBSAS 10 9 5 .1. 2 TTSAS 10 9 5 .1. 3 GAS 11 0 5 .1. 4 GDS 11 1 5.2 Mô cụm