Chuyển đến nội dung chính

Hướng dẫn về thuật toán phân cụm DBSCAN

Tìm hiểu cách triển khai DBSCAN, hiểu các tham số chính của nó và khám phá thời điểm tận dụng những điểm mạnh độc đáo trong các dự án khoa học dữ liệu của bạn.
Đã cập nhật 5 thg 6, 2026  · 11 phút đọc

Trong khoa học dữ liệu và học máy, khả năng khám phá các mẫu ẩn và nhóm các điểm dữ liệu tương tự là một kỹ năng quan trọng. Các thuật toán phân cụm đóng vai trò then chốt trong quá trình này. 

Phân cụm là một kỹ thuật nền tảng trong học máy và khoa học dữ liệu, liên quan đến việc nhóm các điểm dữ liệu tương tự lại với nhau. Đây là một phương pháp học không giám sát, nghĩa là không cần dữ liệu gán nhãn để tìm mẫu. 

Mục tiêu chính của phân cụm là:

  • Đơn giản hóa các tập dữ liệu lớn thành các nhóm con có ý nghĩa
  • Xác định các nhóm tự nhiên trong dữ liệu
  • Phát lộ các mẫu và cấu trúc ẩn

Mặc dù có rất nhiều thuật toán phân cụm (bạn có thể đã nghe về K-means hoặc phân cụm phân cấp), DBSCAN mang lại những lợi thế riêng. Là một phương pháp dựa trên mật độ, DBSCAN có một số điểm mạnh:

  1. Linh hoạt về hình dạng cụm
  2. Không cần xác định trước số lượng cụm
  3. Xử lý nhiễu
  4. Góc nhìn dựa trên mật độ

Trong bài viết này, chúng ta sẽ xem thuật toán DBSCAN là gì, DBSCAN hoạt động ra sao, cách triển khai bằng Python và khi nào nên dùng trong các dự án khoa học dữ liệu của bạn.

DBSCAN là gì?

DBSCAN, viết tắt của Density-Based Spatial Clustering of Applications with Noise (Phân cụm không gian dựa trên mật độ có xét nhiễu), là một thuật toán phân cụm mạnh mẽ dùng để nhóm các điểm gần nhau trong không gian dữ liệu. Không giống một số thuật toán khác, DBSCAN không yêu cầu bạn chỉ định trước số lượng cụm, điều này đặc biệt hữu ích cho phân tích dữ liệu khám phá.

Thuật toán hoạt động bằng cách định nghĩa cụm là các vùng dày đặc, được ngăn cách bởi các vùng có mật độ thấp hơn. Cách tiếp cận này cho phép DBSCAN khám phá các cụm có hình dạng bất kỳ và nhận diện các điểm ngoại lai như nhiễu.

DBSCAN xoay quanh ba khái niệm chính:

  1. Điểm lõi: Là các điểm có ít nhất một số lượng điểm tối thiểu (MinPts) nằm trong một khoảng cách xác định (ε hoặc epsilon).
  2. Điểm biên: Là các điểm nằm trong khoảng cách ε của một điểm lõi nhưng bản thân không có đủ hàng xóm theo MinPts.
  3. Điểm nhiễu: Là các điểm không phải điểm lõi cũng không phải điểm biên. Chúng không đủ gần cụm nào để được đưa vào.

dbscan clustering

Ảnh: tác giả

Sơ đồ trên minh họa các khái niệm này. Điểm lõi (màu xanh) tạo thành trung tâm của cụm, điểm biên (màu cam) nằm ở rìa cụm, còn điểm nhiễu (màu đỏ) thì cô lập.

DBSCAN sử dụng hai tham số chính:

  • ε (epsilon): Khoảng cách tối đa giữa hai điểm để được coi là hàng xóm.
  • MinPts: Số lượng điểm tối thiểu cần có để hình thành một vùng dày đặc.

Bằng cách điều chỉnh các tham số này, bạn có thể kiểm soát cách thuật toán định nghĩa cụm, cho phép nó thích ứng với các kiểu tập dữ liệu và yêu cầu phân cụm khác nhau.

Ở phần tiếp theo, chúng ta sẽ xem DBSCAN hoạt động như thế nào, khám phá quy trình từng bước để xác định cụm trong dữ liệu.

DBSCAN hoạt động như thế nào?

DBSCAN vận hành bằng cách kiểm tra vùng lân cận của từng điểm trong tập dữ liệu. Thuật toán tuân theo một quy trình từng bước để xác định cụm dựa trên mật độ của các điểm dữ liệu. Hãy cùng phân tích cách DBSCAN hoạt động:

  1. Chọn tham số
    • Chọn ε (epsilon): Khoảng cách tối đa giữa hai điểm để được coi là hàng xóm.
    • Chọn MinPts: Số điểm tối thiểu cần có để tạo vùng dày đặc.
  2. Chọn điểm bắt đầu
    • Thuật toán bắt đầu từ một điểm bất kỳ chưa được thăm trong tập dữ liệu.
  3. Khám xét vùng lân cận
    • Lấy tất cả các điểm nằm trong khoảng cách ε của điểm bắt đầu.
    • Nếu số điểm lân cận ít hơn MinPts, điểm đó tạm thời được gán nhãn là nhiễu.
    • Nếu có ít nhất MinPts điểm trong khoảng ε, điểm đó được đánh dấu là điểm lõi và một cụm mới được hình thành.
  4. Mở rộng cụm
    • Tất cả hàng xóm của điểm lõi được thêm vào cụm.
    • Với mỗi hàng xóm này:
      • Nếu là điểm lõi, hàng xóm của nó sẽ được thêm vào cụm một cách đệ quy.
      • Nếu không phải điểm lõi, nó được đánh dấu là điểm biên và việc mở rộng dừng lại.
  5. Lặp lại quy trình
    • Thuật toán chuyển sang điểm chưa được thăm tiếp theo trong tập dữ liệu.
    • Lặp lại Bước 3–4 cho đến khi tất cả điểm đã được thăm.
  6. Hoàn tất cụm
    • Sau khi xử lý tất cả điểm, thuật toán xác định toàn bộ các cụm.
    • Các điểm ban đầu gán nhãn nhiễu có thể trở thành điểm biên nếu chúng nằm trong khoảng ε của một điểm lõi.
  7. Xử lý nhiễu
    • Bất kỳ điểm nào không thuộc cụm nào sẽ vẫn được phân loại là nhiễu.

Quy trình này cho phép DBSCAN hình thành các cụm có hình dạng bất kỳ và nhận diện ngoại lai một cách hiệu quả. Khả năng tìm cụm mà không cần chỉ định trước số lượng cụm là một trong những điểm mạnh then chốt của thuật toán.

Lưu ý rằng việc chọn ε và MinPts có thể ảnh hưởng đáng kể đến kết quả phân cụm. Ở phần tiếp theo, chúng ta sẽ bàn về cách chọn các tham số này hiệu quả và giới thiệu các phương pháp như đồ thị k-distance để chọn tham số.

Các khái niệm và tham số then chốt của DBSCAN

Để hiểu đầy đủ cách DBSCAN hình thành cụm, điều quan trọng là nắm hai khái niệm: khả đạt mật độ (density reachability) và liên thông mật độ (density connectivity).

Khả đạt mật độ

Một điểm q được gọi là khả đạt mật độ từ một điểm p nếu:

1. p là điểm lõi (có ít nhất MinPts trong khoảng cách ε)

2. Tồn tại một chuỗi điểm p = p1, ..., pn = q sao cho mỗi pi+1 là trực tiếp khả đạt mật độ từ pi.

Nói đơn giản, bạn có thể đi từ p đến q bằng cách bước qua các điểm lõi, trong đó mỗi bước không lớn hơn ε.

Liên thông mật độ

Hai điểm p và q được gọi là liên thông mật độ nếu tồn tại một điểm o sao cho cả p và q đều khả đạt mật độ từ o.

Liên thông mật độ là cơ sở để hình thành cụm trong DBSCAN. Mọi điểm trong một cụm đều liên thông mật độ với nhau, và nếu một điểm liên thông mật độ với bất kỳ điểm nào trong cụm, nó cũng thuộc về cụm đó.

Chọn tham số DBSCAN

Hiệu quả của DBSCAN phụ thuộc nhiều vào hai tham số chính: ε (epsilon) và MinPts. Dưới đây là cách tiếp cận để chọn các tham số này:

Chọn ε (Epsilon)

Tham số ε quyết định khoảng cách tối đa giữa hai điểm để được coi là hàng xóm. Để chọn ε phù hợp:

1. Dựa vào hiểu biết miền: Nếu bạn có hiểu biết về khoảng cách có ý nghĩa cho vấn đề cụ thể, hãy dùng nó làm điểm khởi đầu.

2. Đồ thị k-distance: Đây là cách tiếp cận có hệ thống hơn:

  • Tính khoảng cách đến hàng xóm thứ k cho mỗi điểm (với k = MinPts).
  • Vẽ các khoảng cách k theo thứ tự tăng dần.
  • Tìm “khuỷu tay” trên đồ thị – điểm mà đường cong bắt đầu phẳng ra.
  • Giá trị ε tại khuỷu tay này thường là lựa chọn tốt.

Chọn MinPts

MinPts xác định số điểm tối thiểu cần có để tạo vùng dày đặc. Một số hướng dẫn:

1. Quy tắc chung: Điểm khởi đầu tốt là đặt MinPts = 2 * num_features, trong đó num_features là số chiều của tập dữ liệu.

2. Xem xét nhiễu: Nếu dữ liệu có nhiễu hoặc bạn muốn phát hiện các cụm nhỏ hơn, có thể giảm MinPts.

3. Kích thước tập dữ liệu: Với tập dữ liệu lớn, bạn có thể cần tăng MinPts để tránh tạo quá nhiều cụm nhỏ.

Hãy nhớ rằng lựa chọn tham số có thể ảnh hưởng đáng kể đến kết quả. Thường nên thử nghiệm với các giá trị khác nhau và đánh giá các cụm thu được để tìm phương án phù hợp nhất với dữ liệu và bài toán của bạn.

Chọn thước đo khoảng cách

Lựa chọn thước đo khoảng cách trong DBSCAN có thể tác động lớn đến kết quả phân cụm. Mặc định, DBSCAN sử dụng khoảng cách Euclid, hoạt động tốt với các cụm gọn và gần hình cầu. Tuy nhiên, điều này có thể không lý tưởng cho mọi loại dữ liệu.

Bạn có thể chỉ định các thước đo thay thế, chẳng hạn như:

  • Manhattan (chuẩn L1) cho dữ liệu dạng lưới
  • Cosine cho các véc-tơ thưa, chiều cao (ví dụ: embedding văn bản)
  • Haversine cho toạ độ kinh độ/vĩ độ

Phù hợp thước đo khoảng cách với cấu trúc dữ liệu của bạn sẽ đảm bảo phân cụm dựa trên mật độ phản ánh đúng mức độ tương đồng thực sự.

Trong scikit-learn, tham số metric cho phép bạn đặt rõ ràng (ví dụ, metric='cosine'). Một số thước đo tuỳ chỉnh có thể yêu cầu ma trận khoảng cách được tính sẵn.

Chuẩn hoá đặc trưng

Vì DBSCAN dựa vào giá trị khoảng cách tuyệt đối, các đặc trưng chưa chuẩn hoá có thể dẫn đến kết quả méo mó. Những biến có miền giá trị lớn hơn sẽ chi phối phép tính khoảng cách, ngay cả khi chúng không quan trọng hơn. Điều này có thể ngăn thuật toán xác định đúng các vùng dày đặc trong dữ liệu.

Để tránh điều này, điều cốt yếu là chuẩn hoá các đặc trưng để chúng đóng góp ngang nhau. Các cách phổ biến gồm:

  • Chuẩn hoá Z-score: Căn giữa đặc trưng quanh 0 với phương sai đơn vị bằng StandardScaler.

  • Tỉ lệ Min–Max: Co giãn đặc trưng về một khoảng cố định (thường là [0, 1]) bằng MinMaxScaler.

Hãy chọn phương pháp tỉ lệ hoá phù hợp với phân phối dữ liệu của bạn. Không có tiền xử lý phù hợp, DBSCAN có thể không phát hiện được các cụm có ý nghĩa — ngay cả khi epsilonMinPts đã được tinh chỉnh tốt.

Triển khai DBSCAN trong Python

Trong phần này, chúng ta sẽ xem cách triển khai DBSCAN bằng Python và thư viện scikit-learn. Chúng ta sẽ dùng bộ dữ liệu Make Moons để minh hoạ quy trình.

Thiết lập môi trường

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
from sklearn.neighbors import NearestNeighbors

Các import này cung cấp công cụ cần thiết để thao tác dữ liệu, trực quan hoá, tạo bộ dữ liệu và triển khai thuật toán DBSCAN.

Tạo dữ liệu mẫu

X, _ = make_moons(n_samples=200, noise=0.05, random_state=42)

Đoạn mã này tạo bộ dữ liệu tổng hợp bằng hàm make_moons từ scikit-learn. Mô tả ngắn về bộ dữ liệu:

Hàm make_moons tạo một bộ dữ liệu nhị phân thuộc phân loại giống hai nửa vầng trăng đan xen. Trong trường hợp của chúng ta:

  • Tạo 200 mẫu (n_samples=200)
  • Thêm một lượng nhỏ nhiễu Gaussian (noise=0.05) để bộ dữ liệu thực tế hơn
  • Đặt random_state=42 để có thể tái lập

Bộ dữ liệu này đặc biệt hữu ích để minh hoạ DBSCAN vì:

  1. Nó có hình dạng phi lồi mà nhiều thuật toán phân cụm (như K-means) sẽ gặp khó khăn
  2. Hai cụm tách biệt rõ nhưng có hình dạng phức tạp
  3. Nhiễu được thêm vào tạo bối cảnh thực tế hơn, nơi một số điểm có thể được phân loại là ngoại lai

Hãy trực quan hoá bộ dữ liệu này để hiểu rõ cấu trúc của nó:

# Visualize the dataset
plt.figure(figsize=(10, 6))
plt.scatter(X[:, 0], X[:, 1])
plt.title('Moon-shaped Dataset')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Điều này sẽ hiển thị hai hình nửa vầng trăng đan xen trong bộ dữ liệu của chúng ta như bên dưới

Xác định tham số epsilon

Chúng ta sử dụng phương pháp đồ thị k-distance để hỗ trợ chọn giá trị epsilon phù hợp:

  1. Định nghĩa hàm plot_k_distance_graph để tính khoảng cách đến hàng xóm thứ k cho mỗi điểm.
  2. Sắp xếp và vẽ các khoảng cách.
  3. Tìm “khuỷu tay” trên đồ thị để chọn epsilon.
# Function to plot k-distance graph
def plot_k_distance_graph(X, k):
    neigh = NearestNeighbors(n_neighbors=k)
    neigh.fit(X)
    distances, _ = neigh.kneighbors(X)
    distances = np.sort(distances[:, k-1])
    plt.figure(figsize=(10, 6))
    plt.plot(distances)
    plt.xlabel('Points')
    plt.ylabel(f'{k}-th nearest neighbor distance')
    plt.title('K-distance Graph')
    plt.show()
# Plot k-distance graph
plot_k_distance_graph(X, k=5)

Kết quả

Trong ví dụ của chúng ta, dựa trên đồ thị k-distance, chúng ta chọn epsilon là 0,15.

Tiến hành phân cụm DBSCAN

Chúng ta dùng triển khai DBSCAN của scikit-learn:

  1. Đặt epsilon=0.15 theo đồ thị k-distance.
  2. Đặt min_samples=5 (2 * num_features, vì dữ liệu là 2D).
  3. Huấn luyện mô hình với dữ liệu và dự đoán các cụm.
# Perform DBSCAN clustering
epsilon = 0.15  # Chosen based on k-distance graph
min_samples = 5  # 2 * num_features (2D data)
dbscan = DBSCAN(eps=epsilon, min_samples=min_samples)
clusters = dbscan.fit_predict(X)

Trực quan hoá kết quả

Chúng ta tạo biểu đồ scatter cho các điểm dữ liệu, tô màu theo cụm được gán. Các điểm được phân loại là nhiễu thường có màu khác (thường là đen).

# Visualize the results
plt.figure(figsize=(10, 6))
scatter = plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis')
plt.colorbar(scatter)
plt.title('DBSCAN Clustering Results')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

Kết quả

Diễn giải kết quả

Cuối cùng, chúng ta in ra số lượng cụm tìm được và số điểm được phân loại là nhiễu. Điều này cung cấp tóm tắt nhanh về kết quả phân cụm.

# Print number of clusters and noise points
n_clusters = len(set(clusters)) - (1 if -1 in clusters else 0)
n_noise = list(clusters).count(-1)
print(f'Number of clusters: {n_clusters}')
print(f'Number of noise points: {n_noise}')

Kết quả

Số cụm: 2

Số điểm nhiễu: 5

Triển khai này cung cấp một quy trình trọn vẹn từ tạo dữ liệu đến diễn giải kết quả. Lưu ý rằng trong tình huống thực tế, bạn sẽ thay việc tạo dữ liệu mẫu bằng tải và tiền xử lý tập dữ liệu thật của mình.

Hãy nhớ, chìa khóa để phân cụm DBSCAN thành công thường nằm ở việc chọn tham số phù hợp. Đừng ngại thử nghiệm các giá trị epsilon và min_samples khác nhau để tìm lựa chọn tốt nhất cho tập dữ liệu cụ thể của bạn.

DBSCAN so với K-Means

Dù cả DBSCAN và K-Means đều là các thuật toán phân cụm phổ biến, chúng có những đặc điểm riêng khiến chúng phù hợp với các loại dữ liệu và trường hợp sử dụng khác nhau. Hãy so sánh để hiểu khi nào nên dùng mỗi thuật toán.

Đặc điểm

DBSCAN

K-Means

Hình dạng cụm

Có thể nhận diện cụm với hình dạng bất kỳ

Giả định cụm là lồi và xấp xỉ hình cầu

Số lượng cụm

Không cần chỉ định trước số cụm

Cần chỉ định trước số cụm (K)

Xử lý ngoại lai

Nhận diện ngoại lai như các điểm nhiễu

Buộc mọi điểm vào một cụm, có thể làm méo hình dạng cụm

Độ nhạy với tham số

Nhạy với tham số epsilon và MinPts

Nhạy với vị trí khởi tạo tâm và lựa chọn K

Mật độ cụm

Có thể tìm các cụm có mật độ khác nhau

Có xu hướng tìm các cụm có mức độ và mật độ không gian tương tự

Khả năng mở rộng

Kém hiệu quả hơn với tập dữ liệu lớn, đặc biệt dữ liệu nhiều chiều

Thường hiệu quả hơn và mở rộng tốt với tập dữ liệu lớn

Xử lý cụm phi cầu

Hoạt động tốt với cụm phi cầu

Gặp khó khăn với hình dạng phi cầu

Tính nhất quán kết quả

Cho kết quả nhất quán qua các lần chạy

Kết quả có thể khác nhau do khởi tạo tâm ngẫu nhiên

So sánh trực quan

Để minh hoạ các khác biệt này, hãy áp dụng cả hai thuật toán lên bộ dữ liệu hình vầng trăng của chúng ta

from sklearn.cluster import KMeans

# DBSCAN clustering
dbscan = DBSCAN(eps=0.15, min_samples=5)
dbscan_labels = dbscan.fit_predict(X)

# K-Means clustering
kmeans = KMeans(n_clusters=2, random_state=42)
kmeans_labels = kmeans.fit_predict(X)

# Visualize the results
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 6))

ax1.scatter(X[:, 0], X[:, 1], c=dbscan_labels, cmap='viridis')
ax1.set_title('DBSCAN Clustering')

ax2.scatter(X[:, 0], X[:, 1], c=kmeans_labels, cmap='viridis')
ax2.set_title('K-Means Clustering')

plt.show()

Đoạn mã này áp dụng cả DBSCAN và K-Means lên bộ dữ liệu và trực quan hoá kết quả song song.

Kết quả

Bạn sẽ thấy rằng

  1. DBSCAN xác định chính xác hai hình nửa vầng trăng là các cụm riêng biệt.
  2. K-Means gặp khó với hình dạng phi lồi, thường tách một vầng trăng thành hai cụm hoặc gộp phần của cả hai vầng trăng vào một cụm.
  3. DBSCAN có thể nhận diện một số điểm là nhiễu (thường có màu khác), trong khi K-Means gán mọi điểm vào một cụm.

Khi nào nên dùng DBSCAN?

Sau khi đã thấy DBSCAN hoạt động ra sao và so sánh với K-Means, hãy xem khi nào DBSCAN là lựa chọn đúng cho nhu cầu phân cụm. Các đặc tính độc đáo của DBSCAN khiến nó đặc biệt phù hợp với một số loại dữ liệu và miền bài toán.

Hình dạng cụm phức tạp 

Tiếp nối so sánh trước đó, DBSCAN thực sự phát huy khi xử lý các hình dạng cụm phi cầu. Nếu dữ liệu của bạn tạo thành các mẫu bất kỳ như hai nửa vầng trăng đã khám phá, DBSCAN có khả năng vượt trội so với các thuật toán truyền thống như K-Means. 

Ví dụ, trong phân tích địa lý, các cấu trúc tự nhiên như hệ thống sông ngòi hoặc đô thị hoá thường có hình dạng bất quy tắc mà DBSCAN có thể nhận diện hiệu quả.

Không biết trước số cụm

Một lợi thế lớn của DBSCAN là khả năng tự động xác định số lượng cụm. Điều này đặc biệt hữu ích trong phân tích dữ liệu khám phá, khi bạn có thể chưa biết cấu trúc ẩn của dữ liệu. 

Chẳng hạn, trong phân khúc thị trường: bạn có thể không biết trước có bao nhiêu nhóm khách hàng khác biệt. DBSCAN có thể giúp khám phá các phân khúc này mà không cần bạn đoán số cụm.

Tập dữ liệu có nhiễu 

Cách DBSCAN xử lý điểm nhiễu khiến nó vững vàng trước ngoại lai. Điều này rất quan trọng với nhiều tập dữ liệu thực tế, nơi lỗi đo lường hoặc dị thường khá phổ biến.

Ví dụ, trong hệ thống phát hiện bất thường cho an ninh mạng, DBSCAN có thể tách biệt hiệu quả các mẫu lưu lượng mạng bình thường khỏi những mối đe doạ tiềm ẩn.

Mật độ cụm khác nhau

Không như K-Means vốn giả định các cụm có mật độ tương tự, DBSCAN có thể nhận diện các cụm với mật độ khác nhau. Điều này đặc biệt hữu ích khi một số nhóm trong dữ liệu dày đặc hơn các nhóm khác.

Ví dụ có thể là phân tích phân bố thiên hà trong thiên văn học, nơi các vùng không gian có mật độ thiên thể khác nhau.

Hạn chế của DBSCAN và các lựa chọn thay thế

Sau khi tìm hiểu khi nào nên dùng DBSCAN, hãy xem các điểm yếu của nó và điểm qua hai lựa chọn thay thế, OPTICS và HDBSCAN.

Hạn chế

Dù mạnh mẽ, DBSCAN vẫn có những hạn chế cần lưu ý:

  1. Nhạy với tham số: Như đã bàn, việc chọn giá trị ε và MinPts phù hợp là tối quan trọng. Lựa chọn kém có thể dẫn đến kết quả phân cụm không tối ưu.
  2. Dữ liệu nhiều chiều: Hiệu năng DBSCAN có thể suy giảm với dữ liệu nhiều chiều do “lời nguyền chiều đo”.
  3. Mật độ thay đổi lớn: Mặc dù có thể xử lý các cụm có mật độ khác nhau, những khác biệt mật độ quá lớn trong cùng một tập dữ liệu vẫn là thách thức.
  4. Khả năng mở rộng: Với các tập dữ liệu rất lớn, DBSCAN có thể tốn kém tính toán hơn so với các thuật toán như K-Means.

Để cải thiện phân cụm, hãy áp dụng các kỹ thuật giảm chiều như PCA, t-SNE hoặc UMAP trước khi dùng DBSCAN. Điều này giảm nhiễu và cải thiện khả năng phát hiện vùng dày đặc của thuật toán.

OPTICS

Một lựa chọn thay thế hữu ích cho DBSCAN là OPTICS (Ordering Points To Identify the Clustering Structure). Phương pháp này khắc phục hạn chế dùng epsilon cố định của DBSCAN bằng cách điều chỉnh ngưỡng lân cận một cách động.

OPTICS hiệu quả hơn trên các tập dữ liệu có cụm với mật độ khác nhau và có thể làm lộ cấu trúc cụm mà DBSCAN có thể bỏ lỡ. Scikit-learn có tích hợp OPTICS trong mô-đun phân cụm, và nó dùng cùng giao diện với DBSCAN.

HDBSCAN

HDBSCAN (DBSCAN phân cấp) là phần mở rộng hiện đại của DBSCAN, xây dựng hệ phân cấp cụm dựa trên các mức mật độ thay đổi. Nó loại bỏ nhu cầu chọn epsilon thủ công và thường cho kết quả tốt hơn với ít tinh chỉnh tham số.

HDBSCAN thường vượt trội so với DBSCAN thuần trên các tập dữ liệu thực tế, nhiễu hoặc mất cân bằng. Nó có sẵn như một gói Python độc lập (hdbscan) và tích hợp tốt với scikit-learn.

Ví dụ thực tiễn về DBSCAN

DBSCAN được ứng dụng trong nhiều lĩnh vực.

Phân tích dữ liệu không gian

Trong hệ thống thông tin địa lý (GIS), DBSCAN có thể nhận diện các khu vực hoạt động cao hoặc đáng chú ý. Chẳng hạn, nghiên cứu ‘Uncovering urban human mobility from large scale taxi GPS data’ cho thấy DBSCAN có thể phát hiện các điểm nóng đô thị từ dữ liệu GPS taxi. 

Ứng dụng này cho thấy khả năng của DBSCAN trong việc nhận diện các vùng hoạt động dày đặc trong dữ liệu không gian, điều tối quan trọng cho quy hoạch đô thị và quản lý giao thông.

Xử lý ảnh 

DBSCAN có thể nhóm pixel thành các đối tượng riêng biệt cho các tác vụ như nhận dạng đối tượng trong ảnh. Một nghiên cứu có tiêu đề 'Segmentation of Brain Tumour from MRI Image – Analysis of K-means and DBSCAN Clustering' chứng minh hiệu quả của DBSCAN trong phân tích ảnh y khoa. 

Các nhà nghiên cứu đã dùng DBSCAN để phân đoạn khối u não trong ảnh MRI một cách chính xác, cho thấy tiềm năng trong chẩn đoán hỗ trợ máy tính và xử lý ảnh y tế.

Phát hiện bất thường 

Trong phát hiện gian lận hoặc giám sát sức khoẻ hệ thống, DBSCAN có thể cô lập các mẫu bất thường. Một nghiên cứu có tiêu đề 'Efficient density and cluster-based incremental outlier detection in data streams' minh hoạ việc áp dụng một biến thể DBSCAN cho phát hiện bất thường theo thời gian thực. 

Các nhà nghiên cứu đã áp dụng phiên bản gia tăng của DBSCAN để phát hiện ngoại lai trong luồng dữ liệu, có tiềm năng ứng dụng trong phát hiện gian lận và giám sát sức khoẻ hệ thống. 

Nghiên cứu này cho thấy DBSCAN có thể được điều chỉnh để nhận diện các mẫu bất thường trong luồng dữ liệu liên tục, một năng lực then chốt cho hệ thống phát hiện gian lận theo thời gian thực.

Hệ thống gợi ý

DBSCAN có thể nhóm người dùng có sở thích tương tự, giúp tạo ra gợi ý chính xác hơn. Ví dụ, nghiên cứu "Multi-Cloud Based Service Recommendation System Using DBSCAN Algorithm" cho thấy ứng dụng DBSCAN trong cải thiện lọc cộng tác cho hệ thống gợi ý. Các nhà nghiên cứu dùng DBSCAN như một phần của cách tiếp cận phân cụm để nhóm người dùng theo sở thích và đánh giá phim, từ đó tăng độ chính xác gợi ý phim.

Cách tiếp cận này cho thấy DBSCAN có thể nâng cao khả năng cá nhân hoá gợi ý trong các lĩnh vực như dịch vụ giải trí trực tuyến.

Kết luận

DBSCAN là một công cụ mạnh mẽ trong bộ công cụ của nhà khoa học dữ liệu, đặc biệt hữu ích khi làm việc với các tập dữ liệu phức tạp, nhiễu và chưa biết số cụm. Tuy nhiên, như mọi thuật toán, nó không phải là giải pháp “một cho tất cả”. 

Chìa khóa để phân cụm thành công nằm ở việc hiểu dữ liệu của bạn, điểm mạnh và hạn chế của các thuật toán khác nhau, và chọn đúng công cụ cho công việc. Trong nhiều trường hợp, thử nhiều cách phân cụm, bao gồm DBSCAN và K-Means, và so sánh kết quả có thể mang lại hiểu biết giá trị về cấu trúc dữ liệu của bạn.

Với thực hành và kinh nghiệm, bạn sẽ phát triển trực giác để biết khi nào DBSCAN có thể làm lộ các mẫu ẩn trong dữ liệu của bạn.

Bạn có thể tìm hiểu thêm về các công nghệ và phương pháp mà chúng ta đã đề cập trong bài đăng này trên DataCamp với các tài nguyên sau: 

Câu hỏi thường gặp về DBSCAN

Phân cụm DBSCAN là gì?

DBSCAN là một thuật toán phân cụm dựa trên mật độ, nhóm các điểm dữ liệu nằm gần nhau, nhận diện ngoại lai và có thể khám phá các cụm với hình dạng bất kỳ mà không cần chỉ định trước số lượng cụm.

DBSCAN khác gì so với phân cụm K-Means?

Không giống K-Means, DBSCAN có thể tìm các cụm với hình dạng bất kỳ, không cần chỉ định trước số cụm và có thể nhận diện ngoại lai như các điểm nhiễu thay vì buộc chúng vào cụm.

Các tham số chính trong DBSCAN là gì?

Hai tham số chính trong DBSCAN là epsilon (ε), xác định khoảng cách tối đa giữa hai điểm để được coi là hàng xóm, và MinPts, chỉ định số điểm tối thiểu cần có để tạo vùng dày đặc.

Khi nào tôi nên dùng DBSCAN thay vì các thuật toán phân cụm khác?

Hãy dùng DBSCAN khi xử lý các hình dạng cụm phi cầu, khi số cụm chưa biết, khi dữ liệu có thể chứa nhiễu hoặc ngoại lai, hoặc khi các cụm có thể có mật độ khác nhau.

Làm thế nào để triển khai DBSCAN trong Python?

Có thể triển khai DBSCAN trong Python bằng thư viện scikit-learn. Bài viết cung cấp hướng dẫn từng bước, bao gồm các đoạn mã, để thiết lập môi trường, chuẩn bị dữ liệu, chọn tham số và trực quan hoá kết quả.

Những hạn chế chính của DBSCAN là gì, và tôi có thể dùng gì thay thế?

DBSCAN gặp khó với các cụm có mật độ không đồng đều, dữ liệu nhiều chiều và tập dữ liệu lớn. Hãy dùng OPTICS hoặc HDBSCAN cho mật độ không đều, hoặc áp dụng PCA hay UMAP cho dữ liệu nhiều chiều trước khi dùng DBSCAN.


Author
Rajesh Kumar
LinkedIn

Tôi là một biên tập viên nội dung về khoa học dữ liệu. Tôi yêu thích sáng tạo nội dung xoay quanh các chủ đề AI/ML/DS. Tôi cũng khám phá các công cụ AI mới và viết về chúng.

Chủ đề

Các khóa học hàng đầu của DataCamp

Tracks

Chuyên viên phân tích dữ liệu trong Python

36 giờ
Phát triển kỹ năng phân tích dữ liệu của quý vị bằng Python. Nâng cao kỹ năng phân tích dữ liệu để xử lý, phân tích và trình bày dữ liệu. Không yêu cầu kinh nghiệm lập trình!
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow