Hiệu suất trường hợp trận đấu python

Mỗi thuật toán phân cụm có hai biến thể. một lớp, triển khai phương thức

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8 để tìm hiểu các cụm trên dữ liệu đào tạo và một hàm, với dữ liệu đào tạo đã cho, trả về một mảng các nhãn số nguyên tương ứng với các cụm khác nhau. Đối với lớp, các nhãn trên dữ liệu huấn luyện có thể được tìm thấy trong thuộc tính
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
9

Dữ liệu đầu vào

Một điều quan trọng cần lưu ý là các thuật toán được triển khai trong mô-đun này có thể lấy các loại ma trận khác nhau làm đầu vào. Tất cả các phương pháp chấp nhận ma trận dữ liệu tiêu chuẩn có hình dạng

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
0. Chúng có thể được lấy từ các lớp trong mô-đun
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
1. Đối với
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
2,
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
3 và
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
4, người ta cũng có thể nhập ma trận tương tự của hình dạng
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
5. Chúng có thể được lấy từ các chức năng trong mô-đun
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
6

2. 3. 1. Tổng quan về các phương pháp phân cụm¶

So sánh các thuật toán phân cụm trong scikit-learning

Tên phương thức

Thông số

khả năng mở rộng

ca sử dụng

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

K-Means

số cụm

_______ Rất lớn 27, trung bình ____28 với MiniBatch code

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

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

lan truyền ái lực

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

Không thể mở rộng với n_samples

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

Vẽ đồ thị khoảng cách [e. g. nearest-neighbor graph]

dịch chuyển trung bình

bandwidth

Not scalable with

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7

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

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

Spectral clustering

số cụm

Medium

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7, small
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8

Few clusters, even cluster size, non-flat geometry, transductive

Vẽ đồ thị khoảng cách [e. g. nearest-neighbor graph]

Ward hierarchical clustering

number of clusters or distance threshold

Large

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7 and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8

Many clusters, possibly connectivity constraints, transductive

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

Agglomerative clustering

number of clusters or distance threshold, linkage type, distance

Large

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7 and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8

Many clusters, possibly connectivity constraints, non Euclidean distances, transductive

Any pairwise distance

DBSCAN

neighborhood size

Very large

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7, medium
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8

Non-flat geometry, uneven cluster sizes, outlier removal, transductive

Distances between nearest points

OPTICS

minimum cluster membership

Very large

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7, large
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8

Non-flat geometry, uneven cluster sizes, variable cluster density, outlier removal, transductive

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

Gaussian mixtures

many

Not scalable

Flat geometry, good for density estimation, inductive

Mahalanobis distances to centers

BIRCH

branching factor, threshold, optional global clusterer

Large

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8 and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7

Large dataset, outlier removal, data reduction, inductive

Euclidean distance between points

Bisecting K-Means

số cụm

Very large

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
7, medium
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8

General-purpose, even cluster size, flat geometry, no empty clusters, inductive, hierarchical

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

Non-flat geometry clustering is useful when the clusters have a specific shape, i. e. a non-flat manifold, and the standard euclidean distance is not the right metric. This case arises in the two top rows of the figure above

Gaussian mixture models, useful for clustering, are described in another chapter of the documentation dedicated to mixture models. KMeans can be seen as a special case of Gaussian mixture model with equal covariance per component.

Transductive clustering methods [in contrast to inductive clustering methods] are not designed to be applied to new, unseen data.

2. 3. 2. K-means¶

The

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 algorithm clusters data by trying to separate samples in n groups of equal variance, minimizing a criterion known as the inertia or within-cluster sum-of-squares [see below]. This algorithm requires the number of clusters to be specified. It scales well to large numbers of samples and has been used across a large range of application areas in many different fields

The k-means algorithm divides a set of \[N\] samples \[X\] into \[K\] disjoint clusters \[C\] , each described by the mean \[\mu_j\] of the samples in the cluster. The means are commonly called the cluster “centroids”; note that they are not, in general, points from \[X\] , although they live in the same space.

The K-means algorithm aims to choose centroids that minimise the inertia, or within-cluster sum-of-squares criterion

\[\sum_{i=0}^{n}\min_{\mu_j \in C}[. x_i - \mu_j. ^2]\]

Quán tính có thể được coi là thước đo mức độ liên kết bên trong của các cụm. It suffers from various drawbacks

  • Inertia makes the assumption that clusters are convex and isotropic, which is not always the case. It responds poorly to elongated clusters, or manifolds with irregular shapes

  • Inertia is not a normalized metric. we just know that lower values are better and zero is optimal. But in very high-dimensional spaces, Euclidean distances tend to become inflated [this is an instance of the so-called “curse of dimensionality”]. Running a dimensionality reduction algorithm such as Principal component analysis [PCA] prior to k-means clustering can alleviate this problem and speed up the computations.

K-means is often referred to as Lloyd’s algorithm. In basic terms, the algorithm has three steps. The first step chooses the initial centroids, with the most basic method being to choose \[k\] samples from the dataset \[X\] . After initialization, K-means consists of looping between the two other steps. The first step assigns each sample to its nearest centroid. The second step creates new centroids by taking the mean value of all of the samples assigned to each previous centroid. The difference between the old and the new centroids are computed and the algorithm repeats these last two steps until this value is less than a threshold. In other words, it repeats until the centroids do not move significantly.

K-means tương đương với thuật toán tối đa hóa kỳ vọng với ma trận hiệp phương sai đường chéo nhỏ, hoàn toàn bằng nhau

Thuật toán cũng có thể được hiểu thông qua khái niệm sơ đồ Voronoi. Đầu tiên, sơ đồ Voronoi của các điểm được tính bằng các trọng tâm hiện tại. Mỗi phân đoạn trong sơ đồ Voronoi trở thành một cụm riêng biệt. Thứ hai, các trọng tâm được cập nhật thành giá trị trung bình của từng phân khúc. Thuật toán sau đó lặp lại điều này cho đến khi thỏa mãn tiêu chí dừng. Thông thường, thuật toán dừng khi mức giảm tương đối của hàm mục tiêu giữa các lần lặp nhỏ hơn giá trị dung sai đã cho. Đây không phải là trường hợp trong việc thực hiện này. lặp lại dừng lại khi trọng tâm di chuyển ít hơn dung sai

Nếu có đủ thời gian, K-means sẽ luôn hội tụ, tuy nhiên điều này có thể ở mức tối thiểu cục bộ. This is highly dependent on the initialization of the centroids. Kết quả là, việc tính toán thường được thực hiện nhiều lần, với các khởi tạo khác nhau của trọng tâm. Một phương pháp giúp giải quyết vấn đề này là sơ đồ khởi tạo k-means++, đã được triển khai trong scikit-learning [sử dụng tham số

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
65]. Điều này khởi tạo các trọng tâm [thường] cách xa nhau, dẫn đến kết quả có thể tốt hơn so với khởi tạo ngẫu nhiên, như thể hiện trong tài liệu tham khảo

K-mean++ cũng có thể được gọi độc lập để chọn hạt giống cho các thuật toán phân cụm khác, xem

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
66 để biết chi tiết và ví dụ sử dụng

Thuật toán hỗ trợ trọng số mẫu, có thể được cung cấp bởi tham số

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
67. Điều này cho phép gán nhiều trọng số hơn cho một số mẫu khi tính toán trung tâm cụm và giá trị quán tính. Ví dụ: gán trọng số 2 cho một mẫu tương đương với việc thêm một bản sao của mẫu đó vào tập dữ liệu \[X\] .

K-means có thể được sử dụng để lượng tử hóa véc tơ. Điều này đạt được bằng cách sử dụng phương pháp biến đổi của một mô hình được đào tạo của

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64

2. 3. 2. 1. Song song cấp thấp¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 lợi ích từ tính song song dựa trên OpenMP thông qua Cython. Các khối dữ liệu nhỏ [256 mẫu] được xử lý song song, ngoài ra còn mang lại dung lượng bộ nhớ thấp. Để biết thêm chi tiết về cách kiểm soát số lượng luồng, vui lòng tham khảo ghi chú Song song của chúng tôi.

ví dụ

  • Thể hiện các giả định về phương tiện k . Chứng minh khi nào k-mean hoạt động trực quan và khi nào thì không

  • Bản minh họa về phân cụm K-Means trên dữ liệu chữ số viết tay . Nhóm các chữ số viết tay

Người giới thiệu

  • “k-có nghĩa là ++. Ưu điểm của việc gieo hạt cẩn thận” Arthur, David và Sergei Vassilvitskii, Kỷ yếu của hội nghị chuyên đề ACM-SIAM hàng năm lần thứ mười tám về các thuật toán rời rạc, Hiệp hội toán học công nghiệp và ứng dụng [2007]

2. 3. 2. 2. K-Means hàng loạt nhỏ¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
20 là một biến thể của thuật toán
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 sử dụng các lô nhỏ để giảm thời gian tính toán, trong khi vẫn cố gắng tối ưu hóa cùng một hàm mục tiêu. Lô nhỏ là tập hợp con của dữ liệu đầu vào, được lấy mẫu ngẫu nhiên trong mỗi lần lặp đào tạo. Các lô nhỏ này giảm đáng kể lượng tính toán cần thiết để hội tụ thành một giải pháp cục bộ. Trái ngược với các thuật toán khác làm giảm thời gian hội tụ của k-mean, k-means hàng loạt nhỏ tạo ra kết quả thường chỉ kém hơn một chút so với thuật toán tiêu chuẩn

Thuật toán lặp lại giữa hai bước chính, tương tự như vanilla k-mean. Ở bước đầu tiên, \[b\] các mẫu được lấy ngẫu nhiên từ tập dữ liệu để tạo thành một lô nhỏ. Chúng sau đó được gán cho trọng tâm gần nhất. In the second step, the centroids are updated. In contrast to k-means, this is done on a per-sample basis. For each sample in the mini-batch, the assigned centroid is updated by taking the streaming average of the sample and all previous samples assigned to that centroid. This has the effect of decreasing the rate of change for a centroid over time. These steps are performed until convergence or a predetermined number of iterations is reached.

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
20 converges faster than
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64, but the quality of the results is reduced. In practice this difference in quality can be quite small, as shown in the example and cited reference

ví dụ

  • Comparison of the K-Means and MiniBatchKMeans clustering algorithms . Comparison of KMeans and MiniBatchKMeans

  • Clustering text documents using k-means . Document clustering using sparse MiniBatchKMeans

  • Online learning of a dictionary of parts of faces

Người giới thiệu

  • “Web Scale K-Means clustering” D. Sculley, Proceedings of the 19th international conference on World wide web [2010]

2. 3. 3. Affinity Propagation¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
2 creates clusters by sending messages between pairs of samples until convergence. A dataset is then described using a small number of exemplars, which are identified as those most representative of other samples. The messages sent between pairs represent the suitability for one sample to be the exemplar of the other, which is updated in response to the values from other pairs. This updating happens iteratively until convergence, at which point the final exemplars are chosen, and hence the final clustering is given

Affinity Propagation can be interesting as it chooses the number of clusters based on the data provided. For this purpose, the two important parameters are the preference, which controls how many exemplars are used, and the damping factor which damps the responsibility and availability messages to avoid numerical oscillations when updating these messages

The main drawback of Affinity Propagation is its complexity. The algorithm has a time complexity of the order \[O[N^2 T]\] , where \[N\] is the number of samples and \[T\] is the number of iterations until convergence. Ngoài ra, độ phức tạp của bộ nhớ theo thứ tự \[O[N^2]\] nếu sử dụng ma trận tương tự dày đặc, nhưng có thể rút gọn nếu sử dụng ma trận thưa thớt . Điều này làm cho Tuyên truyền mối quan hệ phù hợp nhất cho các bộ dữ liệu có kích thước vừa và nhỏ.

ví dụ

  • Bản trình diễn thuật toán phân cụm lan truyền ái lực . Tuyên truyền mối quan hệ trên bộ dữ liệu 2D tổng hợp với 3 lớp.

  • Trực quan hóa cấu trúc thị trường chứng khoán Tuyên truyền mối quan hệ trên chuỗi thời gian tài chính để tìm các nhóm công ty

Mô tả thuật toán. Các tin nhắn được gửi giữa các điểm thuộc một trong hai loại. Đầu tiên là trách nhiệm \[r[i, k]\] , là bằng chứng tích lũy mà mẫu . Thứ hai là tính khả dụng should be the exemplar for sample \[i\]. The second is the availability \[a[i, k]\] là bằng chứng tích lũy mà mẫu \ . Theo cách này, các mẫu được chọn theo mẫu nếu chúng [1] đủ giống với nhiều mẫu và [2] được nhiều mẫu chọn để đại diện cho chính chúng. should choose sample \[k\] to be its exemplar, and considers the values for all other samples that \[k\] should be an exemplar. In this way, exemplars are chosen by samples if they are [1] similar enough to many samples and [2] chosen by many samples to be representative of themselves.

Chính thức hơn, trách nhiệm của mẫu \[k\] là gương mẫu của mẫu \[i\] is given by:

\[r[i, k] \leftarrow s[i, k] - max [ a[i, k'] + s[i, k'] \forall k' \neq k ]\]

Ở đâu \[s[i, k]\] là sự giống nhau giữa các mẫu \[ . Tính khả dụng của mẫu and \[k\]. The availability of sample \[k\] để làm mẫu cho mẫu \[i\] is given by:

\[a[i, k] \leftarrow min [0, r[k, k] + \sum_{i'~s. t. ~i' \notin \{i, k\}}{r[i', k]}]\]

Đầu tiên, tất cả các giá trị cho \[r\]\[a\] . Như đã thảo luận ở trên, để tránh dao động số khi cập nhật thông báo, hệ số giảm xóc are set to zero, and the calculation of each iterates until convergence. As discussed above, in order to avoid numerical oscillations when updating the messages, the damping factor \[\lambda\] được đưa vào quy trình lặp.

\[r_{t+1}[i, k] = \lambda\cdot r_{t}[i, k] + [1-\lambda]\cdot r_{t+1}[i, k]\]

\[a_{t+1}[i, k] = \lambda\cdot a_{t}[i, k] + [1-\lambda]\cdot a_{t+1}[i, k]\]

trong đó \[t\] cho biết thời gian lặp lại.

2. 3. 4. Ca trung bình¶

Phân cụm

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
25 nhằm mục đích khám phá các đốm màu trong mật độ mẫu mịn. Nó là một thuật toán dựa trên trọng tâm, hoạt động bằng cách cập nhật các ứng cử viên cho trọng tâm là giá trị trung bình của các điểm trong một khu vực nhất định. Những ứng cử viên này sau đó được lọc trong giai đoạn xử lý hậu kỳ để loại bỏ các bản sao gần như trùng lặp để tạo thành tập hợp các trọng tâm cuối cùng

Cho một ứng cử viên trọng tâm \[x_i\] để lặp lại \[t\], the candidate is updated according to the following equation:

\[x_i^{t+1} = m[x_i^t]\]

Ở đâu \[N[x_i]\] là vùng lân cận của các mẫu trong một khoảng cách nhất định xung quanh \[x_i\] and \[m\] is the mean shift vector that is computed for each centroid that points towards a region of the maximum increase in the density of points. This is computed using the following equation, effectively updating a centroid to be the mean of the samples within its neighborhood:

\[m[x_i] = \frac{\sum_{x_j \in N[x_i]}K[x_j - x_i]x_j}{\sum_{x_j \in N[x_i]}K[x_j - x_i]}\]

Thuật toán tự động đặt số lượng cụm, thay vì dựa vào tham số

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
26, cho biết kích thước của vùng cần tìm kiếm. Tham số này có thể được đặt thủ công, nhưng có thể được ước tính bằng cách sử dụng hàm
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
27 được cung cấp, được gọi nếu băng thông không được đặt

Thuật toán không có khả năng mở rộng cao, vì nó yêu cầu nhiều lần tìm kiếm hàng xóm gần nhất trong quá trình thực hiện thuật toán. Thuật toán được đảm bảo hội tụ, tuy nhiên thuật toán sẽ dừng lặp lại khi thay đổi về trọng tâm là nhỏ

Ghi nhãn một mẫu mới được thực hiện bằng cách tìm trọng tâm gần nhất cho một mẫu nhất định

ví dụ

  • Bản demo của thuật toán phân cụm dịch chuyển trung bình . Mean Shift phân cụm trên bộ dữ liệu 2D tổng hợp với 3 lớp.

Người giới thiệu

  • “Chuyển dịch trung bình. Một cách tiếp cận mạnh mẽ đối với phân tích không gian đặc trưng” D. Comaniciu và P. Meer, Giao dịch của IEEE về Phân tích mẫu và Máy thông minh [2002]

2. 3. 5. Phân cụm quang phổ¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
3 thực hiện nhúng ma trận ái lực có kích thước thấp giữa các mẫu, sau đó là phân cụm, e. g. , theo KMeans, của các thành phần của vectơ riêng trong không gian ít chiều. Nó đặc biệt hiệu quả về mặt tính toán nếu ma trận ái lực thưa thớt và bộ giải
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
29 được sử dụng cho bài toán giá trị riêng [Lưu ý, bộ giải
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
29 yêu cầu mô-đun pyamg được cài đặt. ]

The present version of SpectralClustering requires the number of clusters to be specified in advance. Nó hoạt động tốt đối với một số ít cụm, nhưng không được khuyên dùng cho nhiều cụm

Đối với hai cụm, SpectralClustering giải quyết vấn đề giãn lồi của bài toán cắt chuẩn hóa trên biểu đồ tương tự. cắt đồ thị thành hai để trọng số của các cạnh bị cắt nhỏ so với trọng số của các cạnh bên trong mỗi cụm. Tiêu chí này đặc biệt thú vị khi làm việc trên hình ảnh, trong đó các đỉnh của biểu đồ là các pixel và trọng số của các cạnh của biểu đồ tương tự được tính bằng hàm gradient của hình ảnh

Cảnh báo

Chuyển đổi khoảng cách thành những điểm tương đồng được cư xử tốt

Lưu ý rằng nếu các giá trị của ma trận tương tự của bạn không được phân phối tốt, e. g. với các giá trị âm hoặc với ma trận khoảng cách thay vì độ tương tự, bài toán quang phổ sẽ là số ít và bài toán không thể giải được. Trong trường hợp đó, nên áp dụng phép biến đổi cho các mục của ma trận. Chẳng hạn, trong trường hợp ma trận khoảng cách đã ký, người ta thường áp dụng hạt nhân nhiệt

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
3

Xem các ví dụ cho một ứng dụng như vậy

ví dụ

  • Phân cụm quang phổ để phân đoạn hình ảnh . Phân đoạn các đối tượng từ một nền nhiễu bằng cách sử dụng phân cụm quang phổ.

  • Phân đoạn bức tranh về đồng xu Hy Lạp theo khu vực . Phân cụm quang phổ để phân chia hình ảnh của đồng tiền theo vùng.

2. 3. 5. 1. Các chiến lược gán nhãn khác nhau¶

Có thể sử dụng các chiến lược gán nhãn khác nhau, tương ứng với tham số

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
41 của
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
3. Chiến lược
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
43 có thể phù hợp với các chi tiết tốt hơn, nhưng có thể không ổn định. Đặc biệt, trừ khi bạn kiểm soát
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
44, nó có thể không được sao chép từ lần chạy này sang lần chạy khác, vì nó phụ thuộc vào khởi tạo ngẫu nhiên. Chiến lược thay thế
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
45 có thể lặp lại 100%, nhưng có xu hướng tạo ra các bưu kiện có hình dạng hình học khá đồng đều. Tùy chọn
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
46 được thêm gần đây là một tùy chọn xác định có xu hướng tạo phân vùng trực quan tốt nhất trên ứng dụng ví dụ bên dưới

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
47

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
48

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
49

Người giới thiệu

  • “Phân cụm quang phổ đa lớp” Stella X. Yu, Jianbo Shi, 2003

  • “Phân cụm quang phổ đa chiều đơn giản, trực tiếp và hiệu quả” Anil Damle, Victor Minden, Lexing Ying, 2019

2. 3. 5. 2. Đồ thị phân cụm quang phổ¶

Phân cụm quang phổ cũng có thể được sử dụng để phân vùng biểu đồ thông qua các nhúng quang phổ của chúng. Trong trường hợp này, ma trận ái lực là ma trận kề của đồ thị và SpectralClustering được khởi tạo với

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
30

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
4

Người giới thiệu

  • “Hướng dẫn về phân cụm quang phổ” Ulrike von Luxburg, 2007

  • “Chuẩn hóa các vết cắt và phân đoạn hình ảnh” Jianbo Shi, Jitendra Malik, 2000

  • “A Random Walks View of Spectral Segmentation” Marina Meila, Jianbo Shi, 2001

  • “Về phân cụm quang phổ. Phân tích và thuật toán” Andrew Y. Ng, Micheal I. Jordan, Yair Weiss, 2001

  • “Phân cụm quang phổ được điều chỉnh trước cho Thử thách đồ thị phát trực tuyến phân vùng khối ngẫu nhiên” David Zhuzhunashvili, Andrew Knyazev

2. 3. 6. Phân cụm theo cấp bậc¶

Phân cụm theo thứ bậc là một họ chung của các thuật toán phân cụm xây dựng các cụm lồng nhau bằng cách hợp nhất hoặc tách chúng liên tiếp. Hệ thống phân cấp các cụm này được biểu diễn dưới dạng cây [hoặc dendrogram]. Gốc cây là cụm duy nhất tập hợp tất cả các mẫu, lá là cụm chỉ có một mẫu. Xem trang Wikipedia để biết thêm chi tiết

Đối tượng

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
31 thực hiện phân cụm theo cấp bậc bằng cách sử dụng cách tiếp cận từ dưới lên. mỗi quan sát bắt đầu trong cụm riêng của nó và các cụm được hợp nhất liên tiếp với nhau. Tiêu chí liên kết xác định số liệu được sử dụng cho chiến lược hợp nhất

  • Ward tối thiểu hóa tổng bình phương sự khác biệt trong tất cả các cụm. Đó là một cách tiếp cận giảm thiểu 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 cách tiếp cận phân cấp tổng hợp

  • Liên kết tối đa hoặc đầy đủ 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

  • 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

  • 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

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
31 cũng có thể mở rộng thành số lượng lớn mẫu khi nó được sử dụng cùng với ma trận kết nối, nhưng tốn kém về mặt tính toán khi không có ràng buộc kết nối nào được thêm vào giữa các mẫu. nó xem xét ở mỗi bước tất cả các hợp nhất có thể

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
33

____

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
33 sử dụng phân cụm kết tụ để nhóm các tính năng trông rất giống nhau lại với nhau, do đó làm giảm số lượng tính năng. Đây là công cụ giảm kích thước, xem Giảm kích thước không giám sát .

2. 3. 6. 1. Loại liên kết khác. Liên kết phường, hoàn chỉnh, trung bình và đơn lẻ¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
31 hỗ trợ các chiến lược liên kết Phường, đơn lẻ, trung bình và đầy đủ

Cụm kết tụ có hành vi “giàu càng giàu” dẫn đến kích thước cụm không đồng đều. Về vấn đề này, liên kết đơn lẻ là chiến lược tồi tệ nhất và Ward đưa ra các kích thước thông thường nhất. Tuy nhiên, mối quan hệ [hoặc khoảng cách được sử dụng trong phân cụm] không thể thay đổi với Ward, do đó, đối với các số liệu phi Euclide, liên kết trung bình là một lựa chọn thay thế tốt. Liên kết đơn, mặc dù không mạnh đối với dữ liệu nhiễu, nhưng có thể được tính toán rất hiệu quả và do đó có thể hữu ích để cung cấp phân cụm theo cấp bậc của các bộ dữ liệu lớn hơn. Liên kết đơn cũng có thể hoạt động tốt trên dữ liệu phi toàn cầu

ví dụ

  • Phân cụm kết tụ khác nhau khi nhúng các chữ số 2D . khám phá các chiến lược liên kết khác nhau trong một bộ dữ liệu thực.

2. 3. 6. 2. Trực quan hóa phân cấp cụm¶

Có thể hình dung cây đại diện cho sự hợp nhất theo thứ bậc của các cụm dưới dạng một dendrogram. Kiểm tra trực quan thường có thể hữu ích để hiểu cấu trúc của dữ liệu, mặc dù nhiều hơn thế trong trường hợp cỡ mẫu nhỏ

2. 3. 6. 3. Thêm hạn chế kết nối¶

Một khía cạnh thú vị của

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
31 là các ràng buộc kết nối có thể được thêm vào thuật toán này [chỉ các cụm liền kề mới có thể được hợp nhất với nhau], thông qua ma trận kết nối xác định cho từng mẫu các mẫu lân cận theo cấu trúc dữ liệu nhất định. Chẳng hạn, trong ví dụ cuộn swiss bên dưới, các ràng buộc kết nối cấm hợp nhất các điểm không liền kề trên cuộn swiss và do đó tránh hình thành các cụm kéo dài qua các nếp gấp chồng chéo của cuộn

Các ràng buộc này rất hữu ích để áp đặt một cấu trúc cục bộ nhất định, nhưng chúng cũng làm cho thuật toán nhanh hơn, đặc biệt khi số lượng mẫu cao

Các ràng buộc kết nối được áp đặt thông qua ma trận kết nối. một ma trận thưa thớt scipy chỉ có các phần tử ở giao điểm của một hàng và một cột với các chỉ số của tập dữ liệu sẽ được kết nối. Ma trận này có thể được xây dựng từ thông tin tiên nghiệm. chẳng hạn, bạn có thể muốn nhóm các trang web bằng cách chỉ hợp nhất các trang có liên kết trỏ từ trang này sang trang khác. Nó cũng có thể được học từ dữ liệu, chẳng hạn như sử dụng

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
37 để hạn chế hợp nhất với hàng xóm gần nhất như trong ví dụ này hoặc sử dụng
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
38 để chỉ cho phép hợp nhất . coin example.

ví dụ

  • A demo of structured Ward hierarchical clustering on an image of coins . Phân cụm phường để chia hình ảnh xu theo vùng miền.

  • Phân cụm theo thứ bậc. phường có cấu trúc và không có cấu trúc . Ví dụ về thuật toán Ward trên swiss-roll, so sánh các cách tiếp cận có cấu trúc so với các cách tiếp cận không có cấu trúc.

  • Tính năng tích tụ so với. lựa chọn đơn biến . Ví dụ về giảm kích thước với sự tích tụ tính năng dựa trên phân cụm theo cấp bậc Ward.

  • Cụm kết tụ có và không có cấu trúc

Cảnh báo

Ràng buộc kết nối với liên kết đơn, trung bình và đầy đủ

Các ràng buộc về kết nối và liên kết đơn lẻ, hoàn chỉnh hoặc trung bình có thể nâng cao khía cạnh 'giàu ngày càng giàu hơn' của phân cụm tổng hợp, đặc biệt nếu chúng được xây dựng bằng

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
37. Trong giới hạn của một số lượng nhỏ các cụm, chúng có xu hướng đưa ra một số cụm bị chiếm đóng ở cấp độ vĩ mô và các cụm gần như trống rỗng. [xem phần thảo luận trong Phân cụm kết tụ có và không có cấu trúc ]. Liên kết đơn là tùy chọn liên kết giòn nhất liên quan đến vấn đề này.

2. 3. 6. 4. Thay đổi chỉ số¶

Liên kết đơn, trung bình và đầy đủ có thể được sử dụng với nhiều khoảng cách [hoặc ái lực], đặc biệt là khoảng cách Euclide [l2], khoảng cách Manhattan [hoặc Cityblock, hoặc l1], khoảng cách cosin hoặc bất kỳ ma trận ái lực được tính toán trước nào

  • 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ôi. e. 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 gặp

  • khoảng cách cosin rất thú vị vì nó bất biến đối với tỷ lệ toàn cầu của tín hiệu

Nguyên tắc chọn số liệu là sử dụng một số liệu tối đa hóa khoảng cách giữa các mẫu trong các lớp khác nhau và giảm thiểu khoảng cách đó trong mỗi lớp

ví dụ

  • Phân cụm kết tụ với các số liệu khác nhau

2. 3. 6. 5. Phương tiện K chia đôi¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
400 là một biến thể lặp lại của
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64, sử dụng phân cụm theo thứ bậc phân chia. Thay vì tạo tất cả các trọng tâm cùng một lúc, các trọng tâm được chọn dần dần dựa trên phân cụm trước đó. một cụm được chia thành hai cụm mới nhiều lần cho đến khi đạt được số cụm mục tiêu

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
400 hiệu quả hơn
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 khi số lượng cụm lớn vì nó chỉ hoạt động trên một tập hợp con dữ liệu tại mỗi phần chia đôi trong khi
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 luôn hoạt động trên toàn bộ tập dữ liệu

Mặc dù theo thiết kế,

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
400 không thể hưởng lợi từ những lợi thế của việc khởi tạo
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
406, nhưng nó vẫn sẽ tạo ra kết quả tương đương với
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
407 về quán tính với chi phí tính toán rẻ hơn và có thể sẽ tạo ra kết quả tốt hơn so với
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 với khởi tạo ngẫu nhiên

Biến thể này hiệu quả hơn đối với phân cụm kết tụ nếu số lượng cụm nhỏ so với số lượng điểm dữ liệu

Biến thể này cũng không tạo ra các cụm trống

Có hai chiến lược để chọn cụm để tách
  • >>> 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...
    
    409 chọn cụm có nhiều điểm nhất

  • >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    410 chọn cụm có quán tính lớn nhất [cụm có Tổng lỗi bình phương lớn nhất bên trong]

Chọn theo số lượng điểm dữ liệu lớn nhất trong hầu hết các trường hợp tạo ra kết quả chính xác như chọn theo quán tính và nhanh hơn [đặc biệt đối với số lượng điểm dữ liệu lớn hơn, trong đó lỗi tính toán có thể tốn kém]

Chọn theo số lượng điểm dữ liệu lớn nhất cũng sẽ có khả năng tạo ra các cụm có kích thước tương tự trong khi

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
64 được biết là tạo ra các cụm có kích thước khác nhau

Có thể thấy sự khác biệt giữa K-Mean chia đôi và K-Means thông thường trong ví dụ So sánh hiệu suất K-Mean chia đôi và K-Means thông thường . Mặc dù thuật toán K-Means thông thường có xu hướng tạo các cụm không liên quan, nhưng các cụm từ K-Means Chia đôi được sắp xếp hợp lý và tạo ra một hệ thống phân cấp rõ ràng.

Người giới thiệu

  • “So sánh các kỹ thuật phân cụm tài liệu” Michael Steinbach, George Karypis và Vipin Kumar, Khoa Khoa học Máy tính và Kỹ thuật, Đại học Minnesota [tháng 6 năm 2000]

  • “Phân tích hiệu suất của K-Means và chia đôi thuật toán K-Means trong dữ liệu blog” K. Abirami và Tiến sĩ. P. Mayilvahanan, Tạp chí Quốc tế về Công nghệ Mới nổi trong Nghiên cứu Kỹ thuật [IJETER] Tập 4, Số 8, [Tháng 8 năm 2016]

  • “Thuật toán chia đôi phương tiện K dựa trên tối ưu hóa trung tâm phân cụm và tự xác định giá trị K” Jian Di, Trường Kiểm soát và Kỹ thuật Máy tính Xinyue Gou, Đại học Điện lực Bắc Trung Quốc, Bảo Định, Hà Bắc, Trung Quốc [tháng 8 năm 2017]

2. 3. 7. DBSCAN¶

Thuật toán

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
4 xem các cụm là các khu vực có mật độ cao được phân tách bằng các khu vực có mật độ thấp. Do chế độ xem khá chung chung này, các cụm được tìm thấy bởi DBSCAN có thể có hình dạng bất kỳ, trái ngược với phương tiện k giả định rằng các cụm có hình dạng lồi. Thành phần trung tâm của DBSCAN là khái niệm về các mẫu lõi, là các mẫu nằm trong khu vực có mật độ cao. Do đó, một cụm là một tập hợp các mẫu lõi, mỗi mẫu gần nhau [được đo bằng một số thước đo khoảng cách] và một tập hợp các mẫu không lõi gần với mẫu lõi [nhưng bản thân chúng không phải là mẫu lõi]. Có hai tham số cho thuật toán,
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
413 và
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414, xác định chính thức ý nghĩa của chúng tôi khi chúng tôi nói dày đặc.
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
413 cao hơn hoặc thấp hơn
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 cho thấy mật độ cao hơn cần thiết để tạo thành một cụm

Chính thức hơn, chúng tôi xác định mẫu lõi là một mẫu trong tập dữ liệu sao cho tồn tại

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
413 mẫu khác trong khoảng cách
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414, được định nghĩa là hàng xóm của mẫu lõi. Điều này cho chúng ta biết rằng mẫu lõi nằm trong vùng dày đặc của không gian vectơ. Một cụm là một tập hợp các mẫu lõi có thể được xây dựng bằng cách lấy đệ quy một mẫu lõi, tìm tất cả các mẫu lân cận của nó là các mẫu lõi, tìm tất cả các mẫu lân cận của chúng là các mẫu lõi, v.v. Một cụm cũng có một tập hợp các mẫu không phải lõi, là các mẫu là hàng xóm của một mẫu lõi trong cụm nhưng bản thân chúng không phải là mẫu lõi. Theo trực giác, những mẫu này nằm ở rìa của một cụm

Theo định nghĩa, bất kỳ mẫu lõi nào cũng là một phần của cụm. Bất kỳ mẫu nào không phải là mẫu lõi và cách bất kỳ mẫu lõi nào ít nhất là

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414, đều được coi là ngoại lệ theo thuật toán

Mặc dù tham số

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
413 chủ yếu kiểm soát mức độ chịu đựng của thuật toán đối với nhiễu [đối với tập dữ liệu lớn và nhiễu, có thể nên tăng tham số này], tham số
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 rất quan trọng để chọn phù hợp cho tập dữ liệu và chức năng khoảng cách và thường không thể bỏ qua . Nó kiểm soát vùng lân cận địa phương của các điểm. Khi được chọn quá nhỏ, hầu hết dữ liệu sẽ không được nhóm lại [và được gắn nhãn là
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
422 cho “tiếng ồn”]. Khi được chọn quá lớn, nó sẽ khiến các cụm gần được hợp nhất thành một cụm và cuối cùng toàn bộ tập dữ liệu được trả về dưới dạng một cụm duy nhất. Một số kinh nghiệm để chọn tham số này đã được thảo luận trong tài liệu, ví dụ dựa trên đầu gối trong biểu đồ khoảng cách lân cận gần nhất [như được thảo luận trong tài liệu tham khảo bên dưới]

Trong hình bên dưới, màu biểu thị tư cách thành viên cụm, với các vòng tròn lớn biểu thị các mẫu lõi được thuật toán tìm thấy. Các vòng tròn nhỏ hơn là các mẫu không phải lõi vẫn là một phần của cụm. Hơn nữa, các ngoại lệ được biểu thị bằng các điểm đen bên dưới

ví dụ

  • Demo thuật toán phân cụm DBSCAN

Thực hiện

Thuật toán DBSCAN mang tính xác định, luôn tạo ra các cụm giống nhau khi được cung cấp cùng một dữ liệu theo cùng một thứ tự. Tuy nhiên, kết quả có thể khác khi dữ liệu được cung cấp theo thứ tự khác. Đầu tiên, mặc dù các mẫu lõi sẽ luôn được gán cho cùng một cụm, nhãn của các cụm đó sẽ phụ thuộc vào thứ tự mà các mẫu đó gặp phải trong dữ liệu. Thứ hai và quan trọng hơn, các cụm mà các mẫu không phải lõi được chỉ định có thể khác nhau tùy thuộc vào thứ tự dữ liệu. Điều này sẽ xảy ra khi một mẫu không phải lõi có khoảng cách thấp hơn

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 đến hai mẫu lõi ở các cụm khác nhau. Theo bất đẳng thức tam giác, hai mẫu lõi đó phải cách xa nhau hơn
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 hoặc chúng sẽ ở trong cùng một cụm. Mẫu không phải lõi được chỉ định cho bất kỳ cụm nào được tạo trước khi truyền dữ liệu và do đó, kết quả sẽ phụ thuộc vào thứ tự dữ liệu

Việc triển khai hiện tại sử dụng cây bóng và cây kd để xác định vùng lân cận của các điểm, giúp tránh tính toán ma trận khoảng cách đầy đủ [như đã được thực hiện trong các phiên bản scikit-learning trước 0. 14]. Khả năng sử dụng số liệu tùy chỉnh được giữ lại;

Tiêu thụ bộ nhớ cho kích thước mẫu lớn

Việc triển khai này theo mặc định không hiệu quả về bộ nhớ vì nó xây dựng một ma trận tương tự theo cặp đầy đủ trong trường hợp không thể sử dụng cây kd hoặc cây bóng [e. g. , với ma trận thưa thớt]. Ma trận này sẽ sử dụng \[n^2\] float. Một vài cơ chế để giải quyết vấn đề này là.

  • Sử dụng OPTICS phân cụm kết hợp với phương pháp

    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    426. Phân cụm OPTICS cũng tính toán toàn bộ ma trận theo cặp, nhưng mỗi lần chỉ giữ một hàng trong bộ nhớ [độ phức tạp của bộ nhớ n].

  • Biểu đồ lân cận bán kính thưa thớt [trong đó các mục bị thiếu được cho là nằm ngoài eps] có thể được tính toán trước theo cách hiệu quả về bộ nhớ và có thể chạy dbscan trên biểu đồ này 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...
    
    427. Xem
    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    428

  • Tập dữ liệu có thể được nén bằng cách loại bỏ các bản trùng lặp chính xác nếu những bản sao này xảy ra trong dữ liệu của bạn hoặc bằng cách sử dụng BIRCH. Sau đó, bạn chỉ có một số lượng tương đối nhỏ các đại diện cho một số lượng lớn các điểm. Sau đó, bạn có thể cung cấp mộ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...
    
    67 khi lắp DBSCAN

Người giới thiệu

  • “Thuật toán dựa trên mật độ để khám phá các cụm trong cơ sở dữ liệu không gian lớn có tiếng ồn” Ester, M. , H. P. Kriegel, J. Sander và X. Xu, Trong Kỷ yếu của Hội nghị Quốc tế lần thứ 2 về Khám phá Tri thức và Khai thác Dữ liệu, Portland, OR, AAAI Press, trang. 226–231. 1996

  • “DBSCAN xem lại, xem lại. tại sao và làm thế nào bạn nên [vẫn] sử dụng DBSCAN. ” Schubert, E. , Sander, J. , este, M. , Kriegel, H. P. , & Xu, X. [2017]. Trong Giao dịch ACM trên Hệ thống cơ sở dữ liệu [TODS], 42[3], 19

2. 3. 8. QUANG HỌC¶

Thuật toán

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
430 có nhiều điểm tương đồng với thuật toán
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
4 và có thể được coi là sự tổng quát hóa của DBSCAN giúp nới lỏng yêu cầu
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 từ một giá trị thành một phạm vi giá trị. Sự khác biệt chính giữa DBSCAN và OPTICS là thuật toán OPTICS xây dựng một biểu đồ khả năng tiếp cận, chỉ định cho mỗi mẫu cả khoảng cách
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
433 và một vị trí trong thuộc tính cụm
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
434; . Nếu OPTICS được chạy với giá trị mặc định của inf được đặt cho
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
435, thì việc trích xuất cụm kiểu DBSCAN có thể được thực hiện lặp lại trong thời gian tuyến tính cho bất kỳ giá trị
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 đã cho nào bằng phương pháp
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
437. Đặt
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
435 thành giá trị thấp hơn sẽ dẫn đến thời gian chạy ngắn hơn và có thể được coi là bán kính lân cận tối đa từ mỗi điểm để tìm các điểm có thể tiếp cận tiềm năng khác

Khoảng cách khả năng tiếp cận do OPTICS tạo ra cho phép trích xuất mật độ thay đổi của các cụm trong một tập dữ liệu. Như được hiển thị trong biểu đồ trên, việc kết hợp khoảng cách có thể tiếp cận và tập dữ liệu

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
434 tạo ra một biểu đồ về khả năng tiếp cận, trong đó mật độ điểm được biểu thị trên trục Y và các điểm được sắp xếp theo thứ tự sao cho các điểm lân cận liền kề nhau. 'Cắt' biểu đồ khả năng tiếp cận ở một giá trị duy nhất tạo ra kết quả giống như DBSCAN; . Trích xuất cụm mặc định với OPTICS xem xét độ dốc lớn trong biểu đồ để tìm cụm và người dùng có thể xác định độ dốc lớn bằng cách sử dụng tham số
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
440. Ngoài ra còn có các khả năng khác để phân tích trên chính biểu đồ, chẳng hạn như tạo các biểu diễn dữ liệu theo thứ bậc thông qua các biểu đồ dendrogram khả năng tiếp cận và hệ thống phân cấp của các cụm được phát hiện bởi thuật toán có thể được truy cập thông qua tham số
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
441. Biểu đồ trên đã được mã hóa màu sao cho các màu của cụm trong không gian phẳng khớp với các cụm phân đoạn tuyến tính của biểu đồ khả năng tiếp cận. Lưu ý rằng các cụm màu xanh lam và đỏ nằm liền kề trong biểu đồ khả năng tiếp cận và có thể được biểu thị theo thứ bậc dưới dạng con của cụm mẹ lớn hơn

ví dụ

  • Demo thuật toán phân cụm OPTICS

So sánh với DBSCAN

Các kết quả từ phương pháp OPTICS

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
437 và DBSCAN rất giống nhau, nhưng không phải lúc nào cũng giống nhau; . Điều này một phần là do các mẫu đầu tiên của từng khu vực dày đặc được OPTICS xử lý có giá trị khả năng tiếp cận lớn trong khi ở gần các điểm khác trong khu vực của chúng và do đó đôi khi sẽ được đánh dấu là nhiễu thay vì ngoại vi. Điều này ảnh hưởng đến các điểm liền kề khi chúng được coi là ứng cử viên để được đánh dấu là ngoại vi hoặc nhiễu

Lưu ý rằng đối với bất kỳ giá trị duy nhất nào của

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414, DBSCAN sẽ có xu hướng có thời gian chạy ngắn hơn so với OPTICS; . Cũng cần lưu ý rằng đầu ra của OPTICS chỉ gần với DBSCAN nếu
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
414 và
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
435 gần nhau

Độ phức tạp tính toán

Cây chỉ mục không gian được sử dụng để tránh tính toán ma trận khoảng cách đầy đủ và cho phép sử dụng bộ nhớ hiệu quả trên các tập hợp mẫu lớn. Các số liệu khoảng cách khác nhau có thể được cung cấp thông qua từ khóa

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
447

Đối với các bộ dữ liệu lớn, có thể thu được kết quả tương tự [nhưng không giống hệt nhau] qua HDBSCAN. Việc triển khai HDBSCAN là đa luồng và có độ phức tạp thời gian chạy thuật toán tốt hơn so với OPTICS, với chi phí mở rộng bộ nhớ kém hơn. Đối với các tập dữ liệu cực lớn làm cạn kiệt bộ nhớ hệ thống khi sử dụng HDBSCAN, OPTICS sẽ duy trì \[n\] [trái ngược với . ] memory scaling; however, tuning of the

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
435 parameter will likely need to be used to give a solution in a reasonable amount of wall time.

Người giới thiệu

  • “QUANG HỌC. sắp xếp các điểm để xác định cấu trúc phân cụm. ” Ankerst, Mihael, Markus M. Breunig, Hans-Peter Kriegel và Jörg Sander. Trong Bản ghi ACM Sigmod, tập. 28, không. 2, trang. 49-60. ĐHCĐ, 1999

2. 3. 9. BIRCH¶

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
449 xây dựng một cây có tên là Cây tính năng phân cụm [CFT] cho dữ liệu đã cho. Dữ liệu về cơ bản được nén không mất dữ liệu thành một tập hợp các nút Tính năng phân cụm [Nút CF]. Các Nút CF có một số cụm con được gọi là Cụm con Tính năng Phân cụm [CF Subcluster] và các Cụm con CF này nằm trong Nút CF không đầu cuối có thể có Nút CF là con

Các cụm con CF giữ thông tin cần thiết để phân cụm, điều này ngăn cản nhu cầu giữ toàn bộ dữ liệu đầu vào trong bộ nhớ. Thông tin này bao gồm

  • Số lượng mẫu trong một nhóm con

  • Tổng tuyến tính - Một vectơ n chiều chứa 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 tuyến tính/n_samples

  • Định mức bình phương của trọng tâm

Thuật toán BIRCH có hai tham số là ngưỡng và hệ số phân nhánh. Hệ số phân nhánh giới hạn số lượng cụm con trong một nút và ngưỡng giới hạn khoảng cách giữa mẫu đang vào và các cụm con hiện có

Thuật toán này có thể được xem như một thể hiện hoặc phương pháp giảm dữ liệu, vì nó giảm dữ liệu đầu vào thành một tập hợp các cụm con được lấy trực tiếp từ các lá của CFT. Dữ liệu giảm này có thể được xử lý thêm bằng cách đưa nó vào một cụm toàn cầu. Bộ phân cụm toàn cầu này có thể được đặt bởi

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8. Nếu
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
8 được đặt thành Không, thì các cụm con từ các lá sẽ được đọc trực tiếp, nếu không, bước phân cụm toàn cầu sẽ gắn nhãn các cụm con này thành các cụm [nhãn] toàn cầu và các mẫu được ánh xạ tới nhãn toàn cầu của cụm con gần nhất

Mô tả thuật toán

  • 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 cụm con của gốc, có bán kính nhỏ nhất sau khi hợp nhất, bị hạn chế bởi ngưỡng và điều kiện hệ số phân nhánh. Nếu cụm con có bất kỳ nút con nào, thì điều này được thực hiện lặp đi lặp lại cho đến khi nó đạt đến một lá. Sau khi tìm thấy cụm con gần nhất trong lá, các thuộc tính của cụm con này và cụm con cha được cập nhật đệ quy

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

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

BIRCH hay MiniBatchKMeans?

  • BIRCH không mở rộng quy mô rất tốt cho dữ liệu nhiều chiều. Theo nguyên tắc thông thường 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...
    
    452 lớn hơn 20, thì thường tốt hơn là sử dụng MiniBatchKMeans

  • Nếu số lượng phiên bản dữ liệu cần giảm hoặc nếu một người muốn có một số lượng lớn các cụm con dưới dạng bước tiền xử lý hoặc cách khác, thì BIRCH sẽ hữu ích hơn MiniBatchKMeans

Làm cách nào để sử dụng một phần_fit?

Để tránh tính toán phân cụm toàn cầu, đối với mọi cuộc gọi của

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
453, người dùng nên

  1. Để đặ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...
    
    454 ban đầu

  2. Huấn luyện tất cả dữ liệu bằng nhiều lệnh 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...
    
    8 thành giá trị bắt buộc bằng cách sử dụng
    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    456

  4. Gọ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...
    
    453 cuối cùng mà không có đối số, tôi. e.
    >>> 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...
    
    458 thực hiện phân cụm toàn cầu

Người giới thiệu

  • Tian Zhang, Raghu Ramakrishnan, Maron Livny BIRCH. Một phương pháp phân cụm dữ liệu hiệu quả cho cơ sở dữ liệu lớn. https. //www. cs. sfu. ca/CourseCentral/459/han/papers/zhang96. pdf

  • Roberto Perdisci JBirch - Java triển khai thuật toán phân cụm BIRCH https. //mã số. Google. com/archive/p/jbirch

2. 3. 10. Đánh giá hiệu suất phân cụm¶

Đánh giá hiệu suất của thuật toán phân cụm không đơn giản như đếm số lỗi hoặc độ chính xác và thu hồi của thuật toán phân loại được giám sát. Cụ thể, bất kỳ số liệu đánh giá nào cũng không nên tính đến các giá trị tuyệt đối của nhãn cụm mà thay vào đó, nếu việc phân cụm này xác định các phân tách dữ liệu tương tự như một số tập hợp sự thật cơ bản của các lớp hoặc đáp ứng một số giả định sao cho các thành viên thuộc cùng một lớp giống nhau hơn

2. 3. 10. 1. Chỉ số Rand¶

Dựa trên kiến ​​thức về các phép gán của lớp sự thật cơ bản

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
459 và các phép gán thuật toán phân cụm của chúng tôi cho cùng một mẫu
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
460, chỉ số Rand [đã điều chỉnh hoặc chưa điều chỉnh] là một hàm đo lường mức độ giống nhau của hai phép gán, bỏ qua các hoán vị

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
25

Chỉ số Rand không đảm bảo đạt giá trị gần bằng 0. 0 cho một nhãn ngẫu nhiên. Chỉ số Rand được điều chỉnh sửa chữa theo cơ hội và sẽ đưa ra đường cơ sở như vậy

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...

Như với tất cả các số liệu phân cụm, người ta có thể hoán vị 0 và 1 trong các nhãn được dự đoán, đổi tên 2 thành 3 và nhận được cùng một số điểm

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...

Hơn nữa, cả hai

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
461
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
462 đều đối xứng. hoán đổi đối số không thay đổi điểm số. Do đó, chúng có thể được sử dụng như các biện pháp đồng thuận

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
30

Dán nhãn hoàn hảo được chấm điểm 1. 0

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
6

Nhãn đồng ý kém [e. g. independent labelings] have lower scores, and for the adjusted Rand index the score will be negative or close to zero. Tuy nhiên, đối với chỉ số Rand chưa được điều chỉnh, điểm số, trong khi thấp hơn, sẽ không nhất thiết phải gần bằng không

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
2

2. 3. 10. 1. 1. Advantages¶

  • Interpretability. The unadjusted Rand index is proportional to the number of sample pairs whose labels are the same in both

    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    460 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...
    
    459, or are different in both

  • Random [uniform] label assignments have an adjusted Rand index score close to 0. 0 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...
    
    8 and
    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    7 [which is not the case for the unadjusted Rand index or the V-measure for instance]

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

  • No assumption is made on the cluster structure. 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. Drawbacks¶

  • Contrary to inertia, the [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]

    However [adjusted or unadjusted] Rand index can also be useful in a purely unsupervised setting as a building block for a Consensus Index that can be used for clustering model selection [TODO]

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

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

ví dụ

  • Adjustment for chance in clustering performance evaluation . Analysis of the impact of the dataset size on the value of clustering measures for random assignments.

2. 3. 10. 1. 3. Mathematical formulation¶

If C is a ground truth class assignment and K the clustering, let us define \[a\] and \[b\] as.

  • \[a\] , the number of pairs of elements that are in the same set in C and in the same set in K

  • \[b\] , the number of pairs of elements that are in different sets in C and in different sets in K

The unadjusted Rand index is then given by

\[\text{RI} = \frac{a + b}{C_2^{n_{samples}}}\]

where \[C_2^{n_{samples}}\] is the total number of possible pairs in the dataset. It does not matter if the calculation is performed on ordered pairs or unordered pairs as long as the calculation is performed consistently.

However, the Rand index does not guarantee that random label assignments will get a value close to zero [esp. if the number of clusters is in the same order of magnitude as the number of samples]

Để chống lại hiệu ứng này, chúng ta có thể chiết khấu RI dự kiến ​​ \[E[\text{RI}]\] của các nhãn ngẫu nhiên bằng cách xác định .

\[\text{ARI} = \frac{\text{RI} - E[\text{RI}]}{\max[\text{RI}] - E[\text{RI}]}\]

References

  • Comparing Partitions L. Hubert and P. Arabie, Journal of Classification 1985

  • Properties of the Hubert-Arabie adjusted Rand index D. Steinley, Psychological Methods 2004

  • Wikipedia entry for the Rand index

  • Wikipedia entry for the adjusted Rand index

2. 3. 10. 2. Mutual Information based scores¶

Given the knowledge of the ground truth class assignments

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
459 and our clustering algorithm assignments of the same samples
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
460, the Mutual Information is a function that measures the agreement of the two assignments, ignoring permutations. Two different normalized versions of this measure are available, Normalized Mutual Information [NMI] and Adjusted Mutual Information [AMI]. NMI is often used in the literature, while AMI was proposed more recently and is normalized against chance

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
4

One can permute 0 and 1 in the predicted labels, rename 2 to 3 and get the same score

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
3

All,

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
470,
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
471 and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
472 are symmetric. swapping the argument does not change the score. Thus they can be used as a consensus measure

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
40

Dán nhãn hoàn hảo được chấm điểm 1. 0

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
41

This is not true for

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
470, which is therefore harder to judge

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
42

Bad [e. g. independent labelings] have non-positive scores

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
43

2. 3. 10. 2. 1. Advantages¶

  • Random [uniform] label assignments have a AMI score close to 0. 0 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...
    
    8 and
    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    7 [which is not the case for raw Mutual Information or the V-measure for instance]

  • Upper bound of 1. 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. Drawbacks¶

  • Contrary to inertia, 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]

    However MI-based measures can also be useful in purely unsupervised setting as a building block for a Consensus Index that can be used for clustering model selection

  • NMI and MI are not adjusted against chance

ví dụ

  • Adjustment for chance in clustering performance evaluation . Analysis of the impact of the dataset size on the value of clustering measures for random assignments. This example also includes the Adjusted Rand Index.

2. 3. 10. 2. 3. Mathematical formulation¶

Assume two label assignments [of the same N objects], \[U\] and \[V\] . Their entropy is the amount of uncertainty for a partition set, defined by.

\[H[U] = - \sum_{i=1}^{. U. }P[i]\log[P[i]]\]

ở đâu \[P[i] =. U_i. / N\] là xác suất để một đối tượng được chọn ngẫu nhiên từ \[U\] rơi vào lớp < . Tương tự như vậy cho \[U_i\]. Likewise for \[V\] .

\[H[V] = - \sum_{j=1}^{. V. }P'[j]\log[P'[j]]\]

With \[P'[j] = . V_j. / N\] . The mutual information [MI] between \[U\] and \[V\] is calculated by.

\[\text{MI}[U, V] = \sum_{i=1}^{. U. }\sum_{j=1}^{. V. }P[i, j]\log\left[\frac{P[i,j]}{P[i]P'[j]}\right]\]

where \[P[i, j] = . U_i \cap V_j. / N\] is the probability that an object picked at random falls into both classes \[U_i\] and \[V_j\] .

It also can be expressed in set cardinality formulation

\[\text{MI}[U, V] = \sum_{i=1}^{. U. } \sum_{j=1}^{. V. } \frac{. U_i \cap V_j. }{N}\log\left[\frac{N. U_i \cap V_j. }{. U_i. V_j. }\right]\]

The normalized mutual information is defined as

\[\text{NMI}[U, V] = \frac{\text{MI}[U, V]}{\text{mean}[H[U], H[V]]}\]

This value of the mutual information and also the normalized variant is not adjusted for chance and will tend to increase as the number of different labels [clusters] increases, regardless of the actual amount of “mutual information” between the label assignments

The expected value for the mutual information can be calculated using the following equation [VEB2009] . In this equation, \[a_i = . U_i. \] [the number of elements in \[U_i\] ] and \[b_j = . V_j. \] [the number of elements in \[V_j\] ].

\[E[\text{MI}[U,V]]=\sum_{i=1}^{. U. } \sum_{j=1}^{. V. } \sum_{n_{ij}=[a_i+b_j-N]^+ }^{\min[a_i, b_j]} \frac{n_{ij}}{N}\log \left[ \frac{ N. n_{ij}}{a_i b_j}\right] \frac{a_i. b_j. [N-a_i]. [N-b_j]. }{N. n_{ij}. [a_i-n_{ij}]. [b_j-n_{ij}]. [N-a_i-b_j+n_{ij}]. }\]

Using the expected value, the adjusted mutual information can then be calculated using a similar form to that of the adjusted Rand index

\[\text{AMI} = \frac{\text{MI} - E[\text{MI}]}{\text{mean}[H[U], H[V]] - E[\text{MI}]}\]

For normalized mutual information and adjusted mutual information, the normalizing value is typically some generalized mean of the entropies of each clustering. Có nhiều phương tiện tổng quát khác nhau và không có quy tắc vững chắc nào tồn tại để ưu tiên cái này hơn cái kia. The decision is largely a field-by-field basis; for instance, in community detection, the arithmetic mean is most common. Each normalizing method provides “qualitatively similar behaviours” [YAT2016] . In our implementation, this is controlled by the

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
476 parameter.

Vinh et al. [2010] named variants of NMI and AMI by their averaging method [VEB2010] . Their ‘sqrt’ and ‘sum’ averages are the geometric and arithmetic means; we use these more broadly common names.

References

  • Strehl, Alexander, and Joydeep Ghosh [2002]. “Cluster ensembles – a knowledge reuse framework for combining multiple partitions”. Journal of Machine Learning Research 3. 583–617. doi. 10. 1162/153244303321897735

  • Wikipedia entry for the [normalized] Mutual Information

  • Wikipedia entry for the Adjusted Mutual Information

[ VEB2009 ]

Vinh, Epps, and Bailey, [2009]. “Information theoretic measures for clusterings comparison”. Proceedings of the 26th Annual International Conference on Machine Learning - ICML ‘09. doi. 10. 1145/1553374. 1553511. ISBN 9781605585161

[ VEB2010 ]

Vinh, Epps, and Bailey, [2010]. “Information Theoretic Measures for Clusterings Comparison: Variants, Properties, Normalization and Correction for Chance”. JMLR

[ YAT2016 ]

Yang, Algesheimer, and Tessone, [2016]. “A comparative analysis of community detection algorithms on artificial networks”. Scientific Reports 6. 30750. doi. 10. 1038/srep30750

2. 3. 10. 3. Tính đồng nhất, đầy đủ và thước đo chữ V¶

Với kiến ​​thức về các bài tập lớp sự thật cơ bản của các mẫu, có thể xác định một số số liệu trực quan bằng cách sử dụng phân tích entropy có điều kiện

In particular Rosenberg and Hirschberg [2007] define the following two desirable objectives for any cluster assignment

  • homogeneity. each cluster contains only members of a single class

  • completeness. all members of a given class are assigned to the same cluster

We can turn those concept as scores

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
477 and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
478. Both are bounded below by 0. 0 and above by 1. 0 [higher is better]

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
44

Giá trị trung bình điều hòa của chúng được gọi là thước đo V được tính bằng

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
479

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
45

This function’s formula is as follows

\[v = \frac{[1 + \beta] \times \text{homogeneity} \times \text{completeness}}{[\beta \times \text{homogeneity} + \text{completeness}]}\]

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
480 defaults to a value of 1. 0, but for using a value less than 1 for beta

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
46

more weight will be attributed to homogeneity, and using a value greater than 1

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
47

more weight will be attributed to completeness

The V-measure is actually equivalent to the mutual information [NMI] discussed above, with the aggregation function being the arithmetic mean [B2011] .

Homogeneity, completeness and V-measure can be computed at once using

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
481 as follows

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
48

The following clustering assignment is slightly better, since it is homogeneous but not complete

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
49

Note

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
479 is symmetric. it can be used to evaluate the agreement of two independent assignments on the same dataset

This is not the case for

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
478 and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
477. both are bound by the relationship

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
250

2. 3. 10. 3. 1. Advantages¶

  • Bounded scores. 0. 0 is as bad as it can be, 1. 0 is a perfect score

  • Intuitive interpretation. clustering with bad V-measure can be 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. 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. Drawbacks¶

  • The previously introduced metrics are 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

    This problem can safely be ignored when the number of samples is more than a thousand and the number of clusters is less than 10. For smaller sample sizes or larger number of clusters it is safer to use an adjusted index such as the Adjusted Rand Index [ARI]

  • These metrics 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]

ví dụ

  • Adjustment for chance in clustering performance evaluation . Analysis of the impact of the dataset size on the value of clustering measures for random assignments.

2. 3. 10. 3. 3. Mathematical formulation¶

Homogeneity and completeness scores are formally given by

\[h = 1 - \frac{H[C. K]}{H[C]}\]

\[c = 1 - \frac{H[K. C]}{H[K]}\]

where \[H[C. K]\] is the conditional entropy of the classes given the cluster assignments and is given by.

\[H[C. K] = - \sum_{c=1}^{. C. } \sum_{k=1}^{. K. } \frac{n_{c,k}}{n} \cdot \log\left[\frac{n_{c,k}}{n_k}\right]\]

and \[H[C]\] is the entropy of the classes and is given by.

\[H[C] = - \sum_{c=1}^{. C. } \frac{n_c}{n} \cdot \log\left[\frac{n_c}{n}\right]\]

with \[n\] the total number of samples, \[n_c\] and \[n_k\] the number of samples respectively belonging to class \[c\] and cluster \[k\] , and finally \[n_{c,k}\] the number of samples from class \[c\] assigned to cluster \[k\] .

The conditional entropy of clusters given class \[H[K. C]\] and the entropy of clusters \[H[K]\] are defined in a symmetric manner.

Rosenberg and Hirschberg further define V-measure as the harmonic mean of homogeneity and completeness

\[v = 2 \cdot \frac{h \cdot c}{h + c}\]

References

  • V-Measure. A conditional entropy-based external cluster evaluation measure Andrew Rosenberg and Julia Hirschberg, 2007

[ B2011 ]

Identication and Characterization of Events in Social Media, Hila Becker, PhD Thesis

2. 3. 10. 4. Fowlkes-Mallows scores¶

The Fowlkes-Mallows index [

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
485] can be used when the ground truth class assignments of the samples is known. The Fowlkes-Mallows score FMI is defined as the geometric mean of the pairwise precision and recall

\[\text{FMI} = \frac{\text{TP}}{\sqrt{[\text{TP} + \text{FP}] [\text{TP} + \text{FN}]}}\]

Where

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
486 is the number of True Positive [i. e. the number of pair of points that belong to the same clusters in both the true labels and the predicted labels],
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
487 is the number of False Positive [i. e. the number of pair of points that belong to the same clusters in the true labels and not in the predicted labels] and
>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
488 is the number of False Negative [i. e the number of pair of points that belongs in the same clusters in the predicted labels and not in the true labels]

The score ranges from 0 to 1. A high value indicates a good similarity between two clusters

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
251

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
252

One can permute 0 and 1 in the predicted labels, rename 2 to 3 and get the same score

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
253

Dán nhãn hoàn hảo được chấm điểm 1. 0

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
254

Bad [e. g. ghi nhãn độc lập] không có điểm

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
255

2. 3. 10. 4. 1. Advantages¶

  • Việc gán nhãn ngẫu nhiên [đồng nhất] có điểm FMI gần bằng 0. 0 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...
    
    8 and
    >>> labels_pred = [1, 1, 0, 0, 3, 3]
    >>> metrics.rand_score[labels_true, labels_pred]
    0.66...
    >>> metrics.adjusted_rand_score[labels_true, labels_pred]
    0.24...
    
    7 [which is not the case for raw Mutual Information or the V-measure for instance]

  • Upper-bounded at 1. 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. 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ế¶

  • Trái ngược với quán tính, các biện pháp dựa trên FMI yêu cầu kiến ​​thức về các lớp sự thật cơ bản trong khi hầu như không có sẵn trong thực tế hoặc yêu cầu gán thủ công bởi người chú thích con người [như trong cài đặt học tập có giám sát]

References

  • E. b. Fowles và C. L. Bụt, 1983. “Một phương pháp để so sánh hai cụm phân cấp”. Tạp chí của Hiệp hội Thống kê Hoa Kỳ. https. //www. tandfonline. com/doi/abs/10. 1080/01621459. 1983. 10478008

  • Mục nhập Wikipedia cho Chỉ mục Fowlkes-Mallows

2. 3. 10. 5. Hệ số bóng¶

Nếu không biết nhãn sự thật cơ bản, việc đánh giá phải được thực hiện bằng chính mô hình. Hệ số Hình bóng [_______5491] là một ví dụ về đánh giá như vậy, trong đó điểm Hệ số Hình bóng cao hơn liên quan đến một mô hình có các cụm được xác định rõ hơn. Hệ số Silhouette được xác định cho từng mẫu và bao gồm hai điểm

  • 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

  • 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

Hệ số Silhouette s cho một mẫu đơn sau đó được đưa ra là

\[s = \frac{b - a}{max[a, b]}\]

Hệ số Hình bóng cho một tập hợp các mẫu được coi là giá trị trung bình của Hệ số Hình bóng cho mỗi mẫu

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
256

Trong cách sử dụng bình thường, Hệ số Silhouette được áp dụng cho kết quả phân tích cụm

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
257

References

  • Peter J. Rousseeuw [1987]. “Bóng. Hỗ trợ đồ họa cho việc diễn giải và xác thực phân tích cụm”. Toán học và Toán ứng dụng 20. 53–65

2. 3. 10. 5. 1. Ưu điểm¶

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

  • Điểm cao hơn khi các cụm dày đặc và tách biệt tốt, liên quan đến khái niệm tiêu chuẩn về cụm

2. 3. 10. 5. 2. Hạn chế¶

  • Hệ số Silhouette 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ụm, chẳng hạn như các cụm dựa trên mật độ giống như các cụm thu được thông qua DBSCAN

ví dụ

  • Chọn số cụm có phân tích hình bóng trên phân cụm KMeans . Trong ví dụ này, phân tích hình bóng được sử dụng để chọn giá trị tối ưu cho n_cluster.

2. 3. 10. 6. Chỉ số Calinski-Harabasz¶

Nếu không biết nhãn sự thật cơ bản, thì chỉ số Calinski-Harabasz [

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
492] - còn được gọi là Tiêu chí tỷ lệ phương sai - có thể được sử dụng để đánh giá mô hình, trong đó điểm Calinski-Harabasz cao hơn liên quan đến mô hình có các cụm được xác định rõ hơn

Chỉ số là tỷ lệ của tổng độ phân tán giữa các cụm và độ phân tán bên trong cụm cho tất cả các cụm [trong đó độ phân tán được định nghĩa là tổng bình phương khoảng cách]

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
256

Trong cách sử dụng bình thường, chỉ số Calinski-Harabasz được áp dụng cho kết quả phân tích cụm

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
259

2. 3. 10. 6. 1. Ưu điểm¶

  • Điểm cao hơn khi các cụm dày đặc và tách biệt tốt, liên quan đến khái niệm tiêu chuẩn về cụm

  • Điểm số được tính toán nhanh chóng

2. 3. 10. 6. 2. Hạn chế¶

  • Chỉ số Calinski-Harabasz đối với các cụm lồi thường cao hơn so với các khái niệm khác về cụm, chẳng hạn như các cụm dựa trên mật độ giống như các cụm thu được thông qua DBSCAN

2. 3. 10. 6. 3. Công thức toán học¶

For a set of data \[E\] of size \[n_E\] which has been clustered into \[k\] clusters, the Calinski-Harabasz score \[s\] is defined as the ratio of the between-clusters dispersion mean and the within-cluster dispersion.

\[s = \frac{\mathrm{tr}[B_k]}{\mathrm{tr}[W_k]} \times \frac{n_E - k}{k - 1}\]

where \[\mathrm{tr}[B_k]\] is trace of the between group dispersion matrix and \[\mathrm{tr}[W_k]\] is the trace of the within-cluster dispersion matrix defined by.

\[W_k = \sum_{q=1}^k \sum_{x \in C_q} [x - c_q] [x - c_q]^T\]

\[B_k = \sum_{q=1}^k n_q [c_q - c_E] [c_q - c_E]^T\]

with \[C_q\] the set of points in cluster \[q\] , \[c_q\] the center of cluster \[q\] , \[c_E\] the center of \[E\] , and \[n_q\] the number of points in cluster \[q\] .

References

  • Caliński, T. , & Harabasz, J. [1974]. “A Dendrite Method for Cluster Analysis”. Communications in Statistics-theory and Methods 3. 1-27

2. 3. 10. 7. Davies-Bouldin Index¶

If the ground truth labels are not known, the Davies-Bouldin index [

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
493] can be used to evaluate the model, where a lower Davies-Bouldin index relates to a model with better separation between the clusters

This index signifies the average ‘similarity’ between clusters, where the similarity is a measure that compares the distance between clusters with the size of the clusters themselves

Zero is the lowest possible score. Values closer to zero indicate a better partition

In normal usage, the Davies-Bouldin index is applied to the results of a cluster analysis as follows

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
0

2. 3. 10. 7. 1. Ưu điểm¶

  • The computation of Davies-Bouldin is simpler than that of Silhouette scores

  • The index is solely based on quantities and features inherent to the dataset as its computation only uses point-wise distances

2. 3. 10. 7. 2. Hạn chế¶

  • Chỉ số Davies-Boulding đối với các cụm lồi thường cao hơn so với các khái niệm khác về cụm, chẳng hạn như các cụm dựa trên mật độ như các cụm thu được từ DBSCAN

  • Việc sử dụng khoảng cách centroid giới hạn số liệu khoảng cách với không gian Euclide

2. 3. 10. 7. 3. Công thức toán học¶

Chỉ số được định nghĩa là mức độ tương đồng trung bình giữa mỗi cụm \[C_i\] cho \ . , k\] và cái tương tự nhất của nó \[C_j\] . Trong ngữ cảnh của chỉ số này, sự tương đồng được định nghĩa là thước đo \[R_{ij}\] đánh đổi.

  • \[s_i\] , khoảng cách trung bình giữa mỗi điểm của cụm \[i\] and the centroid of that cluster – also know as cluster diameter.

  • \[d_{ij}\] , khoảng cách giữa các trọng tâm cụm \[i\] and \[j\].

Một lựa chọn đơn giản để xây dựng \[R_{in}\] so that it is nonnegative and symmetric is:

\[R_{ij} = \frac{s_i + s_j}{d_{ij}}\]

Sau đó, chỉ số Davies-Bouldin được định nghĩa là

\[DB = \frac{1}{k} \sum_{i=1}^k \max_{i \neq j} R_{ij}\]

References

  • Davies, David L. ; . [1979]. “Đo lường phân tách cụm” Giao dịch của IEEE về Phân tích mẫu và Trí thông minh của máy. PAMI-1 [2]. 224-227

  • Halkidi, Maria; . “Về các kỹ thuật xác thực phân cụm” Tạp chí Hệ thống thông tin thông minh, 17[2-3], 107-145

  • Mục nhập Wikipedia cho chỉ mục Davies-Bouldin

2. 3. 10. 8. Ma trận dự phòng¶

Ma trận dự phòng [

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
494] báo cáo lực lượng giao nhau cho mỗi cặp cụm đúng/dự đoán. Ma trận dự phòng cung cấp số liệu thống kê đầy đủ cho tất cả các số liệu phân cụm trong đó các mẫu độc lập và được phân phối giống hệt nhau và không cần tính đến một số trường hợp không được phân cụm

Đây là một ví dụ

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
1

Hàng đầu tiên của mảng đầu ra chỉ ra rằng có ba mẫu có cụm thực sự là “a”. Trong số đó, 2 người thuộc cụm 0 được dự đoán, một người thuộc nhóm 1 và không có người nào thuộc nhóm 2. Và hàng thứ hai chỉ ra rằng có ba mẫu có cụm thực sự là “b”. Trong số đó, không có cái nào ở cụm dự đoán 0, một cái ở cụm 1 và hai cái ở cụm 2

A ma trận nhầm lẫn để phân loại là một ma trận ngẫu nhiên vuông trong đó thứ tự của các hàng và cột tương ứng với một danh sách các lớp.

2. 3. 10. 8. 1. Ưu điểm¶

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

  • Bảng dự phòng được tính toán thường được sử dụng để tính toán thống kê tương tự [giống như các thống kê 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ế¶

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

  • Nó không đưa ra một chỉ số nào để sử dụng làm mục tiêu cho việc tối ưu hóa phân cụm

References

  • Mục nhập Wikipedia cho ma trận dự phòng

2. 3. 10. 9. Ma trận nhầm lẫn ghép nối¶

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

>>> labels_pred = [1, 1, 0, 0, 3, 3]
>>> metrics.rand_score[labels_true, labels_pred]
0.66...
>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
495] là ma trận tương tự 2x2

\[\begin{split}C = \left[\begin{matrix} C_{00} & C_{01} \\ C_{10} & C_{11} \end{matrix}\right]\end{split}

giữa hai cụm được tính toán bằng cách xem xét tất cả các cặp mẫu và đếm các cặp được chỉ định vào cùng một cụm hoặc vào các cụm khác nhau theo cụm đúng và dự đoán

Nó có các mục sau

\[C_{00}\] . số cặp với cả hai cụm có các mẫu không được nhóm lại với nhau

\[C_{10}\] . số cặp với phân cụm nhãn thực sự có các mẫu được phân cụm cùng nhau nhưng phân cụm khác không có các mẫu được phân cụm cùng nhau

\[C_{01}\] . số cặp có cụm nhãn thực sự không có các mẫu được nhóm lại với nhau nhưng cụm khác có các mẫu được nhóm lại với nhau

\[C_{11}\] . số cặp với cả hai cụm có các mẫu được nhóm lại với nhau

Xét một cặp mẫu được nhóm lại với nhau thành một cặp dương tính, thì giống như trong phân loại nhị phân, số lượng âm tính thực sự là \[C_{00}\], false negatives is \[C_{10}\], true positives is \[C_{11}\] and false positives is \[C_{01}\].

Nhãn phù hợp hoàn hảo có tất cả các mục khác không trên đường chéo bất kể giá trị nhãn thực tế

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
2

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
3

Các nhãn gán tất cả các thành viên của lớp cho cùng một cụm đã hoàn thành nhưng có thể không phải lúc nào cũng thuần túy, do đó bị phạt và có một số mục nhập khác không theo đường chéo

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
4

Ma trận không đối xứng

>>> metrics.adjusted_rand_score[labels_true, labels_pred]
0.24...
5

Nếu các thành viên của lớp được phân chia hoàn toàn trên các cụm khác nhau, thì phép gán hoàn toàn không đầy đủ, do đó ma trận có tất cả các mục có đường chéo bằng 0

Chủ Đề