DBSCAN (Yoğunluk Tabanlı Kümeleme (DBSCAN))

Yoğunluk tabanlı kümeleme algoritması; keyfi şekilli kümeler tespit eder ve aykırı noktaları gürültü olarak etiketler, küme sayısını önceden gerektirmez.

DBSCAN (Density-Based Spatial Clustering of Applications with Noise — Gürültüye Dayanıklı, Yoğunluk Tabanlı Uzamsal Kümeleme), veriyi kümelere ayırmak için noktaların birbirlerine olan yakınlığını ve yoğunluğunu kullanan bir kümeleme algoritmasıdır. Martin Ester, Hans-Peter Kriegel ve ekibi tarafından 1996'da önerilen bu algoritma, belirsiz şekilli (non-convex) kümeleri tanıma ve aykırı noktaları gürültü olarak tespit etme becerisiyle öne çıkar. DBSCAN iki temel parametre kullanır: epsilon (ε) ve minPts. Epsilon, bir noktanın komşuluk yarıçapını tanımlar; minPts ise bir noktanın çekirdek nokta (core point) sayılması için o yarıçap içinde bulunması gereken minimum komşu sayısıdır. Algoritma çekirdek noktaları, kenar noktaları ve gürültü noktalarını birbirinden ayırır: yeterince yoğun bölgelerdeki noktalar kümeler oluşturur, geri kalanlar gürültü olarak işaretlenir. K-Means'ın aksine DBSCAN küme sayısını önceden gerektirmez; verideki doğal yapıyı keşfeder. Küre şekilli olmayan, rastgele geometrik formdaki kümeleri başarıyla tespit edebilir. Gürültüye karşı sağlamlığı, coğrafi veri analizi ve anomali tespiti gibi gerçek dünya uygulamaları için son derece uygun bir araç haline getirir. Ancak çok boyutlu verilerde ε parametresini ayarlamak güçleşir ve boyutluluk lanetinden (curse of dimensionality) etkilenebilir. DBSCAN'ın geliştirilmiş varyantı HDBSCAN (Hierarchical DBSCAN), sabit epsilon yerine hiyerarşik bir yoğunluk eşiği kullanarak değişken yoğunluktaki kümeleri tanıyabilmektedir. Python'da scikit-learn kütüphanesi DBSCAN ve HDBSCAN için kullanıma hazır implementasyonlar sunar. Türkiye'de coğrafi bilgi sistemleri, perakende lokasyon analizi ve doğal afet noktası kümeleme çalışmalarında yaygın kullanım alanı bulmaktadır.

DBSCAN Nasıl Çalışır? Adım Adım Algoritma

DBSCAN, her nokta için ε yarıçaplı bir komşuluk bölgesi tanımlar. MinPts veya daha fazla komşuya sahip noktalar çekirdek nokta olarak sınıflandırılır ve bir kümenin çekirdeğini oluşturur. Bir çekirdek noktanın ε-komşuluğunda bulunan ancak kendisi çekirdek olmayan noktalar kenar nokta (border point) adını alır. Hiçbir çekirdek noktanın ε-komşuluğunda yer almayan noktalar ise gürültü (noise) olarak etiketlenir. Algoritma, birbirine yoğunluk-bağlantılı (density-connected) tüm noktaları tek bir kümede toplar ve bunu tüm veri noktaları işlenene kadar tekrarlar.

K-Means, DBSCAN ve Hiyerarşik Kümeleme Karşılaştırması

  • check_circle K-Means: Küme sayısını (k) önceden gerektirir, yalnızca küresel şekilli kümeler için uygundur, aykırı değerlere karşı duyarlıdır. Büyük verilerde hızlı ve ölçeklenebilir.
  • check_circle DBSCAN: Küme sayısı otomatik belirlenir, keyfi şekilli kümeler tespit edilebilir, gürültü noktaları açıkça etiketlenir. ε ve minPts parametre seçimi deneyim gerektirir.
  • check_circle HDBSCAN: DBSCAN'ın hiyerarşik versiyonu; sabit ε yerine adaptif yoğunluk eşiği kullanır. Değişken yoğunluktaki karmaşık kümeler için önerilir.
  • check_circle Aglomeratif Hiyerarşik Kümeleme: Dendrogram oluşturarak farklı çözünürlüklerde kümeleri görselleştirir. Küçük-orta ölçekli verilerde yorumlanabilirliği yüksek, büyük verilerde yavaş.

Parametre Seçimi: ε ve minPts Nasıl Belirlenir?

DBSCAN'ın başarısı doğru parametre seçimine bağlıdır. ε için yaygın yöntem k-en yakın komşu (kNN) grafiğidir: her noktanın minPts'inci en yakın komşusuna olan uzaklıklar sıralanır ve ani kırılma noktası ε olarak seçilir. minPts için genel kural boyut sayısının iki katı artı birdir (D×2+1); ancak gürültülü verilerde daha yüksek değerler tercih edilmelidir. Yüksek boyutlu verilerde boyutluluk laneti nedeniyle ε'nun anlamlı bir ayrım yapamaması durumu oluşabilir; bu durumda önce PCA ile boyut indirgeme uygulanması önerilir.

Uygulama Alanları

Coğrafi veri analizi

Harita üzerindeki olay noktalarını (trafik kazası, suç, deprem artçısı) doğal kümeler halinde gruplar; şehir planlaması ve güvenlik analizinde kullanılır.

Anomali tespiti

Gürültü olarak etiketlenen noktalar sistem anormalisi, kredi kartı dolandırıcılığı veya ağ saldırısı göstergesi olabilir.

Görüntü bölütleme

Piksel uzayında renk ve doku benzerliklerine göre bölgeler oluşturur; tıbbi görüntülemede tümör sınırlarını belirlemeye yardımcı olur.

Müşteri segmentasyonu

Satın alma davranışı verilerinde keyfi şekilli müşteri gruplarını tespit eder; zorla k adet küme oluşturulmasını gerektirmez.

Python'da DBSCAN Kullanımı

scikit-learn'de DBSCAN uygulamak birkaç satır kodla tamamlanır: `from sklearn.cluster import DBSCAN; db = DBSCAN(eps=0.5, min_samples=5).fit(X)`. Etiketler `db.labels_` ile alınır; -1 değeri gürültü noktalarını gösterir. HDBSCAN için `hdbscan` paketi veya scikit-learn 1.3+'daki yeni implementasyon kullanılabilir. Büyük veri setlerinde yaklaşık komşu araması (approximate nearest neighbor) ile hızlandırılmış DBSCAN varyantları tercih edilir: Ball Tree ve KD-Tree indeks yapıları performansı önemli ölçüde artırır.

Sık Sorulan Sorular

  • check_circle DBSCAN nedir?: Yoğunluk tabanlı kümeleme algoritmasıdır; veri noktalarını komşuluk yoğunluğuna göre kümeler ve aykırı noktaları gürültü olarak etiketler. Küme sayısını önceden belirtmeyi gerektirmez.
  • check_circle DBSCAN ile K-Means arasındaki temel fark nedir?: K-Means küme sayısını (k) önceden gerektirir ve yalnızca küresel kümeler için uygundur. DBSCAN küme sayısını otomatik belirler, keyfi şekilli kümeler bulur ve gürültü noktalarını açıkça tanımlar.
  • check_circle DBSCAN'ın ε (epsilon) parametresi nasıl seçilir?: kNN mesafe grafiği yöntemi kullanılır: her noktanın minPts'inci en yakın komşusuna mesafeleri sıralanarak ani kırılma noktası ε olarak belirlenir. Ayrıca alan bilgisi ve veri ölçeği de göz önünde bulundurulmalıdır.
  • check_circle DBSCAN büyük veri setlerinde çalışır mı?: Standart DBSCAN O(n log n) uzamsal indeksleme ile orta ölçekli verilerde verimli çalışır. Çok büyük veri setleri için HDBSCAN, mini-batch DBSCAN veya yaklaşık komşu araması kullanan varyantlar tercih edilir.
  • check_circle Python'da DBSCAN nasıl uygulanır?: scikit-learn kütüphanesinde `sklearn.cluster.DBSCAN` sınıfı mevcuttur. `DBSCAN(eps=0.5, min_samples=5).fit(X)` ile model kurulur; `-1` etiketli noktalar gürültü, pozitif etiketler küme üyeliğini gösterir.