Hướng dẫn dbscan python code - mã python dbscan

Hướng dẫn dbscan python code - mã python dbscan

Hình ảnh của tác giả & nbsp;
 

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:

  • Phân cụm dựa trên phân vùng
  • Phân cụm mờ
  • Phân cụm phân cấp
  • Phân cụm dựa trên lưới
  • Phân cụm độc quyền
  • Phân cụm chồng chéo
  • Phân cụm dựa trên mật độ

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.

  • EPS: Đó là bán kính của các khu phố cụ thể. Nếu khoảng cách giữa hai điểm nhỏ hơn hoặc bằng ESP, nó sẽ được coi là hàng xóm của nó.: it is the radius of specific neighborhoods. If the distance between two points is less than or equal to esp, it will be considered its neighbors.
  • MINPTS: Số lượng điểm dữ liệu tối thiểu trong một khu phố nhất định để tạo thành các cụm. & NBSP;: minimum number of data points in a given neighborhood to form the clusters. 

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

Hướng dẫn dbscan python code - mã python dbscan

Image from Wikipedia

Thuật toán phân cụm DBSCAN hoạt động như thế nào?

  1. Chọn ngẫu nhiên bất kỳ điểm p. Nó cũng được gọi là điểm cốt lõi nếu có nhiều điểm dữ liệu hơn minpts trong một khu phố. & NBSP;p. It is also called core point if there are more data points than minPts in a neighborhood. 
  2. Nó sẽ sử dụng EPS và minpts để xác định tất cả các điểm có thể tiếp cận được.eps and minPts to identify all density reachable points.
  3. Nó sẽ tạo một cụm sử dụng EPS và MINPTS nếu P là điểm cốt lõi. & NBSP;eps and minPts if p is a core point. 
  4. Nó sẽ chuyển sang điểm dữ liệu tiếp theo nếu P là điểm biên giới. Một điểm dữ liệu được gọi là điểm biên giới nếu nó có ít điểm hơn minpts trong khu phố. & NBSP;p is a border point. A data point is called a border point if it has fewer points than minPts in the neighborhood. 
  5. Thuật toán sẽ tiếp tục cho đến khi tất cả các điểm được truy cập.

Phân cụm DBSCAN trong Python

Chú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()

Hướng dẫn dbscan python code - mã python dbscan

& 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()

Hướng dẫn dbscan python code - mã python dbscan

& 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 

  • Sự kết luận
  • DBSCAN là một trong nhiều thuật toán được sử dụng để phân khúc khách hàng. Bạn có thể sử dụng phương tiện K hoặc phân cụm phân cấp để có kết quả tốt hơn. Các thuật toán phân cụm thường được sử dụng cho các công cụ đề xuất, phân khúc thị trường và khách hàng, phân tích mạng xã hội và phân tích tài liệu. & NBSP;
  • Trong blog này, chúng tôi đã học được những điều cơ bản của thuật toán dựa trên mật độ DBCAN và cách chúng tôi có thể sử dụng nó để tạo phân đoạn khách hàng bằng cách sử dụng Scikit-learn. Bạn có thể cải thiện thuật toán bằng cách tìm EPS và MIN_SAMPLES tối ưu bằng cách sử dụng điểm số hình bóng và bản đồ nhiệt. & NBSP;
  • Phân cụm DBSCAN - Giải thích. Giải thích lý thuyết chi tiết

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.