Hiệu suất trường hợp trận đấu python
Mỗi thuật toán phân cụm có hai biến thể. một lớp, triển khai phương thức >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 để tìm hiểu các cụm trên dữ liệu đào tạo và một hàm, với dữ liệu đào tạo đã cho, trả về một mảng các nhãn số nguyên tương ứng với các cụm khác nhau. Đối với lớp, các nhãn trên dữ liệu huấn luyện có thể được tìm thấy trong thuộc tính >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...9 Show
Dữ liệu đầu vào Một điều quan trọng cần lưu ý là các thuật toán được triển khai trong mô-đun này có thể lấy các loại ma trận khác nhau làm đầu vào. Tất cả các phương pháp chấp nhận ma trận dữ liệu tiêu chuẩn có hình dạng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...0. Chúng có thể được lấy từ các lớp trong mô-đun >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...1. Đối với >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...2, >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...3 và >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...4, người ta cũng có thể nhập ma trận tương tự của hình dạng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...5. Chúng có thể được lấy từ các chức năng trong mô-đun >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...6 2. 3. 1. Tổng quan về các phương pháp phân cụm¶So sánh các thuật toán phân cụm trong scikit-learning ¶ Tên phương thức Thông số khả năng mở rộng ca sử dụng Hình học (số liệu được sử dụng) K-Means số cụm _______ Rất lớn 27, trung bình ____28 với MiniBatch code Mục đích chung, kích thước cụm đồng đều, hình học phẳng, không quá nhiều cụm, quy nạp Khoảng cách giữa các điểm lan truyền ái lực giảm xóc, ưu tiên mẫu Không thể mở rộng với n_samples Nhiều cụm, kích thước cụm không đồng đều, hình học không phẳng, quy nạp Vẽ đồ thị khoảng cách (e. g. nearest-neighbor graph) dịch chuyển trung bình bandwidth Not scalable with >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7 Nhiều cụm, kích thước cụm không đồng đều, hình học không phẳng, quy nạp Khoảng cách giữa các điểm Spectral clustering số cụm Medium >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7, small >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 Few clusters, even cluster size, non-flat geometry, transductive Vẽ đồ thị khoảng cách (e. g. nearest-neighbor graph) Ward hierarchical clustering number of clusters or distance threshold Large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7 and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 Many clusters, possibly connectivity constraints, transductive Khoảng cách giữa các điểm Agglomerative clustering number of clusters or distance threshold, linkage type, distance Large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7 and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 Many clusters, possibly connectivity constraints, non Euclidean distances, transductive Any pairwise distance DBSCAN neighborhood size Very large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7, medium >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 Non-flat geometry, uneven cluster sizes, outlier removal, transductive Distances between nearest points OPTICS minimum cluster membership Very large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7, large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 Non-flat geometry, uneven cluster sizes, variable cluster density, outlier removal, transductive Khoảng cách giữa các điểm Gaussian mixtures many Not scalable Flat geometry, good for density estimation, inductive Mahalanobis distances to centers BIRCH branching factor, threshold, optional global clusterer Large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7 Large dataset, outlier removal, data reduction, inductive Euclidean distance between points Bisecting K-Means số cụm Very large >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7, medium >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 General-purpose, even cluster size, flat geometry, no empty clusters, inductive, hierarchical Khoảng cách giữa các điểm Non-flat geometry clustering is useful when the clusters have a specific shape, i. e. a non-flat manifold, and the standard euclidean distance is not the right metric. This case arises in the two top rows of the figure above Gaussian mixture models, useful for clustering, are described in another chapter of the documentation dedicated to mixture models. KMeans can be seen as a special case of Gaussian mixture model with equal covariance per component. Transductive clustering methods (in contrast to inductive clustering methods) are not designed to be applied to new, unseen data. 2. 3. 2. K-means¶The >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 algorithm clusters data by trying to separate samples in n groups of equal variance, minimizing a criterion known as the inertia or within-cluster sum-of-squares (see below). This algorithm requires the number of clusters to be specified. It scales well to large numbers of samples and has been used across a large range of application areas in many different fields The k-means algorithm divides a set of \(N\) samples \(X\) into \(K\) disjoint clusters \(C\) , each described by the mean \(\mu_j\) of the samples in the cluster. The means are commonly called the cluster “centroids”; note that they are not, in general, points from \(X\) , although they live in the same space. The K-means algorithm aims to choose centroids that minimise the inertia, or within-cluster sum-of-squares criterion \[\sum_{i=0}^{n}\min_{\mu_j \in C}(. x_i - \mu_j. ^2)\] Quán tính có thể được coi là thước đo mức độ liên kết bên trong của các cụm. It suffers from various drawbacks
K-means is often referred to as Lloyd’s algorithm. In basic terms, the algorithm has three steps. The first step chooses the initial centroids, with the most basic method being to choose \(k\) samples from the dataset \(X\) . After initialization, K-means consists of looping between the two other steps. The first step assigns each sample to its nearest centroid. The second step creates new centroids by taking the mean value of all of the samples assigned to each previous centroid. The difference between the old and the new centroids are computed and the algorithm repeats these last two steps until this value is less than a threshold. In other words, it repeats until the centroids do not move significantly. K-means tương đương với thuật toán tối đa hóa kỳ vọng với ma trận hiệp phương sai đường chéo nhỏ, hoàn toàn bằng nhau Thuật toán cũng có thể được hiểu thông qua khái niệm sơ đồ Voronoi. Đầu tiên, sơ đồ Voronoi của các điểm được tính bằng các trọng tâm hiện tại. Mỗi phân đoạn trong sơ đồ Voronoi trở thành một cụm riêng biệt. Thứ hai, các trọng tâm được cập nhật thành giá trị trung bình của từng phân khúc. Thuật toán sau đó lặp lại điều này cho đến khi thỏa mãn tiêu chí dừng. Thông thường, thuật toán dừng khi mức giảm tương đối của hàm mục tiêu giữa các lần lặp nhỏ hơn giá trị dung sai đã cho. Đây không phải là trường hợp trong việc thực hiện này. lặp lại dừng lại khi trọng tâm di chuyển ít hơn dung sai Nếu có đủ thời gian, K-means sẽ luôn hội tụ, tuy nhiên điều này có thể ở mức tối thiểu cục bộ. This is highly dependent on the initialization of the centroids. Kết quả là, việc tính toán thường được thực hiện nhiều lần, với các khởi tạo khác nhau của trọng tâm. Một phương pháp giúp giải quyết vấn đề này là sơ đồ khởi tạo k-means++, đã được triển khai trong scikit-learning (sử dụng tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...65). Điều này khởi tạo các trọng tâm (thường) cách xa nhau, dẫn đến kết quả có thể tốt hơn so với khởi tạo ngẫu nhiên, như thể hiện trong tài liệu tham khảo K-mean++ cũng có thể được gọi độc lập để chọn hạt giống cho các thuật toán phân cụm khác, xem >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...66 để biết chi tiết và ví dụ sử dụng Thuật toán hỗ trợ trọng số mẫu, có thể được cung cấp bởi tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...67. Điều này cho phép gán nhiều trọng số hơn cho một số mẫu khi tính toán trung tâm cụm và giá trị quán tính. Ví dụ: gán trọng số 2 cho một mẫu tương đương với việc thêm một bản sao của mẫu đó vào tập dữ liệu \(X\) . K-means có thể được sử dụng để lượng tử hóa véc tơ. Điều này đạt được bằng cách sử dụng phương pháp biến đổi của một mô hình được đào tạo của >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 2. 3. 2. 1. Song song cấp thấp¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 lợi ích từ tính song song dựa trên OpenMP thông qua Cython. Các khối dữ liệu nhỏ (256 mẫu) được xử lý song song, ngoài ra còn mang lại dung lượng bộ nhớ thấp. Để biết thêm chi tiết về cách kiểm soát số lượng luồng, vui lòng tham khảo ghi chú Song song của chúng tôi. ví dụ
Người giới thiệu
2. 3. 2. 2. K-Means hàng loạt nhỏ¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...20 là một biến thể của thuật toán >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 sử dụng các lô nhỏ để giảm thời gian tính toán, trong khi vẫn cố gắng tối ưu hóa cùng một hàm mục tiêu. Lô nhỏ là tập hợp con của dữ liệu đầu vào, được lấy mẫu ngẫu nhiên trong mỗi lần lặp đào tạo. Các lô nhỏ này giảm đáng kể lượng tính toán cần thiết để hội tụ thành một giải pháp cục bộ. Trái ngược với các thuật toán khác làm giảm thời gian hội tụ của k-mean, k-means hàng loạt nhỏ tạo ra kết quả thường chỉ kém hơn một chút so với thuật toán tiêu chuẩn Thuật toán lặp lại giữa hai bước chính, tương tự như vanilla k-mean. Ở bước đầu tiên, \(b\) các mẫu được lấy ngẫu nhiên từ tập dữ liệu để tạo thành một lô nhỏ. Chúng sau đó được gán cho trọng tâm gần nhất. In the second step, the centroids are updated. In contrast to k-means, this is done on a per-sample basis. For each sample in the mini-batch, the assigned centroid is updated by taking the streaming average of the sample and all previous samples assigned to that centroid. This has the effect of decreasing the rate of change for a centroid over time. These steps are performed until convergence or a predetermined number of iterations is reached. >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...20 converges faster than >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64, but the quality of the results is reduced. In practice this difference in quality can be quite small, as shown in the example and cited reference ví dụ
Người giới thiệu
2. 3. 3. Affinity Propagation¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...2 creates clusters by sending messages between pairs of samples until convergence. A dataset is then described using a small number of exemplars, which are identified as those most representative of other samples. The messages sent between pairs represent the suitability for one sample to be the exemplar of the other, which is updated in response to the values from other pairs. This updating happens iteratively until convergence, at which point the final exemplars are chosen, and hence the final clustering is given Affinity Propagation can be interesting as it chooses the number of clusters based on the data provided. For this purpose, the two important parameters are the preference, which controls how many exemplars are used, and the damping factor which damps the responsibility and availability messages to avoid numerical oscillations when updating these messages The main drawback of Affinity Propagation is its complexity. The algorithm has a time complexity of the order \(O(N^2 T)\) , where \(N\) is the number of samples and \(T\) is the number of iterations until convergence. Ngoài ra, độ phức tạp của bộ nhớ theo thứ tự \(O(N^2)\) nếu sử dụng ma trận tương tự dày đặc, nhưng có thể rút gọn nếu sử dụng ma trận thưa thớt . Điều này làm cho Tuyên truyền mối quan hệ phù hợp nhất cho các bộ dữ liệu có kích thước vừa và nhỏ. ví dụ
Mô tả thuật toán. Các tin nhắn được gửi giữa các điểm thuộc một trong hai loại. Đầu tiên là trách nhiệm \(r(i, k)\) , là bằng chứng tích lũy mà mẫu . Thứ hai là tính khả dụng should be the exemplar for sample \(i\). The second is the availability \(a(i, k)\) là bằng chứng tích lũy mà mẫu \ . Theo cách này, các mẫu được chọn theo mẫu nếu chúng (1) đủ giống với nhiều mẫu và (2) được nhiều mẫu chọn để đại diện cho chính chúng. should choose sample \(k\) to be its exemplar, and considers the values for all other samples that \(k\) should be an exemplar. In this way, exemplars are chosen by samples if they are (1) similar enough to many samples and (2) chosen by many samples to be representative of themselves. Chính thức hơn, trách nhiệm của mẫu \(k\) là gương mẫu của mẫu \(i\) is given by: \[r(i, k) \leftarrow s(i, k) - max [ a(i, k') + s(i, k') \forall k' \neq k ]\] Ở đâu \(s(i, k)\) là sự giống nhau giữa các mẫu \( . Tính khả dụng của mẫu and \(k\). The availability of sample \(k\) để làm mẫu cho mẫu \(i\) is given by: \[a(i, k) \leftarrow min [0, r(k, k) + \sum_{i'~s. t. ~i' \notin \{i, k\}}{r(i', k)}]\] Đầu tiên, tất cả các giá trị cho \(r\) và \(a\) . Như đã thảo luận ở trên, để tránh dao động số khi cập nhật thông báo, hệ số giảm xóc are set to zero, and the calculation of each iterates until convergence. As discussed above, in order to avoid numerical oscillations when updating the messages, the damping factor \(\lambda\) được đưa vào quy trình lặp. \[r_{t+1}(i, k) = \lambda\cdot r_{t}(i, k) + (1-\lambda)\cdot r_{t+1}(i, k)\] \[a_{t+1}(i, k) = \lambda\cdot a_{t}(i, k) + (1-\lambda)\cdot a_{t+1}(i, k)\] trong đó \(t\) cho biết thời gian lặp lại. 2. 3. 4. Ca trung bình¶Phân cụm >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...25 nhằm mục đích khám phá các đốm màu trong mật độ mẫu mịn. Nó là một thuật toán dựa trên trọng tâm, hoạt động bằng cách cập nhật các ứng cử viên cho trọng tâm là giá trị trung bình của các điểm trong một khu vực nhất định. Những ứng cử viên này sau đó được lọc trong giai đoạn xử lý hậu kỳ để loại bỏ các bản sao gần như trùng lặp để tạo thành tập hợp các trọng tâm cuối cùng Cho một ứng cử viên trọng tâm \(x_i\) để lặp lại \(t\), the candidate is updated according to the following equation: \[x_i^{t+1} = m(x_i^t)\] Ở đâu \(N(x_i)\) là vùng lân cận của các mẫu trong một khoảng cách nhất định xung quanh \(x_i\) and \(m\) is the mean shift vector that is computed for each centroid that points towards a region of the maximum increase in the density of points. This is computed using the following equation, effectively updating a centroid to be the mean of the samples within its neighborhood: \[m(x_i) = \frac{\sum_{x_j \in N(x_i)}K(x_j - x_i)x_j}{\sum_{x_j \in N(x_i)}K(x_j - x_i)}\] Thuật toán tự động đặt số lượng cụm, thay vì dựa vào tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...26, cho biết kích thước của vùng cần tìm kiếm. Tham số này có thể được đặt thủ công, nhưng có thể được ước tính bằng cách sử dụng hàm >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...27 được cung cấp, được gọi nếu băng thông không được đặt Thuật toán không có khả năng mở rộng cao, vì nó yêu cầu nhiều lần tìm kiếm hàng xóm gần nhất trong quá trình thực hiện thuật toán. Thuật toán được đảm bảo hội tụ, tuy nhiên thuật toán sẽ dừng lặp lại khi thay đổi về trọng tâm là nhỏ Ghi nhãn một mẫu mới được thực hiện bằng cách tìm trọng tâm gần nhất cho một mẫu nhất định ví dụ
Người giới thiệu
2. 3. 5. Phân cụm quang phổ¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...3 thực hiện nhúng ma trận ái lực có kích thước thấp giữa các mẫu, sau đó là phân cụm, e. g. , theo KMeans, của các thành phần của vectơ riêng trong không gian ít chiều. Nó đặc biệt hiệu quả về mặt tính toán nếu ma trận ái lực thưa thớt và bộ giải >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...29 được sử dụng cho bài toán giá trị riêng (Lưu ý, bộ giải >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...29 yêu cầu mô-đun pyamg được cài đặt. ) The present version of SpectralClustering requires the number of clusters to be specified in advance. Nó hoạt động tốt đối với một số ít cụm, nhưng không được khuyên dùng cho nhiều cụm Đối với hai cụm, SpectralClustering giải quyết vấn đề giãn lồi của bài toán cắt chuẩn hóa trên biểu đồ tương tự. cắt đồ thị thành hai để trọng số của các cạnh bị cắt nhỏ so với trọng số của các cạnh bên trong mỗi cụm. Tiêu chí này đặc biệt thú vị khi làm việc trên hình ảnh, trong đó các đỉnh của biểu đồ là các pixel và trọng số của các cạnh của biểu đồ tương tự được tính bằng hàm gradient của hình ảnh Cảnh báo Chuyển đổi khoảng cách thành những điểm tương đồng được cư xử tốt Lưu ý rằng nếu các giá trị của ma trận tương tự của bạn không được phân phối tốt, e. g. với các giá trị âm hoặc với ma trận khoảng cách thay vì độ tương tự, bài toán quang phổ sẽ là số ít và bài toán không thể giải được. Trong trường hợp đó, nên áp dụng phép biến đổi cho các mục của ma trận. Chẳng hạn, trong trường hợp ma trận khoảng cách đã ký, người ta thường áp dụng hạt nhân nhiệt >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...3 Xem các ví dụ cho một ứng dụng như vậy ví dụ
2. 3. 5. 1. Các chiến lược gán nhãn khác nhau¶Có thể sử dụng các chiến lược gán nhãn khác nhau, tương ứng với tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...41 của >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...3. Chiến lược >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...43 có thể phù hợp với các chi tiết tốt hơn, nhưng có thể không ổn định. Đặc biệt, trừ khi bạn kiểm soát >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...44, nó có thể không được sao chép từ lần chạy này sang lần chạy khác, vì nó phụ thuộc vào khởi tạo ngẫu nhiên. Chiến lược thay thế >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...45 có thể lặp lại 100%, nhưng có xu hướng tạo ra các bưu kiện có hình dạng hình học khá đồng đều. Tùy chọn >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...46 được thêm gần đây là một tùy chọn xác định có xu hướng tạo phân vùng trực quan tốt nhất trên ứng dụng ví dụ bên dưới >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...47 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...48 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...49 Người giới thiệu
2. 3. 5. 2. Đồ thị phân cụm quang phổ¶Phân cụm quang phổ cũng có thể được sử dụng để phân vùng biểu đồ thông qua các nhúng quang phổ của chúng. Trong trường hợp này, ma trận ái lực là ma trận kề của đồ thị và SpectralClustering được khởi tạo với >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...30 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...4 Người giới thiệu
2. 3. 6. Phân cụm theo cấp bậc¶Phân cụm theo thứ bậc là một họ chung của các thuật toán phân cụm xây dựng các cụm lồng nhau bằng cách hợp nhất hoặc tách chúng liên tiếp. Hệ thống phân cấp các cụm này được biểu diễn dưới dạng cây (hoặc dendrogram). Gốc cây là cụm duy nhất tập hợp tất cả các mẫu, lá là cụm chỉ có một mẫu. Xem trang Wikipedia để biết thêm chi tiết Đối tượng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...31 thực hiện phân cụm theo cấp bậc bằng cách sử dụng cách tiếp cận từ dưới lên. mỗi quan sát bắt đầu trong cụm riêng của nó và các cụm được hợp nhất liên tiếp với nhau. Tiêu chí liên kết xác định số liệu được sử dụng cho chiến lược hợp nhất
>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...31 cũng có thể mở rộng thành số lượng lớn mẫu khi nó được sử dụng cùng với ma trận kết nối, nhưng tốn kém về mặt tính toán khi không có ràng buộc kết nối nào được thêm vào giữa các mẫu. nó xem xét ở mỗi bước tất cả các hợp nhất có thể >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...33 ____ >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...33 sử dụng phân cụm kết tụ để nhóm các tính năng trông rất giống nhau lại với nhau, do đó làm giảm số lượng tính năng. Đây là công cụ giảm kích thước, xem Giảm kích thước không giám sát . 2. 3. 6. 1. Loại liên kết khác. Liên kết phường, hoàn chỉnh, trung bình và đơn lẻ¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...31 hỗ trợ các chiến lược liên kết Phường, đơn lẻ, trung bình và đầy đủ Cụm kết tụ có hành vi “giàu càng giàu” dẫn đến kích thước cụm không đồng đều. Về vấn đề này, liên kết đơn lẻ là chiến lược tồi tệ nhất và Ward đưa ra các kích thước thông thường nhất. Tuy nhiên, mối quan hệ (hoặc khoảng cách được sử dụng trong phân cụm) không thể thay đổi với Ward, do đó, đối với các số liệu phi Euclide, liên kết trung bình là một lựa chọn thay thế tốt. Liên kết đơn, mặc dù không mạnh đối với dữ liệu nhiễu, nhưng có thể được tính toán rất hiệu quả và do đó có thể hữu ích để cung cấp phân cụm theo cấp bậc của các bộ dữ liệu lớn hơn. Liên kết đơn cũng có thể hoạt động tốt trên dữ liệu phi toàn cầu ví dụ
2. 3. 6. 2. Trực quan hóa phân cấp cụm¶Có thể hình dung cây đại diện cho sự hợp nhất theo thứ bậc của các cụm dưới dạng một dendrogram. Kiểm tra trực quan thường có thể hữu ích để hiểu cấu trúc của dữ liệu, mặc dù nhiều hơn thế trong trường hợp cỡ mẫu nhỏ 2. 3. 6. 3. Thêm hạn chế kết nối¶Một khía cạnh thú vị của >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...31 là các ràng buộc kết nối có thể được thêm vào thuật toán này (chỉ các cụm liền kề mới có thể được hợp nhất với nhau), thông qua ma trận kết nối xác định cho từng mẫu các mẫu lân cận theo cấu trúc dữ liệu nhất định. Chẳng hạn, trong ví dụ cuộn swiss bên dưới, các ràng buộc kết nối cấm hợp nhất các điểm không liền kề trên cuộn swiss và do đó tránh hình thành các cụm kéo dài qua các nếp gấp chồng chéo của cuộn Các ràng buộc này rất hữu ích để áp đặt một cấu trúc cục bộ nhất định, nhưng chúng cũng làm cho thuật toán nhanh hơn, đặc biệt khi số lượng mẫu cao Các ràng buộc kết nối được áp đặt thông qua ma trận kết nối. một ma trận thưa thớt scipy chỉ có các phần tử ở giao điểm của một hàng và một cột với các chỉ số của tập dữ liệu sẽ được kết nối. Ma trận này có thể được xây dựng từ thông tin tiên nghiệm. chẳng hạn, bạn có thể muốn nhóm các trang web bằng cách chỉ hợp nhất các trang có liên kết trỏ từ trang này sang trang khác. Nó cũng có thể được học từ dữ liệu, chẳng hạn như sử dụng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...37 để hạn chế hợp nhất với hàng xóm gần nhất như trong ví dụ này hoặc sử dụng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...38 để chỉ cho phép hợp nhất . coin example. ví dụ
Cảnh báo Ràng buộc kết nối với liên kết đơn, trung bình và đầy đủ Các ràng buộc về kết nối và liên kết đơn lẻ, hoàn chỉnh hoặc trung bình có thể nâng cao khía cạnh 'giàu ngày càng giàu hơn' của phân cụm tổng hợp, đặc biệt nếu chúng được xây dựng bằng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...37. Trong giới hạn của một số lượng nhỏ các cụm, chúng có xu hướng đưa ra một số cụm bị chiếm đóng ở cấp độ vĩ mô và các cụm gần như trống rỗng. (xem phần thảo luận trong Phân cụm kết tụ có và không có cấu trúc ). Liên kết đơn là tùy chọn liên kết giòn nhất liên quan đến vấn đề này. 2. 3. 6. 4. Thay đổi chỉ số¶Liên kết đơn, trung bình và đầy đủ có thể được sử dụng với nhiều khoảng cách (hoặc ái lực), đặc biệt là khoảng cách Euclide (l2), khoảng cách Manhattan (hoặc Cityblock, hoặc l1), khoảng cách cosin hoặc bất kỳ ma trận ái lực được tính toán trước nào
Nguyên tắc chọn số liệu là sử dụng một số liệu tối đa hóa khoảng cách giữa các mẫu trong các lớp khác nhau và giảm thiểu khoảng cách đó trong mỗi lớp ví dụ
2. 3. 6. 5. Phương tiện K chia đôi¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...400 là một biến thể lặp lại của >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64, sử dụng phân cụm theo thứ bậc phân chia. Thay vì tạo tất cả các trọng tâm cùng một lúc, các trọng tâm được chọn dần dần dựa trên phân cụm trước đó. một cụm được chia thành hai cụm mới nhiều lần cho đến khi đạt được số cụm mục tiêu >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...400 hiệu quả hơn >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 khi số lượng cụm lớn vì nó chỉ hoạt động trên một tập hợp con dữ liệu tại mỗi phần chia đôi trong khi >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 luôn hoạt động trên toàn bộ tập dữ liệu Mặc dù theo thiết kế, >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...400 không thể hưởng lợi từ những lợi thế của việc khởi tạo >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...406, nhưng nó vẫn sẽ tạo ra kết quả tương đương với >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...407 về quán tính với chi phí tính toán rẻ hơn và có thể sẽ tạo ra kết quả tốt hơn so với >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 với khởi tạo ngẫu nhiên Biến thể này hiệu quả hơn đối với phân cụm kết tụ nếu số lượng cụm nhỏ so với số lượng điểm dữ liệu Biến thể này cũng không tạo ra các cụm trống Có hai chiến lược để chọn cụm để tách
Chọn theo số lượng điểm dữ liệu lớn nhất trong hầu hết các trường hợp tạo ra kết quả chính xác như chọn theo quán tính và nhanh hơn (đặc biệt đối với số lượng điểm dữ liệu lớn hơn, trong đó lỗi tính toán có thể tốn kém) Chọn theo số lượng điểm dữ liệu lớn nhất cũng sẽ có khả năng tạo ra các cụm có kích thước tương tự trong khi >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...64 được biết là tạo ra các cụm có kích thước khác nhau Có thể thấy sự khác biệt giữa K-Mean chia đôi và K-Means thông thường trong ví dụ So sánh hiệu suất K-Mean chia đôi và K-Means thông thường . Mặc dù thuật toán K-Means thông thường có xu hướng tạo các cụm không liên quan, nhưng các cụm từ K-Means Chia đôi được sắp xếp hợp lý và tạo ra một hệ thống phân cấp rõ ràng. Người giới thiệu
2. 3. 7. DBSCAN¶Thuật toán >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...4 xem các cụm là các khu vực có mật độ cao được phân tách bằng các khu vực có mật độ thấp. Do chế độ xem khá chung chung này, các cụm được tìm thấy bởi DBSCAN có thể có hình dạng bất kỳ, trái ngược với phương tiện k giả định rằng các cụm có hình dạng lồi. Thành phần trung tâm của DBSCAN là khái niệm về các mẫu lõi, là các mẫu nằm trong khu vực có mật độ cao. Do đó, một cụm là một tập hợp các mẫu lõi, mỗi mẫu gần nhau (được đo bằng một số thước đo khoảng cách) và một tập hợp các mẫu không lõi gần với mẫu lõi (nhưng bản thân chúng không phải là mẫu lõi). Có hai tham số cho thuật toán, >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...413 và >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414, xác định chính thức ý nghĩa của chúng tôi khi chúng tôi nói dày đặc. >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...413 cao hơn hoặc thấp hơn >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 cho thấy mật độ cao hơn cần thiết để tạo thành một cụm Chính thức hơn, chúng tôi xác định mẫu lõi là một mẫu trong tập dữ liệu sao cho tồn tại >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...413 mẫu khác trong khoảng cách >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414, được định nghĩa là hàng xóm của mẫu lõi. Điều này cho chúng ta biết rằng mẫu lõi nằm trong vùng dày đặc của không gian vectơ. Một cụm là một tập hợp các mẫu lõi có thể được xây dựng bằng cách lấy đệ quy một mẫu lõi, tìm tất cả các mẫu lân cận của nó là các mẫu lõi, tìm tất cả các mẫu lân cận của chúng là các mẫu lõi, v.v. Một cụm cũng có một tập hợp các mẫu không phải lõi, là các mẫu là hàng xóm của một mẫu lõi trong cụm nhưng bản thân chúng không phải là mẫu lõi. Theo trực giác, những mẫu này nằm ở rìa của một cụm Theo định nghĩa, bất kỳ mẫu lõi nào cũng là một phần của cụm. Bất kỳ mẫu nào không phải là mẫu lõi và cách bất kỳ mẫu lõi nào ít nhất là >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414, đều được coi là ngoại lệ theo thuật toán Mặc dù tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...413 chủ yếu kiểm soát mức độ chịu đựng của thuật toán đối với nhiễu (đối với tập dữ liệu lớn và nhiễu, có thể nên tăng tham số này), tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 rất quan trọng để chọn phù hợp cho tập dữ liệu và chức năng khoảng cách và thường không thể bỏ qua . Nó kiểm soát vùng lân cận địa phương của các điểm. Khi được chọn quá nhỏ, hầu hết dữ liệu sẽ không được nhóm lại (và được gắn nhãn là >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...422 cho “tiếng ồn”). Khi được chọn quá lớn, nó sẽ khiến các cụm gần được hợp nhất thành một cụm và cuối cùng toàn bộ tập dữ liệu được trả về dưới dạng một cụm duy nhất. Một số kinh nghiệm để chọn tham số này đã được thảo luận trong tài liệu, ví dụ dựa trên đầu gối trong biểu đồ khoảng cách lân cận gần nhất (như được thảo luận trong tài liệu tham khảo bên dưới) Trong hình bên dưới, màu biểu thị tư cách thành viên cụm, với các vòng tròn lớn biểu thị các mẫu lõi được thuật toán tìm thấy. Các vòng tròn nhỏ hơn là các mẫu không phải lõi vẫn là một phần của cụm. Hơn nữa, các ngoại lệ được biểu thị bằng các điểm đen bên dưới ví dụ
Thực hiện Thuật toán DBSCAN mang tính xác định, luôn tạo ra các cụm giống nhau khi được cung cấp cùng một dữ liệu theo cùng một thứ tự. Tuy nhiên, kết quả có thể khác khi dữ liệu được cung cấp theo thứ tự khác. Đầu tiên, mặc dù các mẫu lõi sẽ luôn được gán cho cùng một cụm, nhãn của các cụm đó sẽ phụ thuộc vào thứ tự mà các mẫu đó gặp phải trong dữ liệu. Thứ hai và quan trọng hơn, các cụm mà các mẫu không phải lõi được chỉ định có thể khác nhau tùy thuộc vào thứ tự dữ liệu. Điều này sẽ xảy ra khi một mẫu không phải lõi có khoảng cách thấp hơn >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 đến hai mẫu lõi ở các cụm khác nhau. Theo bất đẳng thức tam giác, hai mẫu lõi đó phải cách xa nhau hơn >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 hoặc chúng sẽ ở trong cùng một cụm. Mẫu không phải lõi được chỉ định cho bất kỳ cụm nào được tạo trước khi truyền dữ liệu và do đó, kết quả sẽ phụ thuộc vào thứ tự dữ liệu Việc triển khai hiện tại sử dụng cây bóng và cây kd để xác định vùng lân cận của các điểm, giúp tránh tính toán ma trận khoảng cách đầy đủ (như đã được thực hiện trong các phiên bản scikit-learning trước 0. 14). Khả năng sử dụng số liệu tùy chỉnh được giữ lại; Tiêu thụ bộ nhớ cho kích thước mẫu lớn Việc triển khai này theo mặc định không hiệu quả về bộ nhớ vì nó xây dựng một ma trận tương tự theo cặp đầy đủ trong trường hợp không thể sử dụng cây kd hoặc cây bóng (e. g. , với ma trận thưa thớt). Ma trận này sẽ sử dụng \(n^2\) float. Một vài cơ chế để giải quyết vấn đề này là.
Người giới thiệu
2. 3. 8. QUANG HỌC¶Thuật toán >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...430 có nhiều điểm tương đồng với thuật toán >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...4 và có thể được coi là sự tổng quát hóa của DBSCAN giúp nới lỏng yêu cầu >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 từ một giá trị thành một phạm vi giá trị. Sự khác biệt chính giữa DBSCAN và OPTICS là thuật toán OPTICS xây dựng một biểu đồ khả năng tiếp cận, chỉ định cho mỗi mẫu cả khoảng cách >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...433 và một vị trí trong thuộc tính cụm >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...434; . Nếu OPTICS được chạy với giá trị mặc định của inf được đặt cho >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...435, thì việc trích xuất cụm kiểu DBSCAN có thể được thực hiện lặp lại trong thời gian tuyến tính cho bất kỳ giá trị >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 đã cho nào bằng phương pháp >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...437. Đặt >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...435 thành giá trị thấp hơn sẽ dẫn đến thời gian chạy ngắn hơn và có thể được coi là bán kính lân cận tối đa từ mỗi điểm để tìm các điểm có thể tiếp cận tiềm năng khác Khoảng cách khả năng tiếp cận do OPTICS tạo ra cho phép trích xuất mật độ thay đổi của các cụm trong một tập dữ liệu. Như được hiển thị trong biểu đồ trên, việc kết hợp khoảng cách có thể tiếp cận và tập dữ liệu >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...434 tạo ra một biểu đồ về khả năng tiếp cận, trong đó mật độ điểm được biểu thị trên trục Y và các điểm được sắp xếp theo thứ tự sao cho các điểm lân cận liền kề nhau. 'Cắt' biểu đồ khả năng tiếp cận ở một giá trị duy nhất tạo ra kết quả giống như DBSCAN; . Trích xuất cụm mặc định với OPTICS xem xét độ dốc lớn trong biểu đồ để tìm cụm và người dùng có thể xác định độ dốc lớn bằng cách sử dụng tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...440. Ngoài ra còn có các khả năng khác để phân tích trên chính biểu đồ, chẳng hạn như tạo các biểu diễn dữ liệu theo thứ bậc thông qua các biểu đồ dendrogram khả năng tiếp cận và hệ thống phân cấp của các cụm được phát hiện bởi thuật toán có thể được truy cập thông qua tham số >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...441. Biểu đồ trên đã được mã hóa màu sao cho các màu của cụm trong không gian phẳng khớp với các cụm phân đoạn tuyến tính của biểu đồ khả năng tiếp cận. Lưu ý rằng các cụm màu xanh lam và đỏ nằm liền kề trong biểu đồ khả năng tiếp cận và có thể được biểu thị theo thứ bậc dưới dạng con của cụm mẹ lớn hơn ví dụ
So sánh với DBSCAN Các kết quả từ phương pháp OPTICS >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...437 và DBSCAN rất giống nhau, nhưng không phải lúc nào cũng giống nhau; . Điều này một phần là do các mẫu đầu tiên của từng khu vực dày đặc được OPTICS xử lý có giá trị khả năng tiếp cận lớn trong khi ở gần các điểm khác trong khu vực của chúng và do đó đôi khi sẽ được đánh dấu là nhiễu thay vì ngoại vi. Điều này ảnh hưởng đến các điểm liền kề khi chúng được coi là ứng cử viên để được đánh dấu là ngoại vi hoặc nhiễu Lưu ý rằng đối với bất kỳ giá trị duy nhất nào của >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414, DBSCAN sẽ có xu hướng có thời gian chạy ngắn hơn so với OPTICS; . Cũng cần lưu ý rằng đầu ra của OPTICS chỉ gần với DBSCAN nếu >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...414 và >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...435 gần nhau Độ phức tạp tính toán Cây chỉ mục không gian được sử dụng để tránh tính toán ma trận khoảng cách đầy đủ và cho phép sử dụng bộ nhớ hiệu quả trên các tập hợp mẫu lớn. Các số liệu khoảng cách khác nhau có thể được cung cấp thông qua từ khóa >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...447 Đối với các bộ dữ liệu lớn, có thể thu được kết quả tương tự (nhưng không giống hệt nhau) qua HDBSCAN. Việc triển khai HDBSCAN là đa luồng và có độ phức tạp thời gian chạy thuật toán tốt hơn so với OPTICS, với chi phí mở rộng bộ nhớ kém hơn. Đối với các tập dữ liệu cực lớn làm cạn kiệt bộ nhớ hệ thống khi sử dụng HDBSCAN, OPTICS sẽ duy trì \(n\) (trái ngược với . ) memory scaling; however, tuning of the >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...435 parameter will likely need to be used to give a solution in a reasonable amount of wall time. Người giới thiệu
2. 3. 9. BIRCH¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...449 xây dựng một cây có tên là Cây tính năng phân cụm (CFT) cho dữ liệu đã cho. Dữ liệu về cơ bản được nén không mất dữ liệu thành một tập hợp các nút Tính năng phân cụm (Nút CF). Các Nút CF có một số cụm con được gọi là Cụm con Tính năng Phân cụm (CF Subcluster) và các Cụm con CF này nằm trong Nút CF không đầu cuối có thể có Nút CF là con Các cụm con CF giữ thông tin cần thiết để phân cụm, điều này ngăn cản nhu cầu giữ toàn bộ dữ liệu đầu vào trong bộ nhớ. Thông tin này bao gồm
Thuật toán BIRCH có hai tham số là ngưỡng và hệ số phân nhánh. Hệ số phân nhánh giới hạn số lượng cụm con trong một nút và ngưỡng giới hạn khoảng cách giữa mẫu đang vào và các cụm con hiện có Thuật toán này có thể được xem như một thể hiện hoặc phương pháp giảm dữ liệu, vì nó giảm dữ liệu đầu vào thành một tập hợp các cụm con được lấy trực tiếp từ các lá của CFT. Dữ liệu giảm này có thể được xử lý thêm bằng cách đưa nó vào một cụm toàn cầu. Bộ phân cụm toàn cầu này có thể được đặt bởi >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8. Nếu >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 được đặt thành Không, thì các cụm con từ các lá sẽ được đọc trực tiếp, nếu không, bước phân cụm toàn cầu sẽ gắn nhãn các cụm con này thành các cụm (nhãn) toàn cầu và các mẫu được ánh xạ tới nhãn toàn cầu của cụm con gần nhất Mô tả thuật toán
BIRCH hay MiniBatchKMeans?
Làm cách nào để sử dụng một phần_fit? Để tránh tính toán phân cụm toàn cầu, đối với mọi cuộc gọi của >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...453, người dùng nên
Người giới thiệu
2. 3. 10. Đánh giá hiệu suất phân cụm¶Đánh giá hiệu suất của thuật toán phân cụm không đơn giản như đếm số lỗi hoặc độ chính xác và thu hồi của thuật toán phân loại được giám sát. Cụ thể, bất kỳ số liệu đánh giá nào cũng không nên tính đến các giá trị tuyệt đối của nhãn cụm mà thay vào đó, nếu việc phân cụm này xác định các phân tách dữ liệu tương tự như một số tập hợp sự thật cơ bản của các lớp hoặc đáp ứng một số giả định sao cho các thành viên thuộc cùng một lớp giống nhau hơn 2. 3. 10. 1. Chỉ số Rand¶Dựa trên kiến thức về các phép gán của lớp sự thật cơ bản >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...459 và các phép gán thuật toán phân cụm của chúng tôi cho cùng một mẫu >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...460, chỉ số Rand (đã điều chỉnh hoặc chưa điều chỉnh) là một hàm đo lường mức độ giống nhau của hai phép gán, bỏ qua các hoán vị >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...25 Chỉ số Rand không đảm bảo đạt giá trị gần bằng 0. 0 cho một nhãn ngẫu nhiên. Chỉ số Rand được điều chỉnh sửa chữa theo cơ hội và sẽ đưa ra đường cơ sở như vậy >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24... Như với tất cả các số liệu phân cụm, người ta có thể hoán vị 0 và 1 trong các nhãn được dự đoán, đổi tên 2 thành 3 và nhận được cùng một số điểm >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24... Hơn nữa, cả hai >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...461 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...462 đều đối xứng. hoán đổi đối số không thay đổi điểm số. Do đó, chúng có thể được sử dụng như các biện pháp đồng thuận >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...30 Dán nhãn hoàn hảo được chấm điểm 1. 0 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...6 Nhãn đồng ý kém (e. g. independent labelings) have lower scores, and for the adjusted Rand index the score will be negative or close to zero. Tuy nhiên, đối với chỉ số Rand chưa được điều chỉnh, điểm số, trong khi thấp hơn, sẽ không nhất thiết phải gần bằng không >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...2 2. 3. 10. 1. 1. Advantages¶
2. 3. 10. 1. 2. Drawbacks¶
ví dụ
2. 3. 10. 1. 3. Mathematical formulation¶If C is a ground truth class assignment and K the clustering, let us define \(a\) and \(b\) as.
The unadjusted Rand index is then given by \[\text{RI} = \frac{a + b}{C_2^{n_{samples}}}\] where \(C_2^{n_{samples}}\) is the total number of possible pairs in the dataset. It does not matter if the calculation is performed on ordered pairs or unordered pairs as long as the calculation is performed consistently. However, the Rand index does not guarantee that random label assignments will get a value close to zero (esp. if the number of clusters is in the same order of magnitude as the number of samples) Để chống lại hiệu ứng này, chúng ta có thể chiết khấu RI dự kiến \(E[\text{RI}]\) của các nhãn ngẫu nhiên bằng cách xác định . \[\text{ARI} = \frac{\text{RI} - E[\text{RI}]}{\max(\text{RI}) - E[\text{RI}]}\] References
2. 3. 10. 2. Mutual Information based scores¶Given the knowledge of the ground truth class assignments >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...459 and our clustering algorithm assignments of the same samples >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...460, the Mutual Information is a function that measures the agreement of the two assignments, ignoring permutations. Two different normalized versions of this measure are available, Normalized Mutual Information (NMI) and Adjusted Mutual Information (AMI). NMI is often used in the literature, while AMI was proposed more recently and is normalized against chance >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...4 One can permute 0 and 1 in the predicted labels, rename 2 to 3 and get the same score >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...3 All, >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...470, >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...471 and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...472 are symmetric. swapping the argument does not change the score. Thus they can be used as a consensus measure >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...40 Dán nhãn hoàn hảo được chấm điểm 1. 0 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...41 This is not true for >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...470, which is therefore harder to judge >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...42 Bad (e. g. independent labelings) have non-positive scores >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...43 2. 3. 10. 2. 1. Advantages¶
2. 3. 10. 2. 2. Drawbacks¶
ví dụ
2. 3. 10. 2. 3. Mathematical formulation¶Assume two label assignments (of the same N objects), \(U\) and \(V\) . Their entropy is the amount of uncertainty for a partition set, defined by. \[H(U) = - \sum_{i=1}^{. U. }P(i)\log(P(i))\] ở đâu \(P(i) =. U_i. / N\) là xác suất để một đối tượng được chọn ngẫu nhiên từ \(U\) rơi vào lớp < . Tương tự như vậy cho \(U_i\). Likewise for \(V\) . \[H(V) = - \sum_{j=1}^{. V. }P'(j)\log(P'(j))\] With \(P'(j) = . V_j. / N\) . The mutual information (MI) between \(U\) and \(V\) is calculated by. \[\text{MI}(U, V) = \sum_{i=1}^{. U. }\sum_{j=1}^{. V. }P(i, j)\log\left(\frac{P(i,j)}{P(i)P'(j)}\right)\] where \(P(i, j) = . U_i \cap V_j. / N\) is the probability that an object picked at random falls into both classes \(U_i\) and \(V_j\) . It also can be expressed in set cardinality formulation \[\text{MI}(U, V) = \sum_{i=1}^{. U. } \sum_{j=1}^{. V. } \frac{. U_i \cap V_j. }{N}\log\left(\frac{N. U_i \cap V_j. }{. U_i. V_j. }\right)\] The normalized mutual information is defined as \[\text{NMI}(U, V) = \frac{\text{MI}(U, V)}{\text{mean}(H(U), H(V))}\] This value of the mutual information and also the normalized variant is not adjusted for chance and will tend to increase as the number of different labels (clusters) increases, regardless of the actual amount of “mutual information” between the label assignments The expected value for the mutual information can be calculated using the following equation [VEB2009] . In this equation, \(a_i = . U_i. \) (the number of elements in \(U_i\) ) and \(b_j = . V_j. \) (the number of elements in \(V_j\) ). \[E[\text{MI}(U,V)]=\sum_{i=1}^{. U. } \sum_{j=1}^{. V. } \sum_{n_{ij}=(a_i+b_j-N)^+ }^{\min(a_i, b_j)} \frac{n_{ij}}{N}\log \left( \frac{ N. n_{ij}}{a_i b_j}\right) \frac{a_i. b_j. (N-a_i). (N-b_j). }{N. n_{ij}. (a_i-n_{ij}). (b_j-n_{ij}). (N-a_i-b_j+n_{ij}). }\] Using the expected value, the adjusted mutual information can then be calculated using a similar form to that of the adjusted Rand index \[\text{AMI} = \frac{\text{MI} - E[\text{MI}]}{\text{mean}(H(U), H(V)) - E[\text{MI}]}\] For normalized mutual information and adjusted mutual information, the normalizing value is typically some generalized mean of the entropies of each clustering. Có nhiều phương tiện tổng quát khác nhau và không có quy tắc vững chắc nào tồn tại để ưu tiên cái này hơn cái kia. The decision is largely a field-by-field basis; for instance, in community detection, the arithmetic mean is most common. Each normalizing method provides “qualitatively similar behaviours” [YAT2016] . In our implementation, this is controlled by the >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...476 parameter. Vinh et al. (2010) named variants of NMI and AMI by their averaging method [VEB2010] . Their ‘sqrt’ and ‘sum’ averages are the geometric and arithmetic means; we use these more broadly common names. References
[ VEB2009 ] Vinh, Epps, and Bailey, (2009). “Information theoretic measures for clusterings comparison”. Proceedings of the 26th Annual International Conference on Machine Learning - ICML ‘09. doi. 10. 1145/1553374. 1553511. ISBN 9781605585161 [ VEB2010 ] Vinh, Epps, and Bailey, (2010). “Information Theoretic Measures for Clusterings Comparison: Variants, Properties, Normalization and Correction for Chance”. JMLR [ YAT2016 ] Yang, Algesheimer, and Tessone, (2016). “A comparative analysis of community detection algorithms on artificial networks”. Scientific Reports 6. 30750. doi. 10. 1038/srep30750 2. 3. 10. 3. Tính đồng nhất, đầy đủ và thước đo chữ V¶Với kiến thức về các bài tập lớp sự thật cơ bản của các mẫu, có thể xác định một số số liệu trực quan bằng cách sử dụng phân tích entropy có điều kiện In particular Rosenberg and Hirschberg (2007) define the following two desirable objectives for any cluster assignment
We can turn those concept as scores >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...477 and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...478. Both are bounded below by 0. 0 and above by 1. 0 (higher is better) >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...44 Giá trị trung bình điều hòa của chúng được gọi là thước đo V được tính bằng >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...479 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...45 This function’s formula is as follows \[v = \frac{(1 + \beta) \times \text{homogeneity} \times \text{completeness}}{(\beta \times \text{homogeneity} + \text{completeness})}\] >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...480 defaults to a value of 1. 0, but for using a value less than 1 for beta >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...46 more weight will be attributed to homogeneity, and using a value greater than 1 >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...47 more weight will be attributed to completeness The V-measure is actually equivalent to the mutual information (NMI) discussed above, with the aggregation function being the arithmetic mean [B2011] . Homogeneity, completeness and V-measure can be computed at once using >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...481 as follows >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...48 The following clustering assignment is slightly better, since it is homogeneous but not complete >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...49 Note >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...479 is symmetric. it can be used to evaluate the agreement of two independent assignments on the same dataset This is not the case for >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...478 and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...477. both are bound by the relationship >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...250 2. 3. 10. 3. 1. Advantages¶
2. 3. 10. 3. 2. Drawbacks¶
ví dụ
2. 3. 10. 3. 3. Mathematical formulation¶Homogeneity and completeness scores are formally given by \[h = 1 - \frac{H(C. K)}{H(C)}\] \[c = 1 - \frac{H(K. C)}{H(K)}\] where \(H(C. K)\) is the conditional entropy of the classes given the cluster assignments and is given by. \[H(C. K) = - \sum_{c=1}^{. C. } \sum_{k=1}^{. K. } \frac{n_{c,k}}{n} \cdot \log\left(\frac{n_{c,k}}{n_k}\right)\] and \(H(C)\) is the entropy of the classes and is given by. \[H(C) = - \sum_{c=1}^{. C. } \frac{n_c}{n} \cdot \log\left(\frac{n_c}{n}\right)\] with \(n\) the total number of samples, \(n_c\) and \(n_k\) the number of samples respectively belonging to class \(c\) and cluster \(k\) , and finally \(n_{c,k}\) the number of samples from class \(c\) assigned to cluster \(k\) . The conditional entropy of clusters given class \(H(K. C)\) and the entropy of clusters \(H(K)\) are defined in a symmetric manner. Rosenberg and Hirschberg further define V-measure as the harmonic mean of homogeneity and completeness \[v = 2 \cdot \frac{h \cdot c}{h + c}\] References
[ B2011 ] Identication and Characterization of Events in Social Media, Hila Becker, PhD Thesis 2. 3. 10. 4. Fowlkes-Mallows scores¶The Fowlkes-Mallows index ( >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...485) can be used when the ground truth class assignments of the samples is known. The Fowlkes-Mallows score FMI is defined as the geometric mean of the pairwise precision and recall \[\text{FMI} = \frac{\text{TP}}{\sqrt{(\text{TP} + \text{FP}) (\text{TP} + \text{FN})}}\] Where >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...486 is the number of True Positive (i. e. the number of pair of points that belong to the same clusters in both the true labels and the predicted labels), >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...487 is the number of False Positive (i. e. the number of pair of points that belong to the same clusters in the true labels and not in the predicted labels) and >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...488 is the number of False Negative (i. e the number of pair of points that belongs in the same clusters in the predicted labels and not in the true labels) The score ranges from 0 to 1. A high value indicates a good similarity between two clusters >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...251 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...252 One can permute 0 and 1 in the predicted labels, rename 2 to 3 and get the same score >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...253 Dán nhãn hoàn hảo được chấm điểm 1. 0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...254 Bad (e. g. ghi nhãn độc lập) không có điểm >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...255 2. 3. 10. 4. 1. Advantages¶
2. 3. 10. 4. 2. Hạn chế¶
References
2. 3. 10. 5. Hệ số bóng¶Nếu không biết nhãn sự thật cơ bản, việc đánh giá phải được thực hiện bằng chính mô hình. Hệ số Hình bóng (_______5491) là một ví dụ về đánh giá như vậy, trong đó điểm Hệ số Hình bóng cao hơn liên quan đến một mô hình có các cụm được xác định rõ hơn. Hệ số Silhouette được xác định cho từng mẫu và bao gồm hai điểm
Hệ số Silhouette s cho một mẫu đơn sau đó được đưa ra là \[s = \frac{b - a}{max(a, b)}\] Hệ số Hình bóng cho một tập hợp các mẫu được coi là giá trị trung bình của Hệ số Hình bóng cho mỗi mẫu >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...256 Trong cách sử dụng bình thường, Hệ số Silhouette được áp dụng cho kết quả phân tích cụm >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...257 References
2. 3. 10. 5. 1. Ưu điểm¶
2. 3. 10. 5. 2. Hạn chế¶
ví dụ
2. 3. 10. 6. Chỉ số Calinski-Harabasz¶Nếu không biết nhãn sự thật cơ bản, thì chỉ số Calinski-Harabasz ( >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...492) - còn được gọi là Tiêu chí tỷ lệ phương sai - có thể được sử dụng để đánh giá mô hình, trong đó điểm Calinski-Harabasz cao hơn liên quan đến mô hình có các cụm được xác định rõ hơn Chỉ số là tỷ lệ của tổng độ phân tán giữa các cụm và độ phân tán bên trong cụm cho tất cả các cụm (trong đó độ phân tán được định nghĩa là tổng bình phương khoảng cách) >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...256 Trong cách sử dụng bình thường, chỉ số Calinski-Harabasz được áp dụng cho kết quả phân tích cụm >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...259 2. 3. 10. 6. 1. Ưu điểm¶
2. 3. 10. 6. 2. Hạn chế¶
2. 3. 10. 6. 3. Công thức toán học¶For a set of data \(E\) of size \(n_E\) which has been clustered into \(k\) clusters, the Calinski-Harabasz score \(s\) is defined as the ratio of the between-clusters dispersion mean and the within-cluster dispersion. \[s = \frac{\mathrm{tr}(B_k)}{\mathrm{tr}(W_k)} \times \frac{n_E - k}{k - 1}\] where \(\mathrm{tr}(B_k)\) is trace of the between group dispersion matrix and \(\mathrm{tr}(W_k)\) is the trace of the within-cluster dispersion matrix defined by. \[W_k = \sum_{q=1}^k \sum_{x \in C_q} (x - c_q) (x - c_q)^T\] \[B_k = \sum_{q=1}^k n_q (c_q - c_E) (c_q - c_E)^T\] with \(C_q\) the set of points in cluster \(q\) , \(c_q\) the center of cluster \(q\) , \(c_E\) the center of \(E\) , and \(n_q\) the number of points in cluster \(q\) . References
2. 3. 10. 7. Davies-Bouldin Index¶If the ground truth labels are not known, the Davies-Bouldin index ( >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...493) can be used to evaluate the model, where a lower Davies-Bouldin index relates to a model with better separation between the clusters This index signifies the average ‘similarity’ between clusters, where the similarity is a measure that compares the distance between clusters with the size of the clusters themselves Zero is the lowest possible score. Values closer to zero indicate a better partition In normal usage, the Davies-Bouldin index is applied to the results of a cluster analysis as follows >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...0 2. 3. 10. 7. 1. Ưu điểm¶
2. 3. 10. 7. 2. Hạn chế¶
2. 3. 10. 7. 3. Công thức toán học¶Chỉ số được định nghĩa là mức độ tương đồng trung bình giữa mỗi cụm \(C_i\) cho \ . , k\) và cái tương tự nhất của nó \(C_j\) . Trong ngữ cảnh của chỉ số này, sự tương đồng được định nghĩa là thước đo \(R_{ij}\) đánh đổi.
Một lựa chọn đơn giản để xây dựng \(R_{in}\) so that it is nonnegative and symmetric is: \[R_{ij} = \frac{s_i + s_j}{d_{ij}}\] Sau đó, chỉ số Davies-Bouldin được định nghĩa là \[DB = \frac{1}{k} \sum_{i=1}^k \max_{i \neq j} R_{ij}\] References
2. 3. 10. 8. Ma trận dự phòng¶Ma trận dự phòng ( >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...494) báo cáo lực lượng giao nhau cho mỗi cặp cụm đúng/dự đoán. Ma trận dự phòng cung cấp số liệu thống kê đầy đủ cho tất cả các số liệu phân cụm trong đó các mẫu độc lập và được phân phối giống hệt nhau và không cần tính đến một số trường hợp không được phân cụm Đây là một ví dụ >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...1 Hàng đầu tiên của mảng đầu ra chỉ ra rằng có ba mẫu có cụm thực sự là “a”. Trong số đó, 2 người thuộc cụm 0 được dự đoán, một người thuộc nhóm 1 và không có người nào thuộc nhóm 2. Và hàng thứ hai chỉ ra rằng có ba mẫu có cụm thực sự là “b”. Trong số đó, không có cái nào ở cụm dự đoán 0, một cái ở cụm 1 và hai cái ở cụm 2 A ma trận nhầm lẫn để phân loại là một ma trận ngẫu nhiên vuông trong đó thứ tự của các hàng và cột tương ứng với một danh sách các lớp. 2. 3. 10. 8. 1. Ưu điểm¶
2. 3. 10. 8. 2. Hạn chế¶
References
2. 3. 10. 9. Ma trận nhầm lẫn ghép nối¶Ma trận nhầm lẫn cặp ( >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.rand_score(labels_true, labels_pred) 0.66... >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...495) là ma trận tương tự 2x2 \[\begin{split}C = \left[\begin{matrix} C_{00} & C_{01} \\ C_{10} & C_{11} \end{matrix}\right]\end{split} giữa hai cụm được tính toán bằng cách xem xét tất cả các cặp mẫu và đếm các cặp được chỉ định vào cùng một cụm hoặc vào các cụm khác nhau theo cụm đúng và dự đoán Nó có các mục sau
Xét một cặp mẫu được nhóm lại với nhau thành một cặp dương tính, thì giống như trong phân loại nhị phân, số lượng âm tính thực sự là \(C_{00}\), false negatives is \(C_{10}\), true positives is \(C_{11}\) and false positives is \(C_{01}\). Nhãn phù hợp hoàn hảo có tất cả các mục khác không trên đường chéo bất kể giá trị nhãn thực tế >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...2 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...3 Các nhãn gán tất cả các thành viên của lớp cho cùng một cụm đã hoàn thành nhưng có thể không phải lúc nào cũng thuần túy, do đó bị phạt và có một số mục nhập khác không theo đường chéo >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...4 Ma trận không đối xứng >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...5 Nếu các thành viên của lớp được phân chia hoàn toàn trên các cụm khác nhau, thì phép gán hoàn toàn không đầy đủ, do đó ma trận có tất cả các mục có đường chéo bằng 0 |