Hướng dẫn how does python implement k - python thực hiện như thế nào k

Phương pháp phân cụm K-MEAN là một kỹ thuật học máy không được giám sát được sử dụng để xác định các cụm đối tượng dữ liệu trong bộ dữ liệu. Có nhiều loại phương pháp phân cụm khác nhau, nhưng K-MEAN là một trong những phương pháp lâu đời nhất và dễ tiếp cận nhất. Những đặc điểm này làm cho việc thực hiện các phương tiện K trong Python hợp lý đơn giản, ngay cả đối với các lập trình viên mới làm quen và các nhà khoa học dữ liệu.k-means clustering method is an unsupervised machine learning technique used to identify clusters of data objects in a dataset. There are many different types of clustering methods, but k-means is one of the oldest and most approachable. These traits make implementing k-means clustering in Python reasonably straightforward, even for novice programmers and data scientists.

Nếu bạn quan tâm đến việc tìm hiểu cách thức và thời điểm thực hiện phân cụm K-MEAN trong Python, thì đây là nơi thích hợp. Bạn sẽ đi qua một ví dụ từ đầu đến cuối về phân cụm K-MEAN bằng cách sử dụng Python, từ tiền xử lý dữ liệu đến đánh giá kết quả.

Trong hướng dẫn này, bạn sẽ học:

  • Phân cụm có nghĩa là gìk-means clustering is
  • Khi nào nên sử dụng phân cụm K-means để phân tích dữ liệu của bạnanalyze your data
  • Cách thực hiện phân cụm K-MEAN trong Python với Scikit-Learnscikit-learn
  • Cách chọn một số cụm có ý nghĩameaningful number of clusters

Nhấp vào liên kết bên dưới để tải xuống mã bạn sẽ sử dụng để theo dõi cùng với các ví dụ trong hướng dẫn này và thực hiện đường ống phân cụm K-MEAN của riêng bạn:

Phân cụm là gì?

Phân cụm là một tập hợp các kỹ thuật được sử dụng để phân vùng dữ liệu thành các nhóm hoặc cụm. Các cụm được định nghĩa một cách lỏng lẻo là các nhóm đối tượng dữ liệu giống với các đối tượng khác trong cụm của chúng so với các đối tượng dữ liệu trong các cụm khác. Trong thực tế, phân cụm giúp xác định hai phẩm chất của dữ liệu:Clusters are loosely defined as groups of data objects that are more similar to other objects in their cluster than they are to data objects in other clusters. In practice, clustering helps identify two qualities of data:

  1. Ý nghĩa
  2. Hữu ích

Các cụm có ý nghĩa mở rộng kiến ​​thức miền. Ví dụ, trong lĩnh vực y tế, các nhà nghiên cứu đã áp dụng phân cụm vào các thí nghiệm biểu hiện gen. Các kết quả phân cụm đã xác định các nhóm bệnh nhân phản ứng khác nhau với các phương pháp điều trị y tế. clusters expand domain knowledge. For example, in the medical field, researchers applied clustering to gene expression experiments. The clustering results identified groups of patients who respond differently to medical treatments.

Các cụm hữu ích, mặt khác, phục vụ như một bước trung gian trong một đường ống dữ liệu. Ví dụ, các doanh nghiệp sử dụng phân cụm cho phân khúc khách hàng. Các phân khúc kết quả phân cụm khách hàng thành các nhóm có lịch sử mua hàng tương tự, sau đó các doanh nghiệp có thể sử dụng để tạo ra các chiến dịch quảng cáo được nhắm mục tiêu. clusters, on the other hand, serve as an intermediate step in a data pipeline. For example, businesses use clustering for customer segmentation. The clustering results segment customers into groups with similar purchase histories, which businesses can then use to create targeted advertising campaigns.

Có nhiều ứng dụng khác của phân cụm, chẳng hạn như phân cụm tài liệu và phân tích mạng xã hội. Các ứng dụng này có liên quan trong gần như mọi ngành công nghiệp, biến phân cụm thành một kỹ năng có giá trị cho các chuyên gia làm việc với dữ liệu trong bất kỳ lĩnh vực nào.

Tổng quan về các kỹ thuật phân cụm

Bạn có thể thực hiện phân cụm bằng cách sử dụng nhiều cách tiếp cận khác nhau, rất nhiều, trên thực tế, có toàn bộ các loại thuật toán phân cụm. Mỗi loại này có điểm mạnh và điểm yếu độc đáo của riêng mình. Điều này có nghĩa là các thuật toán phân cụm nhất định sẽ dẫn đến các phân công cụm tự nhiên hơn tùy thuộc vào dữ liệu đầu vào.

Chọn một thuật toán phân cụm phù hợp cho bộ dữ liệu của bạn thường khó khăn do số lượng lựa chọn có sẵn. Một số yếu tố quan trọng ảnh hưởng đến quyết định này bao gồm các đặc điểm của các cụm, các tính năng của bộ dữ liệu, số lượng ngoại lệ và số lượng đối tượng dữ liệu.

Bạn có thể khám phá cách các yếu tố này giúp xác định phương pháp nào phù hợp nhất bằng cách xem xét ba loại thuật toán phân cụm phổ biến:

  1. Phân cụm phân vùng
  2. Phân cụm phân cấp
  3. Phân cụm dựa trên mật độ

Nó đáng để xem xét các danh mục này ở cấp độ cao trước khi nhảy ngay vào K-MEAN. Bạn sẽ học được những điểm mạnh và điểm yếu của từng loại để cung cấp bối cảnh cho cách K-MEAN phù hợp với cảnh quan của các thuật toán phân cụm.

Phân cụm phân vùng

Phân cụm phân chia phân chia các đối tượng dữ liệu thành các nhóm không chồng chéo. Nói cách khác, không có đối tượng nào có thể là thành viên của nhiều hơn một cụm và mọi cụm phải có ít nhất một đối tượng. divides data objects into nonoverlapping groups. In other words, no object can be a member of more than one cluster, and every cluster must have at least one object.

Các kỹ thuật này yêu cầu người dùng chỉ định số lượng cụm, được biểu thị bằng biến k. Nhiều thuật toán phân cụm phân vùng hoạt động thông qua một quy trình lặp để gán các tập hợp con của các điểm dữ liệu vào các cụm K. Hai ví dụ về thuật toán phân cụm phân vùng là K-MEANS và K-MEDOIDS.

Các thuật toán này đều có tính không theo chủ nghĩa không, có nghĩa là chúng có thể tạo ra kết quả khác nhau từ hai lần chạy riêng biệt ngay cả khi các lần chạy dựa trên cùng một đầu vào.nondeterministic, meaning they could produce different results from two separate runs even if the runs were based on the same input.

Phương pháp phân cụm phân vùng có một số điểm mạnh:strengths:

  • Chúng hoạt động tốt khi các cụm có hình dạng hình cầu.spherical shape.
  • Họ có thể mở rộng đối với sự phức tạp của thuật toán.scalable with respect to algorithm complexity.

Họ cũng có một số điểm yếu:weaknesses:

  • Họ không phù hợp với các cụm có hình dạng phức tạp và các kích cỡ khác nhau.complex shapes and different sizes.
  • Chúng bị hỏng khi được sử dụng với các cụm có mật độ khác nhau.densities.

Phân cụm phân cấp

Phân cụm phân cấp xác định các bài tập cụm bằng cách xây dựng một hệ thống phân cấp. Điều này được thực hiện bởi cách tiếp cận từ dưới lên hoặc từ trên xuống: determines cluster assignments by building a hierarchy. This is implemented by either a bottom-up or a top-down approach:

  • Phân cụm kết tụ là cách tiếp cận từ dưới lên. Nó hợp nhất hai điểm giống nhau nhất cho đến khi tất cả các điểm được hợp nhất thành một cụm duy nhất. is the bottom-up approach. It merges the two points that are the most similar until all points have been merged into a single cluster.

  • Cụm phân chia là cách tiếp cận từ trên xuống. Nó bắt đầu với tất cả các điểm như một cụm và chia các cụm ít tương tự nhất ở mỗi bước cho đến khi chỉ còn lại các điểm dữ liệu. is the top-down approach. It starts with all points as one cluster and splits the least similar clusters at each step until only single data points remain.

Các phương pháp này tạo ra một hệ thống phân cấp các điểm dựa trên cây được gọi là dendrogram. Tương tự như phân cụm phân vùng, trong phân cụm phân cấp, số lượng cụm (k) thường được người dùng xác định trước. Các cụm được chỉ định bằng cách cắt dendrogram ở độ sâu được chỉ định dẫn đến các nhóm K của dendrogram nhỏ hơn.dendrogram. Similar to partitional clustering, in hierarchical clustering the number of clusters (k) is often predetermined by the user. Clusters are assigned by cutting the dendrogram at a specified depth that results in k groups of smaller dendrograms.

Không giống như nhiều kỹ thuật phân cụm phân vùng, phân cụm phân cấp là một quá trình xác định, có nghĩa là các phân công cụm đã giành được thay đổi khi bạn chạy một thuật toán hai lần trên cùng một dữ liệu đầu vào.deterministic process, meaning cluster assignments won’t change when you run an algorithm twice on the same input data.

Điểm mạnh của các phương pháp phân cụm phân cấp bao gồm các phương pháp sau:strengths of hierarchical clustering methods include the following:

  • Họ thường tiết lộ các chi tiết tốt hơn về các mối quan hệ giữa các đối tượng dữ liệu.relationships between data objects.
  • Họ cung cấp một dendrogram có thể hiểu được.interpretable dendrogram.

Các điểm yếu của các phương pháp phân cụm phân cấp bao gồm các phương pháp sau:weaknesses of hierarchical clustering methods include the following:

  • Họ tính toán đắt tiền liên quan đến sự phức tạp của thuật toán.computationally expensive with respect to algorithm complexity.
  • Họ nhạy cảm với tiếng ồn và ngoại lệ.noise and outliers.

Phân cụm dựa trên mật độ

Phân cụm dựa trên mật độ xác định các phân công cụm dựa trên mật độ của các điểm dữ liệu trong một khu vực. Các cụm được chỉ định trong đó có mật độ cao của các điểm dữ liệu được phân tách bằng các vùng mật độ thấp. determines cluster assignments based on the density of data points in a region. Clusters are assigned where there are high densities of data points separated by low-density regions.

Không giống như các danh mục phân cụm khác, phương pháp này không yêu cầu người dùng chỉ định số lượng cụm. Thay vào đó, có một tham số dựa trên khoảng cách hoạt động như một ngưỡng có thể điều chỉnh. Ngưỡng này xác định mức độ gần phải được coi là thành viên cụm.

Ví dụ về các thuật toán phân cụm dựa trên mật độ bao gồm phân cụm không gian dựa trên mật độ của các ứng dụng có nhiễu hoặc DBSCAN và các điểm đặt hàng để xác định cấu trúc phân cụm hoặc quang học.DBSCAN, and Ordering Points To Identify the Clustering Structure, or OPTICS.

Điểm mạnh của các phương pháp phân cụm dựa trên mật độ bao gồm các phương pháp sau:strengths of density-based clustering methods include the following:

  • Họ xuất sắc trong việc xác định các cụm có hình dạng không hình.nonspherical shapes.
  • Họ chống lại các ngoại lệ.outliers.

Điểm yếu của các phương pháp phân cụm dựa trên mật độ bao gồm các phương pháp sau:weaknesses of density-based clustering methods include the following:

  • Chúng rất phù hợp để phân cụm trong không gian chiều cao.high-dimensional spaces.
  • Họ gặp khó khăn trong việc xác định các cụm có mật độ khác nhau.varying densities.

Cách thực hiện phân cụm K-means trong Python

Trong phần này, bạn sẽ thực hiện một chuyến tham quan từng bước của phiên bản thông thường của thuật toán K-Means. Hiểu các chi tiết của thuật toán là một bước cơ bản trong quá trình viết đường ống phân cụm K-MEAN của bạn bằng Python. Những gì bạn học trong phần này sẽ giúp bạn quyết định xem K-Means có phải là lựa chọn đúng đắn để giải quyết vấn đề phân cụm của bạn hay không.

Hiểu thuật toán K-MEAN

M-MEANS thông thường chỉ yêu cầu một vài bước. Bước đầu tiên là chọn ngẫu nhiên K Centroids, trong đó K bằng số lượng cụm bạn chọn. Centroid là các điểm dữ liệu đại diện cho trung tâm của một cụm.Centroids are data points representing the center of a cluster.

Yếu tố chính của thuật toán hoạt động theo quy trình hai bước gọi là tối đa hóa kỳ vọng. Bước kỳ vọng chỉ định từng điểm dữ liệu cho tâm gần nhất của nó. Sau đó, bước tối đa hóa tính toán giá trị trung bình của tất cả các điểm cho mỗi cụm và đặt centroid mới. Ở đây, những gì phiên bản thông thường của thuật toán K-Means trông giống như:expectation-maximization. The expectation step assigns each data point to its nearest centroid. Then, the maximization step computes the mean of all the points for each cluster and sets the new centroid. Here’s what the conventional version of the k-means algorithm looks like:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

Chất lượng của các phân công cụm được xác định bằng cách tính tổng số lỗi bình phương (SSE) sau khi Centroids hội tụ hoặc khớp với bài tập lặp lại trước đó. SSE được định nghĩa là tổng của khoảng cách Euclide bình phương của mỗi điểm đến tâm gần nhất của nó. Vì đây là thước đo lỗi, mục tiêu của K-MEAN là cố gắng giảm thiểu giá trị này.sum of the squared error (SSE) after the centroids converge, or match the previous iteration’s assignment. The SSE is defined as the sum of the squared Euclidean distances of each point to its closest centroid. Since this is a measure of error, the objective of k-means is to try to minimize this value.

Hình dưới đây cho thấy Centroid và SSE cập nhật qua năm lần lặp đầu tiên từ hai lần chạy khác nhau của thuật toán K-MEANS trên cùng một bộ dữ liệu:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

Mục đích của con số này là để chỉ ra rằng việc khởi tạo các centroid là một bước quan trọng. Nó cũng nhấn mạnh việc sử dụng SSE như một thước đo hiệu suất phân cụm. Sau khi chọn một số cụm và trung tâm ban đầu, bước tối đa hóa kỳ vọng được lặp lại cho đến khi các vị trí trung tâm đạt được sự hội tụ và không thay đổi.

Bước khởi tạo ngẫu nhiên khiến thuật toán MEANS có nghĩa là không rõ ràng, có nghĩa là các bài tập cụm sẽ thay đổi nếu bạn chạy cùng một thuật toán hai lần trên cùng một bộ dữ liệu. Các nhà nghiên cứu thường chạy một số khởi tạo của toàn bộ thuật toán K-MEAN và chọn các bài tập cụm từ việc khởi tạo với SSE thấp nhất.nondeterministic, meaning that cluster assignments will vary if you run the same algorithm twice on the same dataset. Researchers commonly run several initializations of the entire k-means algorithm and choose the cluster assignments from the initialization with the lowest SSE.

Viết mã phân cụm M-MEAN đầu tiên của bạn bằng Python

Rất may, có một triển khai mạnh mẽ của K-Means phân cụm trong Python từ Gói máy học phổ biến Gói Scikit-Learn. Bạn có thể học cách viết một triển khai thực tế của thuật toán K-Means bằng cách sử dụng phiên bản Scikit-Learn của thuật toán.

Mã trong hướng dẫn này yêu cầu một số gói Python bên ngoài phổ biến và giả định rằng bạn đã cài đặt Python với Anaconda. Để biết thêm thông tin về việc thiết lập môi trường Python của bạn để học máy trong Windows, hãy đọc qua thiết lập Python để học máy trên Windows.

Nếu không, bạn có thể bắt đầu bằng cách cài đặt các gói yêu cầu:

(base) $ conda install matplotlib numpy pandas seaborn scikit-learn ipython
(base) $ conda install -c conda-forge kneed

Mã được trình bày để bạn có thể theo dõi trong bảng điều khiển

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
7 hoặc máy tính xách tay Jupyter. Nhấp vào lời nhắc (
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
8) ở trên cùng bên phải của mỗi khối mã để xem mã được định dạng để sao chép-dán. Bạn cũng có thể tải xuống mã nguồn được sử dụng trong bài viết này bằng cách nhấp vào liên kết bên dưới:

Bước này sẽ nhập các mô -đun cần thiết cho tất cả các mã trong phần này:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler

Bạn có thể tạo dữ liệu từ GIF trên bằng

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

  • In [5]: scaler = StandardScaler()
       ...: scaled_features = scaler.fit_transform(features)
    
    1 là tổng số mẫu để tạo.
    is the total number of samples to generate.
  • In [5]: scaler = StandardScaler()
       ...: scaled_features = scaler.fit_transform(features)
    
    2 là số lượng trung tâm để tạo.
    is the number of centers to generate.
  • In [5]: scaler = StandardScaler()
       ...: scaled_features = scaler.fit_transform(features)
    
    3 là độ lệch chuẩn.
    is the standard deviation.

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Trả về một bộ ba giá trị:

  1. Một mảng numpy hai chiều với giá trị x và y cho mỗi mẫux- and y-values for each of the samples
  2. Một mảng numpy một chiều chứa nhãn cụm cho mỗi mẫucluster labels for each sample

Tạo dữ liệu tổng hợp và nhãn:

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )

Bạn có thể tạo dữ liệu từ GIF trên bằng

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
1 là tổng số mẫu để tạo.

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])

Bạn có thể tạo dữ liệu từ GIF trên bằng

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
1 là tổng số mẫu để tạo.

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
2 là số lượng trung tâm để tạo.feature scaling. It’s an important data preprocessing step for most distance-based machine learning algorithms because it can have a significant impact on the performance of your algorithm.

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
3 là độ lệch chuẩn.

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Trả về một bộ ba giá trị:standardization. Standardization scales, or shifts, the values for each numerical feature in your dataset so that the features have a mean of 0 and standard deviation of 1:

>>>

Bạn có thể tạo dữ liệu từ GIF trên bằng
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
1 là tổng số mẫu để tạo.

>>>

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])

Bạn có thể tạo dữ liệu từ GIF trên bằng

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
1 là tổng số mẫu để tạo.

  • In [5]: scaler = StandardScaler()
       ...: scaled_features = scaler.fit_transform(features)
    
    2 là số lượng trung tâm để tạo. controls the initialization technique. The standard version of the k-means algorithm is implemented by setting
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    2 to
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    4. Setting this to
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    5 employs an advanced trick to speed up convergence, which you’ll use later.

  • In [5]: scaler = StandardScaler()
       ...: scaled_features = scaler.fit_transform(features)
    
    3 là độ lệch chuẩn. sets k for the clustering step. This is the most important parameter for k-means.

  • In [3]: features[:5]
    Out[3]:
    array([[  9.77075874,   3.27621022],
           [ -9.71349666,  11.27451802],
           [ -6.91330582,  -9.34755911],
           [-10.86185913, -10.75063497],
           [ -8.50038027,  -4.54370383]])
    
    In [4]: true_labels[:5]
    Out[4]: array([1, 0, 2, 2, 2])
    
    9 Trả về một bộ ba giá trị: sets the number of initializations to perform. This is important because two runs can converge on different cluster assignments. The default behavior for the scikit-learn algorithm is to perform ten k-means runs and return the results of the one with the lowest SSE.

  • Một mảng numpy hai chiều với giá trị x và y cho mỗi mẫu sets the number of maximum iterations for each initialization of the k-means algorithm.

Một mảng numpy một chiều chứa nhãn cụm cho mỗi mẫu

>>>

Bạn có thể tạo dữ liệu từ GIF trên bằng
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
1 là tổng số mẫu để tạo.

>>>

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)

Bạn có thể tạo dữ liệu từ GIF trên bằng

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9, hàm tiện lợi trong scikit-learn được sử dụng để tạo các cụm tổng hợp.
In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
9 Sử dụng các tham số này:

>>>

In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6

Cuối cùng, các bài tập cụm được lưu trữ dưới dạng mảng numpy một chiều trong

In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
4. Ở đây, một cái nhìn về năm nhãn dự đoán đầu tiên:

>>>

In [12]: kmeans.labels_[:5]
Out[12]: array([0, 1, 2, 2, 2], dtype=int32)

Lưu ý rằng thứ tự của nhãn cụm cho hai đối tượng dữ liệu đầu tiên được lật. Thứ tự là

In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
5 trong
In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
6 nhưng
In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
7 trong
In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
4 mặc dù các đối tượng dữ liệu đó vẫn là thành viên của các cụm ban đầu của chúng trong
In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
9.

Hành vi này là bình thường, vì thứ tự của các nhãn cụm phụ thuộc vào việc khởi tạo. Cụm 0 từ lần chạy đầu tiên có thể được gắn nhãn 1 trong lần chạy thứ hai và ngược lại. Điều này không ảnh hưởng đến các số liệu đánh giá phân cụm.

Chọn số lượng cụm thích hợp

Trong phần này, bạn sẽ xem xét hai phương pháp thường được sử dụng để đánh giá số lượng cụm thích hợp:

  1. Phương pháp khuỷu tayelbow method
  2. Hệ số hình bóngsilhouette coefficient

Chúng thường được sử dụng làm kỹ thuật đánh giá bổ sung hơn là một kỹ thuật khác được ưa thích hơn cái kia. Để thực hiện phương thức khuỷu tay, hãy chạy một số K-MEAN, tăng

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 với mỗi lần lặp và ghi lại SSE:elbow method, run several k-means, increment
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 with each iteration, and record the SSE:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
0

Khối mã trước đó đã sử dụng toán tử giải nén từ điển Python (

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
1). Để tìm hiểu thêm về nhà điều hành Python mạnh mẽ này, hãy xem cách lặp lại thông qua một từ điển trong Python.

Khi bạn vẽ SSE như là một hàm của số lượng cụm, hãy lưu ý rằng SSE tiếp tục giảm khi bạn tăng

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0. Khi nhiều tâm được thêm vào, khoảng cách từ mỗi điểm đến tâm gần nhất của nó sẽ giảm.

Có một điểm ngọt ngào nơi đường cong SSE bắt đầu uốn cong được gọi là điểm khuỷu tay. Giá trị X của điểm này được cho là sự đánh đổi hợp lý giữa lỗi và số lượng cụm. Trong ví dụ này, khuỷu tay được đặt tại

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
3:elbow point. The x-value of this point is thought to be a reasonable trade-off between error and number of clusters. In this example, the elbow is located at
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
3:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
1

Mã trên tạo ra biểu đồ sau:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

Xác định điểm khuỷu tay trong đường cong SSE không phải lúc nào cũng đơn giản. Nếu bạn gặp khó khăn trong việc chọn điểm khuỷu tay của đường cong, thì bạn có thể sử dụng gói Python, KKEED, để xác định điểm khuỷu tay theo chương trình:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
2

Hệ số hình bóng là thước đo sự gắn kết và phân tách cụm. Nó định lượng mức độ một điểm dữ liệu phù hợp với cụm được chỉ định của nó dựa trên hai yếu tố:silhouette coefficient is a measure of cluster cohesion and separation. It quantifies how well a data point fits into its assigned cluster based on two factors:

  1. Làm thế nào gần điểm dữ liệu với các điểm khác trong cụm
  2. Bao xa điểm dữ liệu từ các điểm trong các cụm khác

Giá trị hệ số hình bóng nằm trong khoảng từ

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
4 và
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
5. Số lượng lớn hơn chỉ ra rằng các mẫu gần với các cụm của chúng hơn so với các cụm khác.

Trong việc triển khai Scikit-LEARN của hệ số hình bóng, hệ số hình bóng trung bình của tất cả các mẫu được tóm tắt thành một điểm. Hàm

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
6 cần tối thiểu hai cụm hoặc nó sẽ tăng một ngoại lệ.

Vòng lặp qua các giá trị của

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 một lần nữa. Lần này, thay vì tính toán SSE, hãy tính toán hệ số hình bóng:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
3

Vẽ các điểm số bóng trung bình cho mỗi

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 cho thấy sự lựa chọn tốt nhất cho
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 là
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
0 vì nó có điểm tối đa:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
4

Mã trên tạo ra biểu đồ sau:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

Xác định điểm khuỷu tay trong đường cong SSE không phải lúc nào cũng đơn giản. Nếu bạn gặp khó khăn trong việc chọn điểm khuỷu tay của đường cong, thì bạn có thể sử dụng gói Python, KKEED, để xác định điểm khuỷu tay theo chương trình:

Hệ số hình bóng là thước đo sự gắn kết và phân tách cụm. Nó định lượng mức độ một điểm dữ liệu phù hợp với cụm được chỉ định của nó dựa trên hai yếu tố:

Làm thế nào gần điểm dữ liệu với các điểm khác trong cụmground truth labels. Ground truth labels categorize data points into groups based on assignment by a human or an existing algorithm. These types of metrics do their best to suggest the correct number of clusters but can be deceiving when used without context.

Bao xa điểm dữ liệu từ các điểm trong các cụm khác

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
5

Giá trị hệ số hình bóng nằm trong khoảng từ

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
4 và
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
5. Số lượng lớn hơn chỉ ra rằng các mẫu gần với các cụm của chúng hơn so với các cụm khác.

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
6

Trong việc triển khai Scikit-LEARN của hệ số hình bóng, hệ số hình bóng trung bình của tất cả các mẫu được tóm tắt thành một điểm. Hàm

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
6 cần tối thiểu hai cụm hoặc nó sẽ tăng một ngoại lệ.

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
7

Vòng lặp qua các giá trị của

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 một lần nữa. Lần này, thay vì tính toán SSE, hãy tính toán hệ số hình bóng:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
8

Vẽ các điểm số bóng trung bình cho mỗi

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 cho thấy sự lựa chọn tốt nhất cho
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
0 là
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
0 vì nó có điểm tối đa:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

Điều này cho thấy rằng bạn cần một phương pháp tốt hơn để so sánh hiệu suất của hai thuật toán phân cụm này.

Nếu bạn quan tâm, bạn có thể tìm thấy mã cho biểu đồ trên bằng cách mở rộng hộp bên dưới.

Để tìm hiểu thêm về âm mưu với matplotlib và python, hãy xem Python âm mưu với matplotlib (Hướng dẫn). Tại đây, cách bạn có thể vẽ đồ thị so sánh hai thuật toán trong ví dụ Crescent Moons:

>>>

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
9

Vì các nhãn sự thật mặt đất được biết đến, nên nó có thể sử dụng một số liệu phân cụm xem xét các nhãn trong đánh giá của mình. Bạn có thể sử dụng triển khai Scikit-LEARN của một số liệu chung có tên là Chỉ số RAND (ARI) được điều chỉnh. Không giống như hệ số hình bóng, ARI sử dụng các gán cụm thực sự để đo lường sự tương đồng giữa các nhãn true và dự đoán.adjusted rand index (ARI). Unlike the silhouette coefficient, the ARI uses true cluster assignments to measure the similarity between true and predicted labels.

So sánh kết quả phân cụm của DBSCAN và K-MEAN sử dụng ARI làm số liệu hiệu suất:

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
0

Vì các nhãn sự thật mặt đất được biết đến, nên nó có thể sử dụng một số liệu phân cụm xem xét các nhãn trong đánh giá của mình. Bạn có thể sử dụng triển khai Scikit-LEARN của một số liệu chung có tên là Chỉ số RAND (ARI) được điều chỉnh. Không giống như hệ số hình bóng, ARI sử dụng các gán cụm thực sự để đo lường sự tương đồng giữa các nhãn true và dự đoán.

So sánh kết quả phân cụm của DBSCAN và K-MEAN sử dụng ARI làm số liệu hiệu suất:

Các giá trị đầu ra ARI nằm trong khoảng từ

In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
4 và
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
5. Một điểm gần với
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
4 cho thấy các bài tập ngẫu nhiên và điểm gần với
In [8]: kmeans.fit(scaled_features)
Out[8]:
KMeans(init='random', n_clusters=3, random_state=42)
5 cho thấy các cụm được dán nhãn hoàn hảo.

Dựa trên đầu ra ở trên, bạn có thể thấy rằng hệ số hình bóng là sai lệch. ARI cho thấy DBSCAN là lựa chọn tốt nhất cho ví dụ crescents tổng hợp so với K-MEAN.

Có một số số liệu đánh giá chất lượng của các thuật toán phân cụm. Đọc thông qua các triển khai trong Scikit-learn sẽ giúp bạn chọn một số liệu đánh giá phân cụm phù hợp.

Cách xây dựng một đường ống phân cụm có nghĩa là Python

Bây giờ bạn có một sự hiểu biết cơ bản về phân cụm K-MEAN trong Python, đã đến lúc thực hiện phân cụm K-Mean trên một bộ dữ liệu trong thế giới thực. Những dữ liệu này chứa các giá trị biểu hiện gen từ một bản thảo được tác giả bởi các nhà điều tra dự án phân tích ung thư Genome Atlas (TCGA).

In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
6 mẫu (hàng) đại diện cho năm loại phụ ung thư riêng biệt. Mỗi mẫu có giá trị biểu hiện gen cho các gen
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
7 (cột). Bộ dữ liệu có sẵn từ kho lưu trữ máy học UC Irvine, nhưng bạn có thể sử dụng mã Python bên dưới để có được dữ liệu theo chương trình.

Để làm theo cùng với các ví dụ bên dưới, bạn có thể tải xuống mã nguồn bằng cách nhấp vào liên kết sau:

Trong phần này, bạn sẽ xây dựng một đường ống phân cụm K-Mean mạnh mẽ. Vì bạn sẽ thực hiện nhiều phép biến đổi của dữ liệu đầu vào ban đầu, đường ống của bạn cũng sẽ đóng vai trò là một khung phân cụm thực tế.

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
1

Vì các nhãn sự thật mặt đất được biết đến, nên nó có thể sử dụng một số liệu phân cụm xem xét các nhãn trong đánh giá của mình. Bạn có thể sử dụng triển khai Scikit-LEARN của một số liệu chung có tên là Chỉ số RAND (ARI) được điều chỉnh. Không giống như hệ số hình bóng, ARI sử dụng các gán cụm thực sự để đo lường sự tương đồng giữa các nhãn true và dự đoán.

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
2

Vì các nhãn sự thật mặt đất được biết đến, nên nó có thể sử dụng một số liệu phân cụm xem xét các nhãn trong đánh giá của mình. Bạn có thể sử dụng triển khai Scikit-LEARN của một số liệu chung có tên là Chỉ số RAND (ARI) được điều chỉnh. Không giống như hệ số hình bóng, ARI sử dụng các gán cụm thực sự để đo lường sự tương đồng giữa các nhãn true và dự đoán.

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
3

So sánh kết quả phân cụm của DBSCAN và K-MEAN sử dụng ARI làm số liệu hiệu suất:helper function to load the data from the text file into memory as NumPy arrays:

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
4

Vì các nhãn sự thật mặt đất được biết đến, nên nó có thể sử dụng một số liệu phân cụm xem xét các nhãn trong đánh giá của mình. Bạn có thể sử dụng triển khai Scikit-LEARN của một số liệu chung có tên là Chỉ số RAND (ARI) được điều chỉnh. Không giống như hệ số hình bóng, ARI sử dụng các gán cụm thực sự để đo lường sự tương đồng giữa các nhãn true và dự đoán.

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
5

Vì các nhãn sự thật mặt đất được biết đến, nên nó có thể sử dụng một số liệu phân cụm xem xét các nhãn trong đánh giá của mình. Bạn có thể sử dụng triển khai Scikit-LEARN của một số liệu chung có tên là Chỉ số RAND (ARI) được điều chỉnh. Không giống như hệ số hình bóng, ARI sử dụng các gán cụm thực sự để đo lường sự tương đồng giữa các nhãn true và dự đoán.

So sánh kết quả phân cụm của DBSCAN và K-MEAN sử dụng ARI làm số liệu hiệu suất:

  • Các giá trị đầu ra ARI nằm trong khoảng từ
    In [8]: kmeans.fit(scaled_features)
    Out[8]:
    KMeans(init='random', n_clusters=3, random_state=42)
    
    4 và
    In [8]: kmeans.fit(scaled_features)
    Out[8]:
    KMeans(init='random', n_clusters=3, random_state=42)
    
    5. Một điểm gần với
    In [9]: # The lowest SSE value
       ...: kmeans.inertia_
    Out[9]: 74.57960106819854
    
    In [10]: # Final locations of the centroid
       ...: kmeans.cluster_centers_
    Out[10]:
    array([[ 1.19539276,  0.13158148],
           [-0.25813925,  1.05589975],
           [-0.91941183, -1.18551732]])
    
    In [11]: # The number of iterations required to converge
       ...: kmeans.n_iter_
    Out[11]: 6
    
    4 cho thấy các bài tập ngẫu nhiên và điểm gần với
    In [8]: kmeans.fit(scaled_features)
    Out[8]:
    KMeans(init='random', n_clusters=3, random_state=42)
    
    5 cho thấy các cụm được dán nhãn hoàn hảo.
    : Breast invasive carcinoma
  • Dựa trên đầu ra ở trên, bạn có thể thấy rằng hệ số hình bóng là sai lệch. ARI cho thấy DBSCAN là lựa chọn tốt nhất cho ví dụ crescents tổng hợp so với K-MEAN.: Colon adenocarcinoma
  • Có một số số liệu đánh giá chất lượng của các thuật toán phân cụm. Đọc thông qua các triển khai trong Scikit-learn sẽ giúp bạn chọn một số liệu đánh giá phân cụm phù hợp.: Kidney renal clear cell carcinoma
  • Cách xây dựng một đường ống phân cụm có nghĩa là Python: Lung adenocarcinoma
  • Bây giờ bạn có một sự hiểu biết cơ bản về phân cụm K-MEAN trong Python, đã đến lúc thực hiện phân cụm K-Mean trên một bộ dữ liệu trong thế giới thực. Những dữ liệu này chứa các giá trị biểu hiện gen từ một bản thảo được tác giả bởi các nhà điều tra dự án phân tích ung thư Genome Atlas (TCGA).: Prostate adenocarcinoma

In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
6 mẫu (hàng) đại diện cho năm loại phụ ung thư riêng biệt. Mỗi mẫu có giá trị biểu hiện gen cho các gen
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
7 (cột). Bộ dữ liệu có sẵn từ kho lưu trữ máy học UC Irvine, nhưng bạn có thể sử dụng mã Python bên dưới để có được dữ liệu theo chương trình.

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
6

Để làm theo cùng với các ví dụ bên dưới, bạn có thể tải xuống mã nguồn bằng cách nhấp vào liên kết sau:

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
7

Trong phần này, bạn sẽ xây dựng một đường ống phân cụm K-Mean mạnh mẽ. Vì bạn sẽ thực hiện nhiều phép biến đổi của dữ liệu đầu vào ban đầu, đường ống của bạn cũng sẽ đóng vai trò là một khung phân cụm thực tế.dimensionality reduction, which reduces the number of features in the dataset by either removing or combining them.

Xây dựng đường ống phân cụm K-Meanfeature space becomes sparse. This sparsity makes it difficult for algorithms to find data objects near one another in higher-dimensional space. Since the gene expression dataset has over

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
04 features, it qualifies as a great candidate for dimensionality reduction.

Phân tích thành phần chính (PCA) là một trong nhiều kỹ thuật giảm kích thước. PCA biến đổi dữ liệu đầu vào bằng cách chiếu nó thành một số lượng kích thước thấp hơn được gọi là các thành phần. Các thành phần thu được sự biến đổi của dữ liệu đầu vào thông qua sự kết hợp tuyến tính của các tính năng dữ liệu đầu vào. is one of many dimensionality reduction techniques. PCA transforms the input data by projecting it into a lower number of dimensions called components. The components capture the variability of the input data through a linear combination of the input data’s features.

Khối mã tiếp theo giới thiệu cho bạn khái niệm các đường ống Scikit-Learn. Lớp Scikit-learn

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
05 là một triển khai cụ thể của ý tưởng trừu tượng của một đường ống học máy.

Dữ liệu biểu hiện gen của bạn aren ở định dạng tối ưu cho lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1, do đó, bạn sẽ cần phải xây dựng một đường ống tiền xử lý. Đường ống sẽ thực hiện một giải pháp thay thế cho lớp
In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
9 được gọi là
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
08 để chia tỷ lệ tính năng. Bạn sử dụng
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
08 khi bạn không cho rằng hình dạng của tất cả các tính năng của bạn theo phân phối bình thường.preprocessing pipeline. The pipeline will implement an alternative to the
In [5]: scaler = StandardScaler()
   ...: scaled_features = scaler.fit_transform(features)
9 class called
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
08 for feature scaling. You use
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
08 when you do not assume that the shape of all your features follows a normal distribution.

Bước tiếp theo trong đường ống tiền xử lý của bạn sẽ triển khai lớp

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
10 để thực hiện giảm kích thước:

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
8

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

  • INIT: Bạn sẽ sử dụng

    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    5 thay vì
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    4 để đảm bảo các trung tâm được khởi tạo với một số khoảng cách giữa chúng. Trong hầu hết các trường hợp, đây sẽ là một cải tiến so với
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    4.
    You’ll use
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    5 instead of
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    4 to ensure centroids are initialized with some distance between them. In most cases, this will be an improvement over
    In [6]: scaled_features[:5]
    Out[6]:
    array([[ 2.13082109,  0.25604351],
           [-1.52698523,  1.41036744],
           [-1.00130152, -1.56583175],
           [-1.74256891, -1.76832509],
           [-1.29924521, -0.87253446]])
    
    4.

  • N_INIT: Bạn sẽ tăng số lượng khởi tạo để đảm bảo bạn tìm thấy một giải pháp ổn định. You’ll increase the number of initializations to ensure you find a stable solution.

  • MAX_ITER: Bạn sẽ tăng số lần lặp mỗi lần khởi tạo để đảm bảo rằng K-MEAN sẽ hội tụ. You’ll increase the number of iterations per initialization to ensure that k-means will converge.

Xây dựng đường ống phân cụm K-MEAN với các đối số do người dùng xác định trong hàm tạo

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

>>>

In [2]: features, true_labels = make_blobs(
   ...:     n_samples=200,
   ...:     centers=3,
   ...:     cluster_std=2.75,
   ...:     random_state=42
   ...: )
9

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
0

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
1

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

INIT: Bạn sẽ sử dụng

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
5 thay vì
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
4 để đảm bảo các trung tâm được khởi tạo với một số khoảng cách giữa chúng. Trong hầu hết các trường hợp, đây sẽ là một cải tiến so với
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
4.

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
2

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

>>>

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

INIT: Bạn sẽ sử dụng

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
5 thay vì
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
4 để đảm bảo các trung tâm được khởi tạo với một số khoảng cách giữa chúng. Trong hầu hết các trường hợp, đây sẽ là một cải tiến so với
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
4.

N_INIT: Bạn sẽ tăng số lượng khởi tạo để đảm bảo bạn tìm thấy một giải pháp ổn định.

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
4

Bây giờ, bạn đã xây dựng một đường ống để xử lý dữ liệu, bạn sẽ xây dựng một đường ống riêng để thực hiện phân cụm K-MEAN. Bạn sẽ ghi đè các đối số mặc định sau đây của lớp

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

INIT: Bạn sẽ sử dụng

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
5 thay vì
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
4 để đảm bảo các trung tâm được khởi tạo với một số khoảng cách giữa chúng. Trong hầu hết các trường hợp, đây sẽ là một cải tiến so với
In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
4.

N_INIT: Bạn sẽ tăng số lượng khởi tạo để đảm bảo bạn tìm thấy một giải pháp ổn định.

MAX_ITER: Bạn sẽ tăng số lần lặp mỗi lần khởi tạo để đảm bảo rằng K-MEAN sẽ hội tụ.

Xây dựng đường ống phân cụm K-MEAN với các đối số do người dùng xác định trong hàm tạo

In [6]: scaled_features[:5]
Out[6]:
array([[ 2.13082109,  0.25604351],
       [-1.52698523,  1.41036744],
       [-1.00130152, -1.56583175],
       [-1.74256891, -1.76832509],
       [-1.29924521, -0.87253446]])
1:parameter tuning consists of sequentially altering one of the input values of the algorithm’s parameters and recording the results. At the end of the parameter tuning process, you’ll have a set of performance scores, one for each new value of a given parameter. Parameter tuning is a powerful method to maximize performance from your clustering pipeline.

Lớp

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
05 có thể được xích để tạo thành một đường ống lớn hơn. Xây dựng một đường ống phân cụm từ đầu đến cuối bằng cách chuyển các đường ống
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
17 và
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
18 sang
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
05:explained variance of the input data.

Gọi

In [7]: kmeans = KMeans(
   ...:     init="random",
   ...:     n_clusters=3,
   ...:     n_init=10,
   ...:     max_iter=300,
   ...:     random_state=42
   ...: )
3 với
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
9 khi đối số thực hiện tất cả các bước đường ống trên
In [9]: # The lowest SSE value
   ...: kmeans.inertia_
Out[9]: 74.57960106819854

In [10]: # Final locations of the centroid
   ...: kmeans.cluster_centers_
Out[10]:
array([[ 1.19539276,  0.13158148],
       [-0.25813925,  1.05589975],
       [-0.91941183, -1.18551732]])

In [11]: # The number of iterations required to converge
   ...: kmeans.n_iter_
Out[11]: 6
9:

Trong ví dụ này, bạn sẽ sử dụng các số liệu hiệu suất phân cụm để xác định số lượng thành phần thích hợp trong bước PCA. Lớp

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
05 rất mạnh mẽ trong tình huống này. Nó cho phép bạn thực hiện điều chỉnh tham số cơ bản bằng cách sử dụng vòng lặp
In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
29.

Lặp lại trong phạm vi

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
27 và các số liệu đánh giá bản ghi cho mỗi lần lặp:

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
5

Vẽ các số liệu đánh giá là một hàm của

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
27 để trực quan hóa mối quan hệ giữa việc thêm các thành phần và hiệu suất của kết quả phân cụm K-MEANS:

>>>

In [3]: features[:5]
Out[3]:
array([[  9.77075874,   3.27621022],
       [ -9.71349666,  11.27451802],
       [ -6.91330582,  -9.34755911],
       [-10.86185913, -10.75063497],
       [ -8.50038027,  -4.54370383]])

In [4]: true_labels[:5]
Out[4]: array([1, 0, 2, 2, 2])
6

Vẽ các số liệu đánh giá là một hàm của

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
27 để trực quan hóa mối quan hệ giữa việc thêm các thành phần và hiệu suất của kết quả phân cụm K-MEANS:

Hướng dẫn how does python implement k - python thực hiện như thế nào k

Mã trên tạo ra biểu đồ hiển thị các số liệu hiệu suất như là một hàm của

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
27:

  1. Có hai điểm từ hình này:silhouette coefficient decreases linearly. The silhouette coefficient depends on the distance between points, so as the number of dimensions increases, the sparsity increases.

  2. Hệ số hình bóng giảm tuyến tính. Hệ số hình bóng phụ thuộc vào khoảng cách giữa các điểm, vì vậy khi số lượng kích thước tăng lên, độ thưa thớt.ARI improves significantly as you add components. It appears to start tapering off after

    In [1]: import matplotlib.pyplot as plt
       ...: from kneed import KneeLocator
       ...: from sklearn.datasets import make_blobs
       ...: from sklearn.cluster import KMeans
       ...: from sklearn.metrics import silhouette_score
       ...: from sklearn.preprocessing import StandardScaler
    
    33, so that would be the value to use for presenting the best clustering results from this pipeline.

ARI cải thiện đáng kể khi bạn thêm các thành phần. Nó dường như bắt đầu giảm dần sau

In [1]: import matplotlib.pyplot as plt
   ...: from kneed import KneeLocator
   ...: from sklearn.datasets import make_blobs
   ...: from sklearn.cluster import KMeans
   ...: from sklearn.metrics import silhouette_score
   ...: from sklearn.preprocessing import StandardScaler
33, vì vậy đó sẽ là giá trị để sử dụng để trình bày kết quả phân cụm tốt nhất từ ​​đường ống này.

Giống như hầu hết các quyết định học máy, bạn phải cân bằng tối ưu hóa các số liệu đánh giá phân cụm với mục tiêu của nhiệm vụ phân cụm. Trong các tình huống khi các nhãn cụm có sẵn, như trường hợp của bộ dữ liệu ung thư được sử dụng trong hướng dẫn này, ARI là một lựa chọn hợp lý. ARI định lượng chính xác đường ống của bạn có thể gán lại các nhãn cụm.

Mặt khác, hệ số hình bóng là một lựa chọn tốt cho phân cụm khám phá vì nó giúp xác định các bộ phụ con. Những người phụ này đảm bảo điều tra bổ sung, có thể dẫn đến những hiểu biết mới và quan trọng.

Sự kết luận

Bây giờ bạn đã biết cách thực hiện phân cụm K-means trong Python. Đường ống phân cụm K-MEAN cuối cùng của bạn có thể phân cụm bệnh nhân với các loại ung thư khác nhau bằng cách sử dụng dữ liệu biểu hiện gen trong thế giới thực. Bạn có thể sử dụng các kỹ thuật bạn đã học ở đây để phân cụm dữ liệu của riêng mình, hiểu cách có được kết quả phân cụm tốt nhất và chia sẻ thông tin chi tiết với người khác.

  • Trong hướng dẫn này, bạn đã học được:clustering techniques are and when to use them
  • Các kỹ thuật phân cụm phổ biến là gì và khi nào nên sử dụng chúngk-means algorithm is
  • Thuật toán K-Mean là gìk-means clustering in Python
  • Cách thực hiện phân cụm K-Means trong Pythonevaluate the performance of clustering algorithms
  • Cách đánh giá hiệu suất của các thuật toán phân cụmk-means clustering pipeline in Python
  • Cách xây dựng và điều chỉnh một đường ống phân cụm K-Mean mạnh mẽ trong Pythonanalyze and present clustering results from the k-means algorithm

Cách phân tích và trình bày kết quả phân cụm từ thuật toán K-MEAN

Bạn cũng đã thực hiện một chuyến lưu diễn của Scikit-Learn, một công cụ có thể truy cập và mở rộng để thực hiện phân cụm K-MEAN trong Python. Nếu bạn muốn tái tạo các ví dụ bạn đã thấy ở trên, thì hãy chắc chắn tải xuống mã nguồn bằng cách nhấp vào liên kết sau:

Làm thế nào để bạn thực hiện k

Giới thiệu về phân cụm K-Means..
Bước 1: Chọn số cụm k. ....
Bước 2: Chọn k Điểm ngẫu nhiên từ dữ liệu là Centroid. ....
Bước 3: Gán tất cả các điểm cho cụm Centroid gần nhất. ....
Bước 4: Tái tính các trung tâm của các cụm mới được hình thành. ....
Bước 5: Lặp lại các bước 3 và 4 ..

Giá trị k trong Python là gì?

Phương pháp phân cụm K-MEAN là một kỹ thuật học máy không được giám sát được sử dụng để xác định các cụm đối tượng dữ liệu trong bộ dữ liệu.Có nhiều loại phương pháp phân cụm khác nhau, nhưng K-MEAN là một trong những phương pháp lâu đời nhất và dễ tiếp cận nhất.an unsupervised machine learning technique used to identify clusters of data objects in a dataset. There are many different types of clustering methods, but k-means is one of the oldest and most approachable.

Init là gì = 'k

init {'k-means ++', 'ngẫu nhiên'}, có thể gọi hoặc giống như mảng (n_cluster, n_features), mặc định = 'k-mean ++' để khởi tạovề phân phối xác suất thực nghiệm của sự đóng góp của các điểm vào quán tính tổng thể.selects initial cluster centroids using sampling based on an empirical probability distribution of the points' contribution to the overall inertia.

Làm thế nào để Python thực hiện phân cụm phân cấp?

Làm thế nào nó hoạt động?..
Bắt đầu bằng cách trực quan hóa một số điểm dữ liệu: Nhập Numpy dưới dạng NP.Nhập matplotlib.pyplot như plt.....
Nhập khẩu Numpy dưới dạng NP.Nhập matplotlib.pyplot như plt.từ scipy.cluster.Hierarchy nhập khẩu dendrogram, liên kết.....
Nhập khẩu Numpy dưới dạng NP.Nhập matplotlib.pyplot như plt.Từ sklearn.Cluster Nhập AgglomerativeClustering ..