Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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¶

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

So sánh các thuật toán phân cụm trong Scikit-Learn¶

Tên phương thức

Thông số

Khả năng mở rộng

Usecase

Hình học (số liệu được sử dụng)

K-Means

Số lượng cụm

Rất lớ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...
0, 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...
1 với mã MinibatchMiniBatch code

Mục đích chung, thậm chí kích thước cụm, 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

Tuyên 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 đều nhau, hình học không phẳng, quy nạp

Khoảng cách đồ thị (ví dụ: biểu đồ lân cận gần nhất)

Mean-shift

băng thông

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...
0

Nhiều cụm, kích thước cụm không đều nhau, hình học không phẳng, quy nạp

Khoảng cách giữa các điểm

Tuyên truyền ái lực

Số lượng cụm

Rất lớ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...
0, 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...
1 với mã Minibatch

Mục đích chung, thậm chí kích thước cụm, hình học phẳng, không quá nhiều cụm, quy nạp

Khoảng cách đồ thị (ví dụ: biểu đồ lân cận gần nhất)

băng thông

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...
0

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

Khoảng cách giữa các điểm

Tuyên truyền ái lực

giảm xóc, ưu tiên mẫu

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

Một vài cụm, thậm chí kích thước cụm, hình học không phẳng

Phường phân cấp phân cụm

Số cụm hoặc ngưỡng khoảng cách

Lớ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...
0 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...
1

Nhiều cụm, có thể ràng buộc kết nối

Phân cụm kết tụ

Số lượng cụm hoặc ngưỡng khoảng cách, loại liên kết, khoảng cách

Nhiều cụm, có thể ràng buộc kết nối, khoảng cách không Euclide, tải trọng

Bất kỳ khoảng cách cặp

DBSCAN

Khoảng cách giữa các điểm

Tuyên 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 đều nhau, hình học không phẳng, quy nạp

Khoảng cách đồ thị (ví dụ: biểu đồ lân cận gần nhất)

băng thông

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...
0

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

Một vài cụm, thậm chí kích thước cụm, hình học không phẳng

Phường phân cấp phân cụm

Số lượng cụm

Lớ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...
0 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...
1

Nhiều cụm, có thể ràng buộc kết nối

Khoảng cách giữa các điểm

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

  • Một vài cụm, thậm chí kích thước cụm, hình học không phẳng

  • Phường phân cấp phân cụmPrincipal component analysis (PCA) prior to k-means clustering can alleviate this problem and speed up the computations.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.0
0. Đ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.0
3 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.0
3 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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.0
7 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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.0
8 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.0
9, 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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

>>> 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...
0

>>> 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...
1

>>> 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...
2

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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:

  • Phường giảm thiểu tổng số khác biệt bình phương trong tất cả các cụm. Đó là một cách tiếp cận tối thiểu hóa phương sai và theo nghĩa này tương tự như hàm mục tiêu K-MEANS nhưng được giải quyết bằng một cách tiếp cận phân cấp kết tụ. minimizes the sum of squared differences within all clusters. It is a variance-minimizing approach and in this sense is similar to the k-means objective function but tackled with an agglomerative hierarchical approach.

  • Liên kết tối đa hoặc hoàn chỉnh giảm thiểu khoảng cách tối đa giữa các quan sát của các cặp cụm. or complete linkage minimizes the maximum distance between observations of pairs of clusters.

  • Liên kết trung bình giảm thiểu trung bình của khoảng cách giữa tất cả các quan sát của các cặp cụm. minimizes the average of the distances between all observations of pairs of clusters.

  • Liên kết đơn giảm thiểu khoảng cách giữa các quan sát gần nhất của các cặp cụm. minimizes the distance between the closest observations of pairs of clusters.

>>> 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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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ỏ.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

  • Khoảng cách L1 thường tốt cho các tính năng thưa thớt hoặc tiếng ồn thưa thớt: tức là nhiều tính năng bằng không, như trong khai thác văn bản bằng cách sử dụng các từ hiếm.

  • Khoảng cách cosine rất thú vị vì nó bất biến với quy mô toàn cầu của tín hiệu.

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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:
  • >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    00 chọn cụm có nhiều điểm nhất

  • >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    01 chọn cụm có quán tính lớn nhất (cụm có tổng số lỗi bình phương lớn nhất bên trong)

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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:

  • Số lượng mẫu trong một phân nhóm.

  • Tổng tuyến tính - một vectơ n chiều giữ tổng của tất cả các mẫu

  • Tổng bình phương - tổng của định mức L2 bình phương của tất cả các mẫu.

  • Centroids - để tránh tính toán lại tổng hợp / n_samples.

  • Định mức bình phương của các trung tâ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:

  • Một mẫu mới được chèn vào gốc của cây CF là nút CF. Sau đó, nó được hợp nhất với phần phụ của gốc, có bán kính nhỏ nhất sau khi hợp nhất, bị hạn chế bởi các điều kiện ngưỡng và yếu tố phân nhánh. Nếu phân nhóm có bất kỳ nút con nào, thì điều này được thực hiện nhiều lần cho đến khi nó đạt đến một chiếc lá. Sau khi tìm thấy phân nhóm gần nhất trong lá, các thuộc tính của phân nhóm này và các phần phụ mẹ được cập nhật đệ quy.

  • Nếu bán kính của phân nhóm thu được bằng cách hợp nhất mẫu mới và phân nhóm gần nhất lớn hơn bình phương của ngưỡng và nếu số lượng phụ lớn hơn hệ số phân nhánh, thì một không gian được phân bổ tạm thời cho mẫu mới này. Hai phân nhóm xa nhất được lấy và các bộ phụ được chia thành hai nhóm trên cơ sở khoảng cách giữa các bộ phụ này.

  • Nếu nút phân chia này có phân nhóm cha mẹ và có chỗ cho một phân nhóm mới, thì cha mẹ được chia thành hai. Nếu không có chỗ, thì nút này lại được chia thành hai và quá trình được tiếp tục đệ quy, cho đến khi nó đến gốc.

Birch hay Minibatchkmeans?

  • Birch không mở rộng quy mô tốt đến dữ liệu chiều cao. Theo nguyên tắc thông thường nếu

    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    29 lớn hơn hai mươi, thường nên sử dụng minibatchkmeans.

  • Nếu số lượng phiên bản dữ liệu cần phải được giảm hoặc nếu một người muốn một số lượng lớn các trình phân phối dưới dạng bước tiền xử lý hoặc bằng cách khác, Birch hữu ích hơn 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

  1. Để đặt

    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    31 ban đầu

  2. Huấn luyện tất cả dữ liệu bằng nhiều cuộc gọi đến Partial_fit.

  3. Đặ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...
    
    1 thành giá trị bắt buộ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)  
    
    33.

  4. Gọi

    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    30 Cuối cùng không có đối số, tức là
    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    35 thực hiện phân cụm toàn cầu.

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python

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¶

  • Khả năng diễn giải: Chỉ số RAND chưa được điều chỉnh tỷ lệ thuận với số lượng các cặp mẫu có nhãn giống nhau trong cả

    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    37 và
    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    36 hoặc khác nhau ở cả hai.
    : The unadjusted Rand index is proportional to the number of sample pairs whose labels are the same in both
    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    37 and
    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    36, or are different in both.

  • Các nhiệm vụ nhãn ngẫu nhiên (đồng nhất) có điểm số chỉ số RAND được điều chỉnh gần 0,0 cho bất kỳ giá trị nào 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...
    
    1 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...
    
    0 (ví dụ như chỉ số RAND không được điều chỉnh hoặc số lượng V).
    for any value of
    >>> 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 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...
    
    0 (which is not the case for the unadjusted Rand index or the V-measure for instance).

  • Phạm vi giới hạn: Các giá trị thấp hơn cho thấy các nhãn khác nhau, các cụm tương tự có chỉ số RAND cao (được điều chỉnh hoặc chưa được điều chỉnh), 1.0 là điểm kết hợp hoàn hảo. Phạm vi điểm là [0, 1] cho chỉ số RAND chưa được điều chỉnh và [-1, 1] cho chỉ số RAND được điều chỉnh.: Lower values indicate different labelings, similar clusterings have a high (adjusted or unadjusted) Rand index, 1.0 is the perfect match score. The score range is [0, 1] for the unadjusted Rand index and [-1, 1] for the adjusted Rand index.

  • Không có giả định nào được đưa ra trên cấu trúc cụm: Chỉ số RAND (điều chỉnh hoặc chưa được điều chỉnh) có thể được sử dụng để so sánh tất cả các loại thuật toán phân cụm và có thể được sử dụng để so sánh các thuật toán phân cụm như K-MEAN Các thuật toán phân cụm có thể tìm thấy cụm với các hình dạng gấp nếp.: The (adjusted or unadjusted) Rand index can be used to compare all kinds of clustering algorithms, and can be used to compare clustering algorithms such as k-means which assumes isotropic blob shapes with results of spectral clustering algorithms which can find cluster with “folded” shapes.

2.3.10.1.2. Hạn chếDrawbacks¶

  • Trái ngược với quán tính, chỉ số RAND (điều chỉnh hoặc chưa được điều chỉnh) đòi hỏi kiến ​​thức về các lớp sự thật mặt đất gần như không bao giờ có sẵn trong thực tế hoặc yêu cầu gán thủ công bởi các chú thích của con người (như trong môi trường học tập được giám sát).(adjusted or unadjusted) Rand index requires knowledge of the ground truth classes which is almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).

    Tuy nhiên, chỉ số Rand được điều chỉnh hoặc chưa được điều chỉnh) cũng có thể hữu ích trong cài đặt hoàn toàn không được giám sát như một khối xây dựng cho một chỉ số đồng thuận có thể được sử dụng để lựa chọn mô hình phân cụm (TODO).

  • Chỉ số Rand chưa được điều chỉnh thường gần 1.0 ngay cả khi bản thân các cụm khác nhau đáng kể. Điều này có thể được hiểu khi giải thích chỉ số RAND là độ chính xác của ghi nhãn cặp phần tử do các cụm: trong thực tế thường có phần lớn các cặp phần tử được gán nhãn

    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    44 theo cả phân cụm sự thật dự đoán và mặt đất dẫn đến Tỷ lệ cao của các nhãn cặp đồng ý, dẫn đến điểm cao sau đó.unadjusted Rand index is often close to 1.0 even if the clusterings themselves differ significantly. This can be understood when interpreting the Rand index as the accuracy of element pair labeling resulting from the clusterings: In practice there often is a majority of element pairs that are assigned the
    >>> from sklearn.cluster import SpectralClustering
    >>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
    ...                         assign_labels='discretize')
    >>> sc.fit_predict(adjacency_matrix)  
    
    44 pair label under both the predicted and the ground truth clustering resulting in a high proportion of pair labels that agree, which leads subsequently to a high score.

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:

  • \ (a \), số cặp phần tử trong cùng một tập hợp trong c và trong cùng một tập hợp trong k, the number of pairs of elements that are in the same set in C and in the same set in K

  • \ (b \), số cặp phần tử trong các bộ khác nhau trong c và trong các bộ khác nhau trong k, the number of pairs of elements that are in different sets in C and in different sets in K

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¶

  • Các nhiệm vụ nhãn ngẫu nhiên (đồng nhất) có điểm AMI gần 0,0 cho bất kỳ giá trị nào 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...
    
    1 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...
    
    0 (ví dụ như thông tin lẫn nhau hoặc đo V RAW).
    for any value of
    >>> 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 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...
    
    0 (which is not the case for raw Mutual Information or the V-measure for instance).

  • Giới hạn trên của 1: Các giá trị gần với 0 chỉ ra hai gán nhãn phần lớn độc lập, trong khi các giá trị gần với một cho thấy thỏa thuận quan trọng. Hơn nữa, một AMI chính xác 1 chỉ ra rằng hai gán nhãn bằng nhau (có hoặc không có hoán vị).: Values close to zero indicate two label assignments that are largely independent, while values close to one indicate significant agreement. Further, an AMI of exactly 1 indicates that the two label assignments are equal (with or without permutation).

2.3.10.2.2. Hạn chếDrawbacks¶

  • Trái ngược với quán tính, các biện pháp dựa trên MI đòi hỏi kiến ​​thức về các lớp sự thật mặt đất trong khi hầu như không bao giờ có sẵn trong thực tế hoặc yêu cầu gán thủ công bởi các chú thích của con người (như trong môi trường học tập được giám sát).MI-based measures require the knowledge of the ground truth classes while almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).

    Tuy nhiên, các biện pháp dựa trên MI cũng có thể hữu ích trong cài đặt hoàn toàn không được giám sát như một khối xây dựng cho một chỉ số đồng thuận có thể được sử dụng để lựa chọn mô hình phân cụm.

  • NMI và MI không được điều chỉnh chống lại cơ hội.

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:

  • Tính đồng nhất: Mỗi cụm chỉ chứa các thành viên của một lớp.: each cluster contains only members of a single class.

  • Tính đầy đủ: Tất cả các thành viên của một lớp nhất định được gán cho cùng một cụm.: all members of a given class are assigned to the same cluster.

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¶

  • Điểm giới hạn: 0,0 là xấu như có thể, 1.0 là một điểm hoàn hảo.: 0.0 is as bad as it can be, 1.0 is a perfect score.

  • Giải thích trực quan: Phân cụm với phép đo V xấu có thể được phân tích một cách định tính về tính đồng nhất và tính đầy đủ để cảm nhận tốt hơn những gì ’loại sai lầm được thực hiện bởi bài tập.qualitatively analyzed in terms of homogeneity and completeness to better feel what ‘kind’ of mistakes is done by the assignment.

  • Không có giả định nào được đưa ra trên cấu trúc cụm: có thể được sử dụng để so sánh các thuật toán phân cụm như K-means giả định các hình dạng blob đẳng hướng với kết quả của các thuật toán phân cụm quang phổ có thể tìm thấy cụm với hình dạng gấp nếp.: can be used to compare clustering algorithms such as k-means which assumes isotropic blob shapes with results of spectral clustering algorithms which can find cluster with “folded” shapes.

2.3.10.3.2. Hạn chếDrawbacks¶

  • Các số liệu được giới thiệu trước đó không được chuẩn hóa liên quan đến việc ghi nhãn ngẫu nhiên: điều này có nghĩa là tùy thuộc vào số lượng mẫu, cụm và lớp sự thật mặt đất, việc ghi nhãn hoàn toàn ngẫu nhiên sẽ không luôn luôn mang lại các giá trị tương tự cho tính đồng nhất, tính đầy đủ và do đó có nghĩa là V. Đặc biệt ghi nhãn ngẫu nhiên đã giành được điểm số không có điểm số không, đặc biệt là khi số lượng cụm lớn.not normalized with regards to random labeling: this means that depending on the number of samples, clusters and ground truth classes, a completely random labeling will not always yield the same values for homogeneity, completeness and hence v-measure. In particular random labeling won’t yield zero scores especially when the number of clusters is large.

    Vấn đề này có thể bị bỏ qua một cách an toàn khi số lượng mẫu là hơn một nghìn và số lượng cụm nhỏ hơn 10. Đối với các cỡ mẫu nhỏ hơn hoặc số lượng cụm lớn hơn, việc sử dụng chỉ số được điều chỉnh như chỉ số RAND được điều chỉnh (như chỉ số RAND đã điều chỉnh ( Ari).For smaller sample sizes or larger number of clusters it is safer to use an adjusted index such as the Adjusted Rand Index (ARI).

Hướng dẫn hierarchical clustering images python - phân nhóm phân cấp hình ảnh python
  • Các số liệu này đòi hỏi kiến ​​thức về các lớp sự thật mặt đất trong khi hầu như không bao giờ có sẵn trong thực tế hoặc yêu cầu gán thủ công bởi các chú thích của con người (như trong môi trường học tập được giám sát).require the knowledge of the ground truth classes while almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).

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¶

  • Các nhiệm vụ nhãn ngẫu nhiên (đồng nhất) có điểm FMI gần 0,0 cho bất kỳ giá trị nào 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...
    
    1 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...
    
    0 (ví dụ như thông tin lẫn nhau hoặc đo V RAW).
    for any value of
    >>> 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 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...
    
    0 (which is not the case for raw Mutual Information or the V-measure for instance).

  • Giới hạn ở trên 1: Các giá trị gần với 0 chỉ ra hai gán nhãn phần lớn độc lập, trong khi các giá trị gần với một cho thấy thỏa thuận quan trọng. Hơn nữa, các giá trị của chính xác 0 biểu thị các gán nhãn độc lập hoàn toàn và FMI chính xác 1 chỉ ra rằng hai gán nhãn là bằng nhau (có hoặc không có hoán vị).: Values close to zero indicate two label assignments that are largely independent, while values close to one indicate significant agreement. Further, values of exactly 0 indicate purely independent label assignments and a FMI of exactly 1 indicates that the two label assignments are equal (with or without permutation).

  • Không có giả định nào được đưa ra trên cấu trúc cụm: có thể được sử dụng để so sánh các thuật toán phân cụm như K-means giả định các hình dạng blob đẳng hướng với kết quả của các thuật toán phân cụm quang phổ có thể tìm thấy cụm với hình dạng gấp nếp.: can be used to compare clustering algorithms such as k-means which assumes isotropic blob shapes with results of spectral clustering algorithms which can find cluster with “folded” shapes.

2.3.10.4.2. Hạn chếDrawbacks¶

  • Trái ngược với quán tính, các biện pháp dựa trên FMI đòi hỏi kiến ​​thức về các lớp sự thật mặt đất trong khi hầu như không bao giờ có sẵn trong thực tế hoặc yêu cầu gán thủ công bởi các chú thích của con người (như trong môi trường học tập được giám sát).FMI-based measures require the knowledge of the ground truth classes while almost never available in practice or requires manual assignment by human annotators (as in the supervised learning setting).

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:

  • A: Khoảng cách trung bình giữa một mẫu và tất cả các điểm khác trong cùng một lớp.: The mean distance between a sample and all other points in the same class.

  • B: Khoảng cách trung bình giữa một mẫu và tất cả các điểm khác trong cụm gần nhất tiếp theo.: The mean distance between a sample and all other points in the next nearest cluster.

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¶

  • Điểm số được giới hạn giữa -1 cho phân cụm không chính xác và +1 cho phân cụm rất dày đặc. Điểm số xung quanh 0 chỉ ra các cụm chồng chéo.

  • Điểm số cao hơn khi các cụm dày đặc và phân tách tốt, liên quan đến một khái niệm tiêu chuẩn của một cụm.

2.3.10.5.2. Hạn chếDrawbacks¶

  • 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.

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¶

  • Điểm số cao hơn khi các cụm dày đặc và phân tách tốt, liên quan đến một khái niệm tiêu chuẩn của một cụm.

  • 2.3.10.5.2. Hạn chế

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¶

  • 2.3.10.6. 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.
Mathematical formulation¶

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):\(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:

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:

2.3.10.6.1. Thuận lợi¶\(\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:

Điểm số là nhanh để tính toán.

2.3.10.6.2. Hạn chế

Chỉ số Calinski-Harabasz 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.\(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\).

2.3.10.6.3. Công thức toán họcDavies-Bouldin Index¶

Đối với một tập hợp dữ liệu \ (e \) có kích thước \ (n_e \) đã được phân lập thành các cụm \ (k \), điểm số calinski-harabasz Trung bình và sự phân tán bên trong cụm:

\ [s = \ frac {\ mathrm {tr} (b_k)} {\ mathrm {tr} (w_k)} \ times

Trong đó \ (\ mathrm {tr} (b_k) \) là dấu vết của ma trận phân tán nhóm giữa và \ (\ mathrm {tr} (w_k) \) là dấu vết của ma trận phân tán bên trong được xác định bởi:

\ [W_k = \ sum_ {q = 1}^k \ sum_ {x \ in c_q} (x - c_q) (x - c_q)^t \]

>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24...
0

\ [B_k = \ sum_ {q = 1}^k n_q (c_q - c_e) (c_q - c_e)^t \]Advantages¶

  • Với \ (c_q \), tập hợp các điểm trong cụm \ (q \), \ (c_q \) tâm của cụm \ (q \), \ (c_e \) trung tâm của \ (e \) và \ ( n_q \) Số lượng điểm trong cụm \ (q \).

  • 2.3.10.7. DAVIES-BOULDIN INDEX¶

Nếu các nhãn sự thật mặt đất không được biết đến, chỉ số Davies-Bouldin (
>>> from sklearn.cluster import SpectralClustering
>>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
...                         assign_labels='discretize')
>>> sc.fit_predict(adjacency_matrix)  
70) có thể được sử dụng để đánh giá mô hình, trong đó chỉ số Davies-bouldin thấp hơn liên quan đến một mô hình có sự phân tách tốt hơn giữa các cụm.
Drawbacks¶

  • Chỉ số này biểu thị mức độ tương tự trung bình giữa các cụm, trong đó độ tương tự là thước đo so sánh khoảng cách giữa các cụm với kích thước của chính các cụm.

  • Zero là điểm thấp nhất có thể. Các giá trị gần hơn với 0 chỉ ra một phân vùng tốt hơn.

Trong cách sử dụng bình thường, chỉ số Davies-Bouldin được áp dụng cho kết quả phân tích cụm như sau:Mathematical formulation¶

2.3.10.7.1. Thuận lợi¶\(C_i\) for \(i=1, ..., k\) and its most similar one \(C_j\). In the context of this index, similarity is defined as a measure \(R_{ij}\) that trades off:

  • \ (s_i \), khoảng cách trung bình giữa mỗi điểm của cụm \ (i \) và tâm của cụm đó - còn được gọi là đường kính cụm., the average distance between each point of cluster \(i\) and the centroid of that cluster – also know as cluster diameter.

  • \ (d_ {ij} \), khoảng cách giữa các tâm cụm \ (i \) và \ (j \)., the distance between cluster centroids \(i\) and \(j\).

Một lựa chọn đơn giản để xây dựng \ (r_ {ij} \) để nó không âm và đối xứng là:\(R_{ij}\) 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à:

\]

2.3.10.8. Ma trận dự phòngContingency Matrix¶

Ma trận dự phòng (

>>> from sklearn.cluster import SpectralClustering
>>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
...                         assign_labels='discretize')
>>> sc.fit_predict(adjacency_matrix)  
71) báo cáo tính toán 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ê đủ cho tất cả các số liệu phân cụm trong đó các mẫu độc lập và phân phối giống hệt nhau và người ta không cần phải giải thích cho 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à một A. Trong số đó, hai là trong cụm dự đoán 0, một trong 1 và không có trong 2. và hàng thứ hai chỉ ra rằng có ba mẫu có cụm thực sự là B B B. Trong số đó, không có gì trong cụm dự đoán 0, một trong 1 và hai là trong 2.

Một ma trận nhầm lẫn để phân loại là một ma trận dự phòng vuông trong đó thứ tự các hàng và cột tương ứng với một danh sách các lớp.confusion matrix for classification is a square contingency matrix where the order of rows and columns correspond to a list of classes.

2.3.10.8.1. Thuận lợi¶Advantages¶

  • Cho phép kiểm tra sự lây lan của từng cụm thực sự trên các cụm dự đoán và ngược lại.

  • Bảng dự phòng được tính toán thường được sử dụng trong tính toán của một thống kê tương tự (như các bảng khác được liệt kê trong tài liệu này) giữa hai cụm.

2.3.10.8.2. Hạn chếDrawbacks¶

  • Ma trận dự phòng rất dễ diễn giải cho một số lượng nhỏ các cụm, nhưng trở nên rất khó để giải thích cho một số lượng lớn các cụm.

  • Nó không cung cấp một số liệu duy nhất để sử dụng như một mục tiêu để tối ưu hóa phân cụm.

2.3.10.9. Cặp ma trận nhầm lẫnPair Confusion Matrix¶

Ma trận nhầm lẫn cặp (

>>> from sklearn.cluster import SpectralClustering
>>> sc = SpectralClustering(3, affinity='precomputed', n_init=100,
...                         assign_labels='discretize')
>>> sc.fit_predict(adjacency_matrix)  
72) là ma trận tương tự 2x2

\ [\ started {split} c = \ left [\ start \]

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à các cặp đếm được gán vào cùng hoặc thành các cụm khác nhau dưới các cụm đúng và dự đoán.

Nó có các mục sau:

\ (C_ {00} \): số lượng cặp với cả hai cụm có các mẫu không được phân cụm với nhau : number of pairs with both clusterings having the samples not clustered together

\ (C_ {10} \): Số lượng cặp với nhãn thực sự có các mẫu được phân cụm với nhau nhưng các nhóm khác không có các mẫu được phân cụm với nhau : number of pairs with the true label clustering having the samples clustered together but the other clustering not having the samples clustered together

\ (C_ {01} \): Số lượng cặp với cụm nhãn thực sự không có các mẫu được phân cụm với nhau nhưng các nhóm khác có các mẫu được tập hợp lại với nhau : number of pairs with the true label clustering not having the samples clustered together but the other clustering having the samples clustered together

\ (C_ {11} \): Số lượng cặp với cả hai cụm có các mẫu được phân cụm với nhau : number of pairs with both clusterings having the samples clustered together

Xem xét một cặp mẫu được nhóm lại với nhau một cặp dương, sau đó trong phân loại nhị phân, số lượng của các tiêu cực thực là \ (c_ {00} \), các tiêu cực sai là \ (c_ {10} \), dương tính thực sự là \ ( C_ {11} \) và dương tính giả là \ (c_ {01} \).\(C_{00}\), false negatives is \(C_{10}\), true positives is \(C_{11}\) and false positives is \(C_{01}\).

Nhãn kết 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 hiệu gán tất cả các thành viên lớp cho cùng một cụm đã hoàn tất nhưng không phải lúc nào cũng tinh khiết, do đó bị phạt và có một số mục không khác nhau khác nhau:

>>> 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ác lớp được phân chia hoàn toàn trên các cụm khác nhau, việc gán hoàn toàn không đầy đủ, do đó ma trận có tất cả các mục đường chéo bằng không:

>>> metrics.adjusted_rand_score(labels_true, labels_pred)
0.24...
6