Hướng dẫn dbscan python code - mã python dbscan
Hình ảnh của tác giả & nbsp; Show Phân cụm được áp dụng trên bộ dữ liệu để nhóm các bộ dữ liệu tương tự. Nó tìm kiếm những điểm tương đồng và khác biệt trong các điểm dữ liệu và kết hợp chúng lại với nhau. Không có nhãn trong phân cụm. Phân cụm là một học tập không giám sát để tìm cấu trúc cơ bản của bộ dữ liệu. & NBSP; Các loại thuật toán phân cụm:
Trong blog này, chúng tôi sẽ tập trung vào các phương pháp phân cụm dựa trên mật độ, đặc biệt là thuật toán DBSCAN với Scikit-learn. Các thuật toán dựa trên mật độ rất giỏi trong việc tìm kiếm các vùng và ngoại lệ mật độ cao. Nó thường được sử dụng để phát hiện bất thường và phân cụm các bộ dữ liệu phi tuyến tính. & NBSP; DBSCAN là gì?DBSCAN (phân cụm không gian dựa trên mật độ của các ứng dụng có nhiễu) là một thuật toán học tập không giám sát dựa trên mật độ. Nó tính toán các biểu đồ hàng xóm gần nhất để tìm các cụm và ngoại lệ hình tùy ý. Trong khi các phân cụm K-means tạo ra các cụm hình hình cầu. & Nbsp; DBSCAN không yêu cầu các cụm K ban đầu. Thay vào đó, nó yêu cầu hai tham số: EPS và minpts.K clusters initially. Instead, it requires two parameters: eps and minPts.
DBSCAN sử dụng hai tham số này để xác định điểm lõi, điểm biên giới hoặc ngoại lệ. & nbsp; hình ảnh từ wikipedia Image from Wikipedia Thuật toán phân cụm DBSCAN hoạt động như thế nào?
Phân cụm DBSCAN trong PythonChúng tôi sẽ sử dụng Notebook DeepNote để chạy ví dụ. Nó đi kèm với các gói Python được cài đặt sẵn, vì vậy chúng tôi chỉ cần nhập khẩu Numpy, Pandas, Seaborn, Matplotlib và Sklearn. & NBSP; import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN Chúng tôi đang sử dụng dữ liệu phân khúc khách hàng trung tâm từ Kaggle. Nó chứa tuổi của khách hàng, giới tính, thu nhập và điểm chi tiêu. Chúng tôi sẽ sử dụng các tính năng này để tạo các cụm khác nhau. & NBSP; Đầu tiên, chúng tôi sẽ tải bộ dữ liệu bằng gấu trúc `read_csv`. Sau đó, chúng tôi sẽ chọn ba cột (‘Tuổi ',' Thu nhập hàng năm (K $) ',' Điểm chi tiêu (1-100) ') để tạo DataFrame X_Train. & NBSP;X_train dataframe. df = pd.read_csv('Mall_Customers.csv') X_train = df[['Age', 'Annual Income (k$)', 'Spending Score (1-100)']] Chúng tôi sẽ phù hợp với X_TRAIN trên thuật toán DBSCAN với EPS 12.5 và MIN_Sample 4. Sau đó, chúng tôi sẽ tạo một dbscan_dataset từ x_train và tạo một cột ‘cụm bằng cách sử dụng phân cụm.labels _. & Nbsp;X_train on the DBSCAN algorithm with eps 12.5 and min_sample 4. After that, we will create a DBSCAN_dataset from X_train and create a ‘Cluster’ column using clustering.labels_. clustering = DBSCAN(eps=12.5, min_samples=4).fit(X_train) DBSCAN_dataset = X_train.copy() DBSCAN_dataset.loc[:,'Cluster'] = clustering.labels_ Để trực quan hóa việc phân phối các cụm, chúng tôi sẽ sử dụng value_counts () và chuyển đổi nó thành DataFrame. & NBSP; Như bạn có thể thấy, chúng tôi có 5 cụm và 1 ngoại lệ. Cụm `0` có kích thước lớn nhất với 112 hàng. & NBSP; DBSCAN_dataset.Cluster.value_counts().to_frame() & nbsp; Trong phần này, chúng tôi sẽ sử dụng thông tin trên và trực quan hóa biểu đồ phân tán. & Nbsp; & nbsp; Có hai lô: Thu nhập hàng năm so với điểm chi tiêu và thu nhập hàng năm so với tuổi. Các cụm được xác định bởi màu sắc và các ngoại lệ được định nghĩa là các chấm đen nhỏ. & Nbsp; Trực quan hóa cho thấy rõ mỗi khách hàng là một phần của một trong 5 cụm và chúng tôi có thể sử dụng thông tin này để cung cấp ưu đãi cao cấp cho khách hàng với các cụm màu tím và ưu đãi rẻ hơn cho khách hàng với các cụm màu xanh đậm. & NBSP; outliers = DBSCAN_dataset[DBSCAN_dataset['Cluster']==-1] fig2, (axes) = plt.subplots(1,2,figsize=(12,5)) sns.scatterplot('Annual Income (k$)', 'Spending Score (1-100)', data=DBSCAN_dataset[DBSCAN_dataset['Cluster']!=-1], hue='Cluster', ax=axes[0], palette='Set2', legend='full', s=200) sns.scatterplot('Age', 'Spending Score (1-100)', data=DBSCAN_dataset[DBSCAN_dataset['Cluster']!=-1], hue='Cluster', palette='Set2', ax=axes[1], legend='full', s=200) axes[0].scatter(outliers['Annual Income (k$)'], outliers['Spending Score (1-100)'], s=10, label='outliers', c="k") axes[1].scatter(outliers['Age'], outliers['Spending Score (1-100)'], s=10, label='outliers', c="k") axes[0].legend() axes[1].legend() plt.setp(axes[0].get_legend().get_texts(), fontsize='12') plt.setp(axes[1].get_legend().get_texts(), fontsize='12') plt.show() & nbsp; Trong phần này, chúng tôi sẽ sử dụng thông tin trên và trực quan hóa biểu đồ phân tán. & Nbsp; & nbsp;Có hai lô: Thu nhập hàng năm so với điểm chi tiêu và thu nhập hàng năm so với tuổi. Các cụm được xác định bởi màu sắc và các ngoại lệ được định nghĩa là các chấm đen nhỏ. & Nbsp; Trực quan hóa cho thấy rõ mỗi khách hàng là một phần của một trong 5 cụm và chúng tôi có thể sử dụng thông tin này để cung cấp ưu đãi cao cấp cho khách hàng với các cụm màu tím và ưu đãi rẻ hơn cho khách hàng với các cụm màu xanh đậm. & NBSP;eps and min_samples using silhouette score and heatmap. Reference
DBSCAN trong Python (với bộ dữ liệu ví dụ)Abid Ali Awan (@1abidaliawan) is a certified data scientist professional who loves building machine learning models. Currently, he is focusing on content creation and writing technical blogs on machine learning and data science technologies. Abid holds a Master's degree in Technology Management and a bachelor's degree in Telecommunication Engineering. His vision is to build an AI product using a graph neural network for students struggling with mental illness. |