Việc phân cụm dữ liệu không nhãn có thể được thực hiện với mô -đun >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...7. Show
Mỗi thuật toán phân cụm có hai biến thể: một lớp, thực hiện phương pháp >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...8 để tìm hiểu các cụm trên dữ liệu tàu và một hàm, được đưa ra dữ liệu tàu, trả về một mảng 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 qua dữ liệu đào tạo có thể được tìm thấy trong thuộc tính >>> metrics.adjusted_rand_score(labels_true, labels_pred) 0.24...9. 2.3.1. Tổng quan về các phương thức phân cụmOverview of clustering methods¶So sánh các thuật toán phân cụm trong Scikit-Learn¶¶
Tuyên truyền ái lực giảm xóc, ưu tiên mẫuanother 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. Không thể mở rộng với n_samples clustering methods (in contrast to inductive clustering methods) are not designed to be applied to new, unseen data. Nhiều cụm, kích thước cụm không đều nhau, hình học không phẳng, quy nạpK-means¶Khoảng cách đồ thị (ví dụ: biểu đồ lân cận gần nhất) băng thông\(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. Không thể mở rộ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...0inertia, or within-cluster sum-of-squares criterion: Phân cụm quang phổ Trung bì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...0, 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...1
K-Means thường được gọi là Thuật toán Lloyd. Về cơ bản, thuật toán có ba bước. Bước đầu tiên chọn các trọng tâm ban đầu, với phương pháp cơ bản nhất là chọn các mẫu \ (k \) từ bộ dữ liệu \ (x \). Sau khi khởi tạo, K-MEAN bao gồm lặp giữa hai bước khác. Bước đầu tiên gán từng mẫu cho Centroid gần nhất. Bước thứ hai tạo ra các trung tâm mới bằng cách lấy giá trị trung bình của tất cả các mẫu được gán cho mỗi centroid trước đó. Sự khác biệt giữa các trung tâm cũ và mới được tính toán và thuật toán lặp lại hai bước cuối cùng cho đến khi giá trị này nhỏ hơn ngưỡng. Nói cách khác, nó lặp lại cho đến khi các trung tâm không di chuyển đáng kể.\(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 một ma trận hiệp phương sai đường chéo nhỏ, 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 toán bằng cách sử dụng các trung 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 centroid được cập nhật theo giá trị trung bình của từng phân đoạn. Thuật toán sau đó lặp lại điều này cho đến khi một tiêu chí dừng được thực hiện. Thông thường, thuật toán dừng khi tương đối giảm hàm mục tiêu giữa các lần lặp ít 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 khi Centroid di chuyển ít hơn dung sai. Có đủ thời gian, K-MEAN sẽ luôn hội tụ, tuy nhiên điều này có thể ở mức tối thiểu địa phương. Điều này phụ thuộc rất nhiều vào việc khởi tạo các trung tâm. Kết quả là, 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 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 thực hiện trong scikit-learn (sử dụng tham số >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...8). Điều này khởi tạo các centroid là (nói chung) cách xa nhau, dẫn đến kết quả có lẽ 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-Means ++ 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 >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...9 để biết chi tiết và sử dụng ví dụ. Thuật toán hỗ trợ các trọng số mẫu, có thể được đưa ra bởi một tham số >>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.00. Điều này cho phép gán nhiều trọng lượng hơn cho một số mẫu khi tính toán các trung tâm cụm và giá trị quán tính. Ví dụ, việc gán trọng số 2 cho 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 \).\(X\). K-MEAN có thể được sử dụng để định lượng vector. Điều này đạt được bằng phương pháp biến đổi của mô hình được đào tạo là >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7. 2.3.2.1. Song song cấp thấpLow-level parallelism¶>>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7 Lợi ích từ sự 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 dấu chân bộ nhớ thấp. Để biết thêm chi tiết về cách kiểm soát số lượng chủ đề, vui lòng tham khảo ghi chú song song của chúng tôi.Parallelism notes. 2.3.2.2. Mini Batch K-Means¶Mini Batch K-Means¶>>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.03 là một biến thể của thuật toán >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7 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. Các lô mini 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. Những lô nhỏ này làm 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, M-MEANS Mini Batch 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 đi lặp lại giữa hai bước chính, tương tự như vani K-means. Trong bước đầu tiên, các mẫu \ (b \) được rút ngẫu nhiên từ bộ dữ liệu, để tạo thành một lô nhỏ. Chúng sau đó được gán cho Centroid gần nhất. Trong bước thứ hai, Centroid được cập nhật. Trái ngược với K-MEAN, điều này được thực hiện trên cơ sở mỗi mẫu. Đối với mỗi mẫu trong lô mini, Centroid được chỉ định được cập nhật bằng cách lấy trung bình phát trực tuyến của mẫu và tất cả các mẫu trước đó được gán cho Centroid đó. Điều này có tác dụng giảm tốc độ thay đổi đối với Centroid theo thời gian. Các bước này được thực hiện cho đến khi đạt được sự hội tụ hoặc số lần lặp được xác định trước.\(b\) samples are drawn randomly from the dataset, to form a mini-batch. These are then assigned to the nearest centroid. 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 = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.03 hội tụ nhanh hơn >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7, nhưng chất lượng của kết quả bị giảm. Trong thực tế, sự khác biệt về chất lượng này có thể khá nhỏ, như thể hiện trong ví dụ và tài liệu tham khảo được trích dẫn. 2.3.3. Tuyên truyền ái lựcAffinity Propagation¶>>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.07 tạo ra các cụm bằng cách gửi tin nhắn giữa các cặp mẫu cho đến khi hội tụ. Một bộ dữ liệu sau đó được mô tả bằng cách sử dụng một số lượng nhỏ các mẫu, được xác định là những mẫu đại diện nhất của các mẫu khác. Các tin nhắn được gửi giữa các cặp đại diện cho sự phù hợp cho một mẫu là mẫu của mẫu khác, được cập nhật để đáp ứng với các giá trị từ các cặp khác. Việc cập nhật này xảy ra lặp đi lặp lại cho đến khi hội tụ, tại thời điểm đó, các mẫu cuối cùng được chọn, và do đó phân cụm cuối cùng được đưa ra. Tuyên truyền ái lực có thể thú vị vì nó chọn số lượng cụm dựa trên dữ liệu được cung cấp. Với mục đích này, hai tham số quan trọng là sở thích, kiểm soát có bao nhiêu mẫu được sử dụng và hệ số giảm xóc làm giảm trách nhiệm và thông điệp sẵn có để tránh dao động số khi cập nhật các tin nhắn này. Hạn chế chính của sự lan truyền ái lực là sự phức tạp của nó. Thuật toán có độ phức tạp về thời gian của thứ tự \ (o (n^2 t) \), trong đó \ (n \) là số lượng mẫu và \ (t \) là số lần lặp cho đến khi hội tụ. Hơn nữa, độ phức tạp của bộ nhớ là thứ tự \ (o (n^2) \) nếu sử dụng ma trận tương tự dày đặc, nhưng có thể giảm nếu sử dụng ma trận tương tự thưa thớt. Điều này làm cho sự truyền bá mối quan hệ thích hợp nhất cho các bộ dữ liệu nhỏ đến trung bình.\(O(N^2 T)\), where \(N\) is the number of samples and \(T\) is the number of iterations until convergence. Further, the memory complexity is of the order \(O(N^2)\) if a dense similarity matrix is used, but reducible if a sparse similarity matrix is used. This makes Affinity Propagation most appropriate for small to medium sized datasets. Thuật toán Mô tả: Các tin nhắn được gửi giữa các điểm thuộc về 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 cho thấy mẫu \ (k \) nên là mẫu cho mẫu \ (i \). Thứ hai là tính khả dụng \ (a (i, k) \) là bằng chứng tích lũy cho thấy mẫu \ (i \) nên chọn mẫu \ (k \) là mẫu mực của nó và coi các giá trị cho tất cả các mẫu khác \ (k \) nên là một mẫu mực. Theo cách này, các mẫu được chọn bởi các mẫu nếu chúng (1) đủ tương tự với nhiều mẫu và (2) được chọn bởi nhiều mẫu để đại diện cho chính chúng. The messages sent between points belong to one of two categories. The first is the responsibility \(r(i, k)\), which is the accumulated evidence that sample \(k\) should be the exemplar for sample \(i\). The second is the availability \(a(i, k)\) which is the accumulated evidence that sample \(i\) 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ột mẫu \ (k \) là mẫu mực của mẫu \ (i \) được đưa ra bởi:\(k\) to be the exemplar of sample \(i\) is given by: \ [r (i, k) \ leftarrow s (i, k) - max [a (i, k ') + s (i, k') \ forall k '\ neq k] \] Trong đó \ (s (i, k) \) là sự tương đồng giữa các mẫu \ (i \) và \ (k \). Tính khả dụng của mẫu \ (k \) là mẫu mực của mẫu \ (i \) được đưa ra bởi:\(s(i, k)\) is the similarity between samples \(i\) and \(k\). The availability of sample \(k\) to be the exemplar of sample \(i\) is given by: \ [a (i, k) \ leftarrow min [0, r (k, k) + \ sum_ {i '~ s.t. ] \] Để bắt đầu, tất cả các giá trị cho \ (r \) và \ (a \) được đặt thành 0 và tính toán của mỗi lần lặp lại cho đến khi hội tụ. Như đã thảo luận ở trên, để tránh các dao động số khi cập nhật các tin nhắn, hệ số giảm xóc \ (\ lambda \) được giới thiệu vào quá trình lặp lại:\(r\) and \(a\) 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\) is introduced to iteration process: \ [r_ {t+1} (i, k) = \ lambda \ cdot r_ {t} (i, k)+(1- \ lambda) \ [a_ {t+1} (i, k) = \ lambda \ cdot a_ {t} (i, k)+(1- \ lambda) trong đó \ (t \) chỉ ra thời gian lặp.\(t\) indicates the iteration times. 2.3.4. SHIFT trung bìnhMean Shift¶>>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.08 Phân cụm nhằm mục đích khám phá các đốm màu theo mật độ mịn của các mẫu. Đây là một thuật toán dựa trên Centroid, hoạt động bằng cách cập nhật các ứng cử viên cho Centroid là giá trị trung bình của các điểm trong một khu vực nhất định. Các ứng cử viên này sau đó được lọc trong giai đoạn xử lý sau xử lý để loại bỏ các trùng lặp gần để tạo thành tập trung tâm cuối cùng. Đưa ra một ứng cử viên Centroid \ (x_i \) cho phép lặp \ (t \), ứng viên được cập nhật theo phương trình sau:\(x_i\) for iteration \(t\), the candidate is updated according to the following equation: \ [x_i^{t+1} = m (x_i^t) \] Trong đó \ (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 \) và \ (m \) là vectơ dịch chuyển trung bình được tính toán cho mỗi centroid hướng tới một vùng tăng tối đa trong mật độ của các điểm. Điều này được tính toán bằng cách sử dụng phương trình sau, cập nhật một cách hiệu quả Centroid để trở thành trung bình của các mẫu trong khu phố của nó:\(N(x_i)\) is the neighborhood of samples within a given distance around \(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 Thuật toán tự động đặt số lượng cụm, thay vì dựa vào tham số >>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.09, chỉ ra kích thước của khu vực để 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_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...0 được cung cấp, được gọi là nếu băng thông không được đặt. Thuật toán không thể mở rộng cao, vì nó yêu cầu nhiều 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ẽ ngừng lặp lại khi sự thay đổi của centroid nhỏ. Ghi nhãn Một mẫu mới được thực hiện bằng cách tìm centroid gần nhất cho một mẫu nhất định. 2.3.5. Phân cụm quang phổSpectral clustering¶>>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...1 thực hiện việc nhúng chiều thấp của ma trận ái lực giữa các mẫu, sau đó là phân cụm, ví dụ, bởi KMeans, của các thành phần của các hàm riêng trong không gian chiều thấp. 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_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...2 được sử dụng cho vấn đề eigenvalue (lưu ý, bộ giải ____72 yêu cầu cài đặt mô -đun PyamG được cài đặt.) Phiên bản hiện tại của Spectralclustering đòi hỏi số lượng cụm được chỉ định trước. Nó hoạt động tốt cho một số lượng nhỏ các cụm, nhưng không được thông báo cho nhiều cụm. Đối với hai cụm, quang phổ giải quyết sự thư giãn lồi của vấn đề cắt được chuẩn hóa trên biểu đồ tương tự: cắt biểu đồ thành hai để trọng lượng của các cạnh cắt nhỏ so với trọng lượng 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 đồ thị là pixel và trọng lượng của các cạnh của biểu đồ tương tự được tính toán 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, ví dụ: Với các giá trị âm hoặc với ma trận khoảng cách thay vì sự tương đồng, vấn đề quang phổ sẽ là số ít và vấn đề không thể giải quyết được. Trong trường hợp đó, nó được khuyên nên áp dụng một chuyển đổi cho các mục của ma trận. Ví dụ, trong trường hợp ma trận khoảng cách đã ký, là phổ biến để áp dụng hạt nhân nhiệt: similarity = np.exp(-beta * distance / distance.std()) Xem các ví dụ cho một ứng dụng như vậy. 2.3.5.1. Chiến lược gán nhãn khác nhauDifferent label assignment strategies¶Các chiến lược gán nhãn khác nhau có thể được sử dụng, tương ứng với tham số >>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...4 của >>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...1. Chiến lược >>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...6 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ụ thể, trừ khi bạn kiểm soát >>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...7, nó có thể không thể tái tạo từ chạy đến chạy, vì nó phụ thuộc vào khởi tạo ngẫu nhiên. Chiến lược >>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...8 thay thế có thể tái tạo 100%, nhưng có xu hướng tạo ra các lô có hình dạng khá đồng đều và hình học. Tùy chọn >>> labels_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07...9 được thêm gần đây là một giải pháp thay thế xác định có xu hướng tạo ra phân vùng tốt nhất trực quan trên ứng dụng ví dụ dưới đây.
2.3.5.2. Đồ thị phân cụm quang phổSpectral Clustering Graphs¶Phân cụm quang phổ cũng có thể được sử dụng để phân vùng đồ thị 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 biểu đồ và quang phổ được khởi tạo với >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...3: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix) 2.3.6. Phân cụm phân cấpHierarchical clustering¶Phân cụm phân cấp là một gia đình 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 chia chúng liên tiếp. Hệ thống phân cấp của các cụm này được thể hiện dưới dạng cây (hoặc dendrogram). Rễ của cây là cụm duy nhất thu thậ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 >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...4 thực hiện phân cụm phân cấp bằng cách sử dụng phương pháp 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. Các 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:
>>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...4 cũng có thể mở rộng đến số lượng lớn các mẫu khi được sử dụng cùng với ma trận kết nối, nhưng rất 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 hợp nhất có thể. 2.3.6.1. Loại liên kết khác nhau: Phường, Hoàn thành, Trung bình và Liên kết duy nhấtDifferent linkage type: Ward, complete, average, and single linkage¶>>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...4 hỗ trợ các chiến lược liên kết của Ward, đơn, trung bình và hoàn chỉnh. Cụm kết hợp có một hành vi giàu có của người Viking có được hành vi giàu có hơn dẫn đến kích thước cụm không đồng đều. Về vấn đề này, liên kết duy nhất là chiến lược tồi tệ nhất và Ward đưa ra quy mô thường xuyên nhất. Tuy nhiên, ái lực (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 không Euclide, liên kết trung bình là một sự thay thế tốt. Liên kết đơn, trong khi không mạnh mẽ với dữ liệu ồn ào, 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 phân cấp của các bộ dữ liệu lớn hơn. Liên kết đơn cũng có thể thực hiện tốt trên dữ liệu không toàn cầu. 2.3.6.2. Trực quan hóa phân cấp cụmVisualization of cluster hierarchy¶Nó có thể hình dung cây đại diện cho sự hợp nhất phân cấp của các cụm như 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 trong trường hợp cỡ mẫu nhỏ. 2.3.6.3. Thêm các ràng buộc kết nốiAdding connectivity constraints¶Một khía cạnh thú vị của >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...4 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 một ma trận kết nối xác định cho mỗi mẫu các mẫu lân cận theo cấu trúc nhất định của dữ liệu. Ví dụ, trong ví dụ của Thụy Sĩ dưới đây, 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 Thụy Sĩ, và do đó tránh hình thành các cụm mở rộng trên các nếp gấp chồng chéo của cuộn.
Những 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 là 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 bộ dữ liệu nên được kết nối. Ma trận này có thể được xây dựng từ thông tin A-Priori: ví dụ, bạn có thể muốn phân cụm các trang web bằng cách chỉ hợp nhất các trang có liên kết chỉ từ cái này sang cái khác. Ví dụ, nó cũng có thể học được từ dữ liệu bằng cách sử dụng >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...8 để hạn chế hợp nhất các hàng xóm gần nhất như trong ví dụ này hoặc sử dụng >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...9 để chỉ cho phép hợp nhất các pixel lân cận trên hình ảnh, như trong ví dụ đồng xu.this example, or using >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...9 to enable only merging of neighboring pixels on an image, as in the coin example. Cảnh báo Các ràng buộc kết nối với liên kết đơn, trung bình và hoàn chỉnh Các ràng buộc kết nối và liên kết đơn, hoàn chỉnh hoặc trung bình có thể nâng cao khía cạnh phong phú hơn của phân cụm kết tụ, đặc biệt nếu chúng được xây dựng với >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...8. 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 vài cụm chiếm giữ vĩ mô và các cụm gần như trống rỗng. (Xem các cuộc 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 duy nhất là tùy chọn liên kết giòn nhất liên quan đến vấn đề này.Agglomerative clustering with and without structure). Single linkage is the most brittle linkage option with regard to this issue. 2.3.6.4. Thay đổi số liệuVarying the metric¶Liên kết đơn, trung bình và hoàn chỉnh có thể được sử dụng với nhiều khoảng cách (hoặc mối quan hệ), đặ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 nào được tính toán trước.
Các hướng dẫn để chọn một số liệu là sử dụng một số để 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 điều đó trong mỗi lớp. 2.3.6.5. Chia đôi K-means¶Bisecting K-Means¶>>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...1 là một biến thể lặp của >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7, sử dụng phân cụm phân cấp gây chia rẽ. Thay vì tạo tất cả các centroid cùng một lúc, centroid được chọn dần dần dựa trên một cụm trước đó: một cụm được chia thành hai cụm mới liên tục cho đến khi đạt được số lượng mục đích. >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...1 hiệu quả hơn so với >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7 khi số lượng cụm lớn vì nó chỉ hoạt động trên một tập hợp dữ liệu ở mỗi độ phân chia trong khi >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7 luôn hoạt động trên toàn bộ bộ dữ liệu. Mặc dù >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...1 có thể được hưởng lợi từ những lợi thế của khởi tạo >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...7 theo thiết kế, nhưng nó vẫn sẽ tạo ra kết quả tương đương so với >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504...8 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 >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7 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 để chia:
Việc chọn số lượng 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 quán tính và nhanh hơn (đặc biệt là đối với số lượng dữ liệu lớn hơn, trong đó lỗi tính toán có thể tốn kém). Việc chọn một lượng lớn nhất điểm dữ liệu cũng có thể sẽ tạo ra các cụm có kích thước tương tự trong khi >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24...7 đượ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 các K-means và K thông thường có thể được nhìn thấy trên ví dụ Bisecting K-MEANS và so sánh hiệu suất có nghĩa là K thường xuyên. Trong khi thuật toán có nghĩa K thông thường có xu hướng tạo ra các cụm không liên quan đến nhau, các cụm từ các phương tiện K chia đôi được đặt hàng tốt và tạo ra một hệ thống phân cấp có thể nhìn thấy.Bisecting K-Means and Regular K-Means Performance Comparison. While the regular K-Means algorithm tends to create non-related clusters, clusters from Bisecting K-Means are well ordered and create quite a visible hierarchy. 2.3.7. Dbscan¶DBSCAN¶Thuật toán >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)03 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 quan điểm khá chung chung này, các cụm được tìm thấy bởi DBSCAN có thể là bất kỳ hình dạng nào, trái ngược với K-means 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 các 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ố đo khoảng cách) và một tập hợp các mẫu không cốt lõi gần với mẫu lõi (nhưng không phải là mẫu lõi). Có hai tham số cho thuật toán, >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)04 và >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)05, xác định chính thức những gì chúng ta muốn nói khi chúng ta nói dày đặc. >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)04 hoặc thấp hơn >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)05 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ột mẫu lõi là một mẫu trong bộ dữ liệu sao cho tồn tại ____104 các mẫu khác trong khoảng cách >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)05, đượ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 một khu vực dày đặc của không gian vector. 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 một mẫu lõi, tìm thấy tất cả các hàng xóm của nó là các mẫu lõi, tìm thấy tất cả các hàng xóm của họ là 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 cốt 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 không phải là các mẫu lõi. Theo trực giác, các mẫu này nằm ở rìa của một cụm. Bất kỳ mẫu cốt lõi là một phần của cụm, theo định nghĩa. Bất kỳ mẫu nào không phải là mẫu lõi và ít nhất là >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)05 khoảng cách từ bất kỳ mẫu lõi nào, được coi là một ngoại lệ bởi thuật toán. Mặc dù tham số >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)04 chủ yếu kiểm soát mức độ khoan dung của thuật toán đối với nhiễu (trên các tập dữ liệu ồn ào và lớn, có thể mong muốn tăng tham số này), tham số >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)05 rất quan trọng để chọn một cách thích hợp cho bộ dữ liệu và chức năng khoảng cách và thường không thể để lại tại giá trị mặc định. Nó kiểm soát khu phố đị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 phân cụm (và được dán nhãn là >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)13 cho tiếng ồn của Hồi giáo). Khi được chọn quá lớn, nó làm cho 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ộ dữ liệu được trả về dưới dạng một cụm duy nhất. Một số heuristic để 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 hàng xóm gần nhất (như được thảo luận trong các tài liệu tham khảo dưới đây). Trong hình dưới đây, màu sắc 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 tìm thấy bởi thuật toán. Các vòng tròn nhỏ hơn là các mẫu không cốt 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 dưới đây.
2.3.8. Quang họcOPTICS¶Thuật toán >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)14 chia sẻ nhiều điểm tương đồng với thuật toán ____103 và có thể được coi là một khái quát của DBSCAN giúp thư giãn yêu cầu ____105 từ một giá trị duy nhất đến phạm vi giá trị. Sự khác biệt chính giữa DBSCAN và OPTICS là thuật toán quang học xây dựng biểu đồ khả năng tiếp cận, gán cho mỗi mẫu cả khoảng cách >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)17 và một điểm trong thuộc tính cụm >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)18; Hai thuộc tính này được gán khi mô hình được trang bị và được sử dụng để xác định tư cách thành viên cụm. Nếu quang học được chạy với giá trị mặc định của INF được đặt cho >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)19, thì việc trích xuất cụm kiểu DBSCAN có thể được thực hiện nhiều lần trong thời gian tuyến tính cho bất kỳ giá trị >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)05 nào bằng cách sử dụng phương thức >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)21. Đặt >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)19 ở 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 được khác.
Khoảng cách khả năng tiếp cận được tạo ra bởi quang học 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 khả năng tiếp cận và tập dữ liệu >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)18 tạo ra một biểu đồ 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 sao cho các điểm gần đó liền kề. Cắt giảm biểu đồ khả năng tiếp cận tại một giá trị duy nhất tạo ra kết quả như DBSCAN; Tất cả các điểm trên ’cắt được phân loại là tiếng ồn và mỗi lần có sự phá vỡ khi đọc từ trái sang phải biểu thị một cụm mới. Việc trích xuất cụm mặc định với quang học nhìn vào độ dốc trong biểu đồ để tìm cụm và người dùng có thể xác định những gì được tính là độ dốc bằng cách sử dụng tham số >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)24. Ngoài ra còn có các khả năng khác để phân tích trên bản thân biểu đồ, chẳng hạn như tạo các biểu diễn phân cấp của dữ liệu thông qua các mô tả âm mưu 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ố >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)25. Biểu đồ trên đã được mã hóa màu sao cho các màu cụm trong không gian phẳng phù hợ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 và đỏ nằm liền kề trong biểu đồ khả năng tiếp cận và có thể được biểu diễn theo thứ bậc như con của một cụm cha mẹ lớn hơn. 2.3.9. Bạch dươngBIRCH¶>>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)26 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 bị mất được nén vào một tập hợp các nút tính năng phân cụm (các nút CF). Các nút CF có một số bộ phụ con được gọi là các bộ đệm con (bộ con CF) và các bộ phụ CF này nằm trong các nút CF không thiết bị đầu cuối có thể có các nút CF khi còn nhỏ. Các trình phân phối CF giữ thông tin cần thiết để phân cụm giúp ngăn chặn sự cần thiết phải 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 bạch dương có hai tham số, ngưỡng và yếu tố phân nhánh. Hệ số phân nhánh giới hạn số lượng các bộ phụ trong một nút và ngưỡng giới hạn khoảng cách giữa mẫu nhập và các bộ phụ phụ hiện có. Thuật toán này có thể được xem như là một phương pháp giảm dữ liệu hoặc giảm dữ liệu, vì nó làm giảm dữ liệu đầu vào thành một tập hợp các bộ phụ thu được trực tiếp từ lá của CFT. Dữ liệu giảm này có thể được xử lý thêm bằng cách cung cấp nó vào một cụm toàn cầu. 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...1. 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...1 được đặt thành không có, các bộ đệm từ lá được đọc trực tiếp, nếu không, một bước phân cụm toàn cầu sẽ dán nhãn các bộ phụ này vào các cụm toàn cầu (nhãn) và các mẫu được ánh xạ tới nhãn toàn cầu của phân nhóm gần nhất. Mô tả thuật toán:
Birch hay Minibatchkmeans?
Làm thế nào để sử dụng partial_fit? Để tránh tính toán của phân cụm toàn cầu, với mỗi cuộc gọi của >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)30, người dùng được thông báo
2.3.10. Đánh giá hiệu suất phân cụmClustering performance evaluation¶Đánh giá hiệu suất của một thuật toán phân cụm không tầm thường như việc đếm số lượng lỗi hoặc độ chính xác và thu hồi 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 các nhãn cụm mà là nếu phân cụm này xác định sự phân tách của dữ liệu tương tự như một số lớp thực tế của các lớp hoặc thỏa mãn một số giả định để các thành viên thuộc cùng một lớp hơn các thành viên của các lớp khác nhau theo một số số liệu tương tự. 2.3.10.1. Chỉ mục randRand index¶Đưa ra kiến thức về các bài tập của lớp Truth Ground >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)36 và các bài tập thuật toán phân cụm của chúng tôi của cùng một mẫu >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)37, chỉ số RAND (điều chỉnh hoặc không điều chỉnh) là một hàm đo lường sự tương đồng của hai bài tập, bỏ qua các hoán vị:(adjusted or unadjusted) Rand index is a function that measures the similarity of the two assignments, ignoring permutations: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66... Chỉ số RAND không đảm bảo có được giá trị gần 0,0 cho việc ghi nhãn ngẫu nhiên. Chỉ số RAND được điều chỉnh sửa cho Chance và sẽ đưa ra một đường cơ sở như vậy.corrects for chance and will give such a baseline. >>> 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 dự đoán, đổi tên 2 thành 3 và nhận được cùng một đ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ả >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)38 >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)39 đề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 làm biện pháp đồng thuận:symmetric: swapping the argument does not change the scores. They can thus be used as consensus measures: >>> metrics.rand_score(labels_pred, labels_true) 0.66... >>> metrics.adjusted_rand_score(labels_pred, labels_true) 0.24... Ghi nhãn hoàn hảo được ghi 1,0: >>> labels_pred = labels_true[:] >>> metrics.rand_score(labels_true, labels_pred) 1.0 >>> metrics.adjusted_rand_score(labels_true, labels_pred) 1.0 Nhãn đồng ý kém (ví dụ: nhãn độc lập) có điểm số thấp hơn và đối với chỉ số RAND được điều chỉnh, điểm số sẽ âm hoặc gần bằng không. Tuy nhiên, đối với Rand chưa được điều chỉnh, chỉ số đ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_true = [0, 0, 0, 0, 0, 0, 1, 1] >>> labels_pred = [0, 1, 2, 3, 4, 5, 5, 6] >>> metrics.rand_score(labels_true, labels_pred) 0.39... >>> metrics.adjusted_rand_score(labels_true, labels_pred) -0.07... 2.3.10.1.1. Thuận lợi¶Advantages¶
2.3.10.1.2. Hạn chếDrawbacks¶
2.3.10.1.3. Công thức toán họcMathematical formulation¶Nếu C là một phân công lớp Truth Ground và k là phân cụm, chúng ta hãy xác định \ (a \) và \ (b \) như:\(a\) and \(b\) as:
Chỉ số Rand chưa được điều chỉnh sau đó được đưa ra bởi: \ [\ text {ri} = \ frac {a + b} {c_2^{n_ {samples}}} \] trong đó \ (c_2^{n_ {mẫu}} \) là tổng số các cặp có thể trong tập dữ liệu. Không có vấn đề gì nếu tính toán được thực hiện trên các cặp theo thứ tự hoặc các cặp không theo thứ tự miễn là tính toán được thực hiện một cách nhất quán.\(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. Tuy nhiên, chỉ số RAND không đảm bảo rằng các bài tập nhãn ngẫu nhiên sẽ nhận được giá trị gần bằng 0 (đặc biệt nếu số lượng cụm theo cùng một độ lớn với số lượng mẫu). Để chống lại hiệu ứng này, chúng ta có thể giảm giá Ri \ (E [\ text {ri}] \) dự kiến của các nhãn ngẫu nhiên bằng cách xác định chỉ mục Rand đã điều chỉnh như sau:\(E[\text{RI}]\) of random labelings by defining the adjusted Rand index as follows: \ [\ text {ari} = \ frac {\ text {ri} - e [\ text {ri}]} {\ max (\ text {ri}) - 2.3.10.2. Điểm dựa trên thông tin lẫn nhauMutual Information based scores¶Với kiến thức về các bài tập của lớp Truth Ground >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)36 và các bài tập thuật toán phân cụm của chúng tôi của cùng một mẫu >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)37, thông tin lẫn nhau là một hàm đo lường thỏa thuận của hai bài tập, bỏ qua các hoán vị. Hai phiên bản chuẩn hóa khác nhau của biện pháp này có sẵn, Thông tin lẫn nhau được chuẩn hóa (NMI) và Thông tin lẫn nhau được điều chỉnh (AMI). NMI thường được sử dụng trong tài liệu, trong khi AMI được đề xuất gần đây hơn và được chuẩn hóa chống lại cơ hội: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: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504... Người ta có thể hoán vị 0 và 1 trong các nhãn dự đoán, đổi tên 2 thành 3 và nhận được cùng một điểm: >>> labels_pred = [1, 1, 0, 0, 3, 3] >>> metrics.adjusted_mutual_info_score(labels_true, labels_pred) 0.22504... Tất cả, >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)47, >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)48 và >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)49 là đố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ư một biện pháp đồng thuận:consensus measure: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)0 Ghi nhãn hoàn hảo được ghi 1,0: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)1 Điều này không đúng với >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)47, do đó khó đánh giá hơn: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)2 Xấu (ví dụ: nhãn độc lập) có điểm số không dương tính: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)3 2.3.10.2.1. Thuận lợi¶Advantages¶
2.3.10.2.2. Hạn chếDrawbacks¶
2.3.10.2.3. Công thức toán họcMathematical formulation¶Giả sử hai gán nhãn (của cùng một đối tượng), \ (u \) và \ (v \). Entropy của họ là số lượng không chắc chắn cho một bộ phân vùng, được xác định bởi:\(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)) \] trong đó \ (p (i) = | u_i | / n \) là xác suất mà một đối tượng được chọn ngẫu nhiên từ \ (u \) rơi vào lớp \ (u_i \). Tương tự như vậy đối với \ (v \):\(P(i) = |U_i| / N\) is the probability that an object picked at random from \(U\) falls into class \(U_i\). Likewise for \(V\): \ [H (v) = - \ sum_ {j = 1}^{| v |} p '(j) \ log (p' (j)) \] Với \ (p '(j) = | v_j | / n \). Thông tin lẫn nhau (mi) giữa \ (u \) và \ (v \) được tính toán bởi:\(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 |} \ frac {p (i, j)} {p (i) p '(j)} \ right) \] trong đó \ (p (i, j) = | u_i \ cap v_j | / n \) là xác suất mà một đối tượng được chọn khi ngẫu nhiên rơi vào cả hai lớp \ (u_i \) và \ (v_j \).\(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\). Nó cũng có thể được thể hiện trong công thức Cardinality đã thiết lập: \ [\ text {mi} (u, v) = \ sum_ {i = 1}^{| u |} \ sum_ {j = 1}^{v | N} \ log \ trái (\ frac {n | u_i \ cap v_j |} {| u_i || v_j |} \ right) \] Thông tin lẫn nhau được chuẩn hóa được định nghĩa là \] Giá trị này của thông tin lẫn nhau và biến thể được chuẩn hóa không được điều chỉnh để có cơ hội và sẽ có xu hướng tăng khi số lượng nhãn (cụm) khác nhau tăng lên, bất kể số lượng thông tin lẫn nhau thực tế giữa các phân công nhãn. Giá trị dự kiến cho thông tin lẫn nhau có thể được tính bằng cách sử dụng phương trình sau [VEB2009]. Trong phương trình này, \ (a_i = | u_i | \) (số lượng phần tử trong \ (u_i \)) và \ (b_j = | v_j | \) (số lượng phần tử trong \ (v_j \)).[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} . \ phải) \ frac {a_i! B_j! (n-a_i)! (n-b_j)!} {n! n_ {ij}! (N-a_i-b_j+n_ {ij})!} \] Sử dụng giá trị dự kiến, thông tin lẫn nhau được điều chỉnh sau đó có thể được tính bằng cách sử dụng một hình thức tương tự như của chỉ số RAND được điều chỉnh: \ [\ text {ami} = \ frac {\ text {mi} - e [\ text {mi}]} {\ text {mean} }]} \] Đối với thông tin lẫn nhau được chuẩn hóa và điều chỉnh thông tin lẫn nhau, giá trị chuẩn hóa thường là một số giá trị trung bình tổng quát của các entropies của mỗi phân cụm. Các phương tiện tổng quát khác nhau tồn tại và không có quy tắc vững chắc nào tồn tại để thích một người hơn những người khác. Quyết định này phần lớn là một cơ sở từng lĩnh vực; Ví dụ, trong phát hiện cộng đồng, trung bình số học là phổ biến nhất. Mỗi phương pháp chuẩn hóa cung cấp các hành vi tương tự về mặt chất lượng của người Viking [YAT2016]. Trong triển khai của chúng tôi, điều này được kiểm soát bởi tham số >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)53.[YAT2016]. In our implementation, this is controlled by the >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)53 parameter. Vinh et al. (2010) được đặt tên là các biến thể của NMI và AMI bằng phương pháp trung bình của chúng [VEB2010]. Trung bình ‘SQRT và trung bình của họ là các phương tiện hình học và số học; Chúng tôi sử dụng những cái tên phổ biến rộng hơn này.[VEB2010]. Their ‘sqrt’ and ‘sum’ averages are the geometric and arithmetic means; we use these more broadly common names. 2.3.10.3. Tính đồng nhất, tính đầy đủ và v-measure¶Homogeneity, completeness and V-measure¶Với kiến thức về các bài tập của lớp Truth Ground 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. Đặc biệt là Rosenberg và Hirschberg (2007) xác định hai mục tiêu mong muốn sau đây cho bất kỳ phân công cụm nào:
Chúng ta có thể biến những khái niệm đó thành điểm số >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)54 và >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)55. Cả hai đều được giới hạn dưới 0,0 trở lên 1,0 (cao hơn là tốt hơn): >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)4 Giá trị trung bình hài hòa của chúng được gọi là Vị trí V được tính toán bằng >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)56:V-measure is computed by >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)56: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)5 Công thức chức năng này như sau: \ [v = \ frac {(1 + \ beta) \ Times \ text {đồng nhất} \ Times \ text {hoàn thành}} {(\ beta \ Times \ text {đồng nhất} + \ text {hoàn thành}) \] >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)57 mặc định là giá trị 1.0, nhưng đối với việc sử dụng giá trị nhỏ hơn 1 cho beta: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)6 Trọng lượng nhiều hơn sẽ được quy cho tính đồng nhất và sử dụng giá trị lớn hơn 1: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)7 Trọng lượng nhiều hơn sẽ được quy cho sự hoàn chỉnh. Phương tiện V thực sự tương đương với thông tin lẫn nhau (NMI) được thảo luận ở trên, với hàm tổng hợp là trung bình số học [B2011].[B2011]. Tính đồng nhất, tính đầy đủ và đo V có thể được tính toán cùng một lúc bằng cách sử dụng >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)58 như sau: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)8 Bài tập phân cụm sau đây tốt hơn một chút, vì nó đồng nhất nhưng không hoàn thành: >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)9 Ghi chú >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)56 là đối xứng: Nó có thể được sử dụng để đánh giá thỏa thuận của hai bài tập độc lập trên cùng một bộ dữ liệu.symmetric: it can be used to evaluate the agreement of two independent assignments on the same dataset. Đây không phải là trường hợp của >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)55 và >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)54: Cả hai đều bị ràng buộc bởi mối quan hệ: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...0 2.3.10.3.1. Thuận lợi¶Advantages¶
2.3.10.3.2. Hạn chếDrawbacks¶
2.3.10.3.3. Công thức toán họcMathematical formulation¶Điểm đồng nhất và tính đầy đủ được chính thức được đưa ra bởi: \ [h = 1 - \ frac {h (c | k)} {h (c)} \] \ [c = 1 - \ frac {h (k | c)} {h (k)} \] Trong đó \ (h (c | k) \) là entropy có điều kiện của các lớp được đưa ra các phân công cụm và được đưa ra bởi:\(H(C|K)\) is the conditional entropy of the classes given the cluster assignments and is given by: A cdot \ log \ trái (\ frac {n_ {c, k}} {n_k} \ right) \] và \ (h (c) \) là entropy của các lớp và được đưa ra bởi:\(H(C)\) is the entropy of the classes and is given by: A với \ (n \) tổng số mẫu, \ (n_c \) và \ (n_k \) số mẫu tương ứng thuộc lớp \ (c \) và cụm \ (k \) và cuối cùng là \ (n_ { C, k} \) Số lượng mẫu từ lớp \ (c \) được gán cho cụm \ (k \).\(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\). Entropy có điều kiện của các cụm được cho lớp \ (h (k | c) \) và entropy của các cụm \ (h (k) \) được định nghĩa theo cách đối xứng.conditional entropy of clusters given class \(H(K|C)\) and the entropy of clusters \(H(K)\) are defined in a symmetric manner. Rosenberg và Hirschberg xác định thêm V-đo là trung bình hài hòa của tính đồng nhất và tính đầy đủ:V-measure as the harmonic mean of homogeneity and completeness: \ [v = 2 \ cdot \ frac {h \ cdot c} {h + c} \] 2.3.10.4. Điểm số của Fowlkes-MallowsFowlkes-Mallows scores¶Chỉ số Fowlkes-Mallows ( >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)62) có thể được sử dụng khi các bài tập của lớp Truth Ground của các mẫu được biết đến. Điểm FMI của Fowlkes-Mallows được định nghĩa là giá trị trung bình hình học của độ chính xác và thu hồi của cặp: \ [\ text {fmi} = \ frac {\ text {tp}} {\ sqrt {(\ text {tp} + \ text {fp}) ] Trong đó >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)63 là số lượng dương tính thực sự (nghĩa là số cặp điểm thuộc cùng một cụm trong cả hai nhãn thực và nhãn dự đoán), >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)64 là số lượng dương tính giả (nghĩa là số lượng điểm thuộc về Đối với cùng một cụm trong các nhãn thực và không trong các nhãn dự đoán) và >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)65 là số lượng âm giả giả (tức là số cặp điểm thuộc cùng một cụm trong các nhãn dự đoán chứ không phải trong nhãn thực).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), >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)64 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 >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)65 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). Điểm số dao động từ 0 đến 1. Giá trị cao cho thấy sự tương đồng tốt giữa hai cụm. >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...1 >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...2 Người ta có thể hoán vị 0 và 1 trong các nhãn dự đoán, đổi tên 2 thành 3 và nhận được cùng một điểm: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...3 Ghi nhãn hoàn hảo được ghi 1,0: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...4 Xấu (ví dụ: nhãn độc lập) có điểm số không: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...5 2.3.10.4.1. Thuận lợi¶Advantages¶
2.3.10.4.2. Hạn chếDrawbacks¶
2.3.10.5. Hệ số hình bóngSilhouette Coefficient¶Nếu các nhãn sự thật mặt đất không được biết, việc đánh giá phải được thực hiện bằng cách sử dụng chính mô hình. Hệ số hình bóng ( >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)68) 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 với các cụm được xác định tốt hơn. Hệ số hình bóng được xác định cho từng mẫu và bao gồm hai điểm:
Hệ số hình bóng S cho một mẫu sau đó được đưa ra như: \ [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 đưa ra là giá trị trung bình của hệ số hình bóng cho mỗi mẫu. >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...6 Trong việc sử dụng bình thường, hệ số hình bóng được áp dụng cho kết quả phân tích cụm. >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...7 2.3.10.5.1. Thuận lợi¶Advantages¶
2.3.10.5.2. Hạn chếDrawbacks¶
2.3.10.6. CALINSKI-HARABASZ INDEX¶Calinski-Harabasz Index¶Nếu các nhãn sự thật mặt đất không được biết đến, chỉ số Calinski -Harabasz ( >>> from sklearn.cluster import SpectralClustering >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100, ... assign_labels='discretize') >>> sc.fit_predict(adjacency_matrix)69) - 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 với 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 đó sự phân tán được định nghĩa là tổng của khoảng cách bình phương): >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...6 Trong việc 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: >>> from sklearn import metrics >>> labels_true = [0, 0, 0, 1, 1, 1] >>> labels_pred = [0, 0, 1, 1, 2, 2] >>> metrics.rand_score(labels_true, labels_pred) 0.66...9 2.3.10.6.1. Thuận lợi¶Advantages¶
Hệ số hình bóng thường cao hơn đối với các cụm lồi so với các khái niệm khác về các cụm, chẳng hạn như các cụm dựa trên mật độ như các cụm thu được thông qua DBSCAN.Drawbacks¶
Nếu các nhãn sự thật mặt đất không được biết đến, chỉ số Calinski -Harabasz ( |