DBSCAN từ con trăn đầu

Phân cụm là một kỹ thuật học tập không giám sát giúp tìm các mẫu trong dữ liệu mà không được thông báo rõ ràng mẫu cần tìm

DBSCAN thực hiện điều này bằng cách đo khoảng cách giữa mỗi điểm với nhau và nếu đủ các điểm đủ gần nhau, thì DBSCAN sẽ phân loại nó thành một cụm mới

Như đã thấy ở trên, có hai cụm riêng biệt trong Dữ liệu thử nghiệm. KMeans, một kỹ thuật phân cụm phổ biến khác, không thể phân cụm chính xác dữ liệu này vì KMeans tạo ra một ranh giới có thể phân tách tuyến tính giữa các cụm khi k=2

Thay vào đó, DBSCAN xác định các cụm dựa trên hai tham số. Epsilon và Min_Points

  • Epsilon - Khoảng cách tối đa mà một điểm có thể từ một điểm khác được coi là hàng xóm

  • Min_Points — Số điểm cần thiết trong phạm vi epsilon để được coi là một cụm

Lợi ích của DBSCAN

Nó yêu cầu kiến ​​thức miền tối thiểu để xác định các tham số đầu vào

Các thuật toán phân cụm khác như KMeans yêu cầu người dùng biết có bao nhiêu cụm tồn tại trong dữ liệu

Thay vì yêu cầu phải tìm bao nhiêu cụm, DBSCAN yêu cầu người dùng nhập khoảng cách tối đa mà mỗi điểm dữ liệu có thể được coi là một phần của cụm và cần bao nhiêu điểm dữ liệu để tạo thành cụm

Nó phát hiện ra các cụm có hình dạng bất kỳ

Vì DBSCAN tạo các cụm dựa trên epsilon và số lượng lân cận mà mỗi điểm có, nên nó có thể tìm thấy các cụm có hình dạng bất kỳ. DBSCAN hoạt động tốt nhất khi các cụm có cùng mật độ [khoảng cách giữa các điểm]. Khi có các cụm có mật độ khác nhau, điều này có thể khiến DBSCAN khó xác định các cụm

Dõi theo

Nhấp vào đây để mở Google Colab Notebook triển khai Scikit-Learns DBSCAN và DBSCAN2 từ đầu. Nếu bạn muốn tìm hiểu thêm về những gì đang diễn ra bên dưới mui xe thì hãy tiếp tục đọc

# Download the test package
pip install -i https://test.pypi.org/simple/ dbscan2==0.0.3

# Import it!
from dbscan2 import dbscan2

# If you would like to plot the results import the following
from sklearn.datasets import make_moons
import pandas as pd

Để hiểu và triển khai DBSCAN từ đầu, chúng ta sẽ cần biết cách DBSCAN phân cụm dữ liệu. Cùng với Epsilon và Điểm tối thiểu, có ba thuật ngữ cần thiết hơn để hiểu

  • Tiếng ồn - Đây là một điểm không có đủ hàng xóm trong epsilon để trở thành một phần của cụm [bao gồm cả chính nó]

  • Điểm biên giới — Đây là điểm có hàng xóm trong epsilon nhưng không đủ hàng xóm để trở thành điểm cốt lõi. Những điểm này tạo thành cạnh của cụm

  • Điểm cốt lõi — Điểm có Điểm tối thiểu cần thiết trong epsilon [bao gồm cả chính nó]. Các điểm này cùng với các điểm biên sẽ tạo thành một cụm

Chúng tôi sẽ triển khai DBSCAN bằng một Lớp và gọi nó là dbscan2. Nó sẽ có hai phương pháp chính. phù hợp và dự đoán

def __init__[]

Lớp sẽ được khởi tạo với hai mảng tính năng được tiêu chuẩn hóa, epsilon và số điểm cần thiết để tạo cụm. Nó cũng sẽ được khởi tạo với nhãn cụm và nhãn nhiễu

class dbscan2[]:
    def __init__[self,df, epsilon=1, min_points=5]:
        self.df = np.array[df]
        self.epsilon = epsilon
        self.min_points = min_points
        self.cluster_label = 0
        self.noise = 0

Chức năng trợ giúp

Chúng tôi sẽ sử dụng khoảng cách euclide để đo mỗi điểm cách nhau bao xa. Khoảng cách Euclide sẽ đo khoảng cách đường thẳng thông thường từ một cặp tọa độ này đến một cặp khác

def dist[self, point1, point2]:
    """Euclid distance function"""
    x1 = point1[0]
    x2 = point2[0]
    y1 = point1[1]
    y2 = point2[1]
# create the points
    p1 = [x1 - x2]**2
    p2 = [y1 - y2]**2
    return np.sqrt[p1 + p2]

Hàm trợ giúp khác mà chúng ta cần sẽ được gọi là rangeQuery. Hàm này sẽ giúp chúng ta tìm ra mỗi điểm có bao nhiêu láng giềng nằm trong epsilon

def rangeQuery[self, x]:
    """Query database against x and return all points that are 

Chủ Đề