DBSCAN Clustering คือ อะไร

DBSCAN Clustering คือ อะไร
Photo by Google DeepMind


ย่อจาก Density- Based Spatial Clustering of Applications with Noise

ถือเป็น Machine Learning ประเภท Unsupervised Learning ใช้ในการจัด Cluster

เป็น Density-based Clustering จัด Cluster โดยพิจารณาจากบริเวณที่มีความหนาแน่น โดยบริเวณที่มีความหนาแน่นน้อยอาจถูกพิจารณาเป็น Noise

🟢 ข้อดี

  • รูปร่างของ Cluster มีความยืดหยุ่น มากกว่า K-Means (K-Means จะทำบนสมมติฐานของ Cluster ทรงกลม เนื่องจากจัด Cluster โดยใช้ระยะทาง)
  • การจัดการกับ Noise สามารถระบุข้อมูลที่เป็น Outliers และพิจารณา Data Points เหล่านั้นเป็น Noise ได้
  • ไม่ต้องกำหนดจำนวน Cluster ก่อน การใช้งาน DBSCAN ไม่จำเป็นต้องระบุจำนวน Cluster ก่อนล่วงหน้า แตกต่างกับ K-Means

🔴 ข้อเสีย

  • ความยากกับความหนาแน่นที่แตกต่างกัน ประสบปัญหาเมื่อ Clusters มีความหนาแน่นต่างกันอย่างมีนัยสำคัญ
  • Border Points จุด (Data Point) หนึ่ง สามารถถูกพิจารณาอยู่ใน 2 Clusters ได้ ทำให้จุดที่อยู่บริเวณ Border ไม่มีความชัดเจน
  • ความไวของพารามิเตอร์ (Sensitivity) ผลลัพธ์สามารถแตกต่างกันไปตาม Distance Parameter (Epsilon) และ Minimum Points

Applications

  • Spatial Data Analysis สามารถใช้ Identify พื้นที่ที่มีความหนาแน่นสูง เช่น ความหนาแน่นของประชากรจาก Geographical Data
  • Anomaly Detection ตัวอย่างของข้อมูล Credit Card Transaction สามารใช้ในการ Identify Pattern ที่ผิดปกติได้ ใช้ในการตรวจจับการฉ้อโกง (Fraud)
  • Image Segmentation แยกระหว่าง Object (foreground) และ Background ในรูปภาพ

ตัวอย่าง Python Code 👨🏻‍💻 โดยใช้ Scikit Learn Library

ใช้ DBSCAN Algorithm

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt

# Create Data Points
data, label = make_moons(n_samples=500, noise=0.05, random_state=0)

# Using DBSCAN Algorithm
dbscan = DBSCAN(eps=0.3, min_samples=5)
clusters = dbscan.fit_predict(data)

# Visualizing Result
plt.scatter(data[:,0], data[:,1], c=clusters)
plt.title("DBSCAN Clustering Result")
plt.show()

กรณีใช้ K-Means Algorithms ผลลัพธ์จากการ Cluster จะไม่มีประสิทธิภาพสำหรับ Dataset ชุดนี้ ❌

from sklearn.cluster import KMeans
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt

# Create Data Points
data, label = make_moons(n_samples=500, noise=0.05, random_state=0)

#Using K-Means Algorithms
kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").fit(data)


# Visualizing Result
plt.scatter(data[:,0], data[:,1], c=kmeans.labels_)
plt.title("K-Means Clustering Result")
plt.show()

******

อ่านเพิ่มเติม Pros & Cons ของ Machine Learning Algorithms ที่นิยมใช้

******

ข้อมูลอ้างอิง - Analytics Vidhya