Gelecegi yazanlar logo

Bloga geri dön

Yapay Zeka/Makine Öğrenmesi

Denetimsiz Öğrenmede Kümeleme Algoritmalarının Karşılaştırmalı Uygulaması: K-Means ve DBSCAN

Denetimsiz öğrenmede kullanılan kümeleme algoritmalarından K-Means ve DBSCAN’in farklarını keşfet! Karşılaştırmalı analiz ve detayları için hemen incele!
Blog image

Makine öğrenmesinde veriler üzerindeki örüntüler incelenerek, veri içerisindeki anlamlı yapı ve ilişkilerin ortaya çıkarılması amaçlanır. Eğer elimizdeki veriler etiketli veriyse (örneğin bir e-postanın spam olup olmadığı biliniyorsa) gözetimli öğrenme kullanılır, ancak gerçek dünya verilerinin büyük bir kısmı etiketsizdir. Bu nedenle, bu tarz durumlarda veriler gözetimsiz öğrenme kullanılarak aralarındaki benzerliklere göre gruplandırılır.



Kümeleme (Clustering) Nedir? 

Kümeleme, gözetimsiz öğrenmede en sık kullanılan yöntemlerden biridir. Etiketli veriye ihtiyaç duymadan, veriler arasındaki benzer noktalar bir araya getirilerek veri içerisindeki anlamlı ilişkiler ortaya çıkarılır. Kümeler oluşturulurken verinin dağılımı dikkate alınır. 


Bu algoritmaların amacı, aynı gruptaki verilerin birbirine olabildiğince yakın, farklı gruplardaki verilerin ise birbirinden uzak olmasını sağlamaktır. Böylece karmaşık veri yığınları arasında gizli kalmış örüntüler ve ilişkiler belirgin hale gelir. Bu, aynı zamanda benim de gözetimsiz öğrenme projelerimde oldukça tercih ettiğim bir yöntemdir. Veriyi kümelere ayırma, ilk başta kolay uygulanabilir bir fikir gibi gelmişti, ama işin içine girdikçe ne kadar karmaşık ve etkili olabileceğini fark ettim. Özellikle yüksek boyutlu verilerde hangi noktanın hangisine “benzer” olduğunu belirlemek sanıldığından çok daha fazla sezgi gerektiriyor. 


Kümeleme yöntemlerinin başlıca kullanım alanlarından bahsedersek:

- müşteri segmentasyonu

- sahtekarlık tespiti 

- sosyal ağ analizi 

- görüntü işleme 

- biyoinformatik gibi birçok alanda kullanılmaktadır. 


Kullanılan veri setleri her zaman birbiriyle benzer yapıda olmayabilir, bazı veriler dairesel kümeler oluştururken bazıları farklı yoğunluklara sahip olabilir ve aykırı değerler içerebilir. Bu nedenle her veri türüne özel kümeleme algoritmaları kullanılır. Bu yazıda sizlere en sık kullanılan K-Means ve DBScan algoritmalarından uygulamalı örnekler üzerinden bahsedeceğim. Her iki yöntem de verileri gruplamak için kullanılsa da, izledikleri yöntem, dayandıkları varsayımlar ve başarılı oldukları veri yapıları birbirinden oldukça farklıdır. Şimdi bu iki algoritmanın nasıl çalıştığını ve aralarındaki temel farkları inceleyelim;



1) KMEANS: 

En yaygın kullanılan kümeleme algoritmalarından biri olan K-Means, temel amacı verileri k adet kümeye ayıran ve her bir veri noktasını en yakın küme merkezine atayan bir gözetimsiz öğrenme yöntemdir. Buradaki “k” değeri verilerin kaç kümeye ayrılacağını gösterir ve kullanıcı tarafından belirlenip algoritmaya verilir. 


Peki K-Means tam olarak nasıl çalışıyor? 

Öncelikle kullanıcı olarak kaç tane küme istediğimize karar vermemiz gerekiyor. Bu sayı genelde sezgisel olarak ya da Elbow yöntemi gibi tekniklerle belirleniyor. Diyelim ki 3 küme istiyoruz. Algoritma şöyle bir yol izliyor: 

-Rastgele 3 merkez noktası seçiyor (başlangıçta bu noktalar tamamen tesadüfi)

-Elimizdeki tüm veri noktalarını bu merkezlere olan uzaklıklarına göre en yakına atıyor.

-Her grubun (yani her kümenin) ortalama koordinatını hesaplayıp, o grubu temsil eden yeni merkezleri güncelliyor. 


Ve bu işlemi yani noktaları gruplara ayırmayı ve merkezleri güncellemeyi, merkezler artık yer değiştirmeyene kadar tekrarlıyor. 

Bu adımlar biraz bana göre “kendi kendine öğrenen ama başlangıçta biraz bocalayan bir çocuk” gibi çalışıyor. İlk tahminleri pek tutarlı olmasa da, tekrar ettikçe daha anlamlı kümeler oluşturuyor. 

KMeans’in nasıl çalıştığını daha iyi anlayabilmek için örnek bir uygulama yapalım: 


KMeans ile Başarı Düzeyine Göre Öğrenci Gruplama: 

Bu örneği seçme sebebim kümeleme algoritmalarını gerçek hayat dayalı bir problem üzerinde kullanarak sizlere algoritma davranışlarını gösterebilmek. Çünkü gerçek hayattaki veriler çoğu zaman karmaşık ve düzensizdir; her zaman etiketli şekilde elimize ulaşmaz ve bu yüzden doğal gruplandırma yöntemlerine ihtiyaç duyarız. 


Aşağıda öğrenci notlarını etiketli veri olmadan, otomatik olarak üç gruba ayıran bir K-Means algoritması örneğini inceleyelim;





K-Means grafiğini yorumlayalım: 


-Bu grafikte KMeans algoritması tarafından , öğrenci notları otomatik olarak üç gruba ayrıldı. 

-Grafikteki renkli noktalar öğrenci kümelerini gösteriyor, kırmızı X işareti ile gösterilen yerler ise her kümenin merkezini temsil ediyor. 

Bu uygulamayı yaparken dikkatimi çeken şey şu oldu; model hiçbir etiketli veri kullanmadan, yalnızca sayılarla (yani matematik ve Türkçe notlarıyla) kendi içinde anlamlı gruplar oluşturdu, denetimsiz öğrenmede ilk kez çalıştığımda bu kadar az bilgiyle bu kadar net bir ayrım yapılabilmesi beni gerçekten şaşırtmıştı. 

Gerçek hayattaki örnek veri girdileri tabii ki bu kadar sade olmayabilir ama algoritmanın bu davranışını gözlemlemek mantığını kavramak açısından bana çok şey kattı.


2) DBSCAN: 

Denetimsiz öğrenmede yine yaygın bir biçimde kullanılan algoritmalardan biri olan DBSCAN, yoğunluk temelli bir yaklaşımla çalışır. Küme oluştururken belirli bir yarıçap içerisindeki komşu noktaların sayısını baz alarak, hiçbir kümeye dahil olmayan aykırı (gürültü olarak adlandırdığımız “noise” da dahil olmak üzere) noktaları etiketleyerek çalışır ve bu sayede daha esnek sonuçlar elde edebiliriz. 


KMeans’tan farklı olarak küme sayısını bilmemiz gerekmez, bunun yerine aşağıdaki parametreleri kullanmamız gerekir: 


eps: Komşu noktalar için yarıçap 

min_samples: Küme oluşturmak için gereken minimum nokta sayısı 


DBScan çalışırken önce verileri üç noktaya ayırır; 

-Core point: eps içinde en az min_samples noktası 

-Border point: Core noktaya komşu ama yeterli yoğunlukta olmayan noktalar

-Noise: Hiçbir kümeye ait olmayan (outlier) 


Şimdi bu yapıların öğrenci bilgi sisteminde nasıl çalıştığını adım adım inceleyelim: 


DBSCAN ile Öğrenci Notlarına Göre Başarı Segmentasyonu:

Bu örnekte, öğrencilerin sadece ders notlarıyla değil, derse katılım ve dersteki aktiflik durumu gibi parametreleri de kullanarak gerçek hayata yönelik bir gruplama yapacağız; 


-import numpy as np = NumPy (Numerical Python) 

veriler üzerinde matematiksel işlemlerin daha hızlı ve kolayca yapılabilmesi için kullanılır. 

-import pandas as pd = Verileri DataFrame formatında düzenlemek ve daha kolay incelemek için kullanılır. 

-import matplotlib.pyplot as plt = Verileri görselleştirmek için kullanılır. 

-import seaborn as sns = Matplotlib'in daha gelişmiş grafikler çizimi için kullanılan versiyonu olarak düşünebilirsiniz. 

-from sklearn.preprocessing import StandardScaler = Veri setindeki tüm değerleri aynı ölçek aralığına çeker. 

-from sklearn.cluster import DBSCAN = Yoğunluk tabanlı kümeleme yöntemidir.





Veriyi Görselleştirme: 2 Boyutlu PCA ile Küme Dağılımı 

Görselleştirme işlemi için 4 boyutlu verimizi 2 boyuta indirip gösterelim:




Bu defa öğrenci verilerini sadece notlarla değil, devamsızlık ve online aktivitelere katılım durumu gibi gerçeğe dayalı faktörleri de kullanarak bir DBScan değerlendirmesi yapmak istedim. 

DBSCAN’in bazı öğrenci gruplarını doğal kümeleme ile gruplayabildiğini ancak aykırı değerleri -1 etiketiyle “aykırı” olarak işaretlediğini gözlemledim.

 

Örneğin; 20 puan alıp hiç devamsızlık yapmayan bir öğrenci, aykırı olarak değerlendirilerek hiçbir kümeye dahil edilmedi.

Bu durum bana şunu düşündürdü: DBScan sadece kümeleri değil kümelenemeyen verileri de kendi tanımlıyor ve onları ayrıca gruplandırıyor ve bu bence oldukça önemli bir özellik çünkü gerçek hayattaki her durum her zaman standart bir gruba dahil olmayabiliyor. 


Şehir Gürültü Yoğunluğuna Göre Bölge Segmentasyonu: KMeans ve DBSCAN Uygulamalı Karşılaştırma 

Bu aşamaya kadar KMeans ve DBSCAN algoritmalarının temel mantığı üzerine yoğunlaştık ve veri setlerinde nasıl çalıştığını gözlemledik. Şimdi de gerçek dünya problemlerine yakın bir örnek üzerinden biraz pekiştirme yapalım: 

Problem Tanımı: 

Büyük bir şehirde yaşadığınızı hayal edin, belediye sizden şehirdeki gürültü seviyelerine göre bölge planlaması yapmanızı istiyor. Burada amacınız şehirdeki alanları ses seviyelerine, trafik yoğunluklarına ve günün hangi saatlerinde gürültünün yoğunlaştığına göre anlamlı segmentlere ayırmak. Böylelikle; 

-Gürültüye karşı daha hassas alanlar (okullar, hastaneler) korunabilir, 

-Trafik akışları optimize edilebilir, 

-Sosyal medya analizleriyle yerel şikayetler yorumlanabilir. 


1-Veri Setinin Oluşturulması 

Ses_dB: Desibel cinsinden bölgedeki ortalama ses seviyesi 

Trafik yoğunluğu: (0-1 arasında oran kullandık) 

Zaman: Gürültünün genellikle yoğunlaştığı saatler (örneğin sabah 08:00, öğle 13:00, akşam 19:00 gibi) 

Bu sayede 3 farklı tipte bölge oluşturmaya çalıştık: 

-Gürültülü ve yoğun trafik bölgeleri (örneğin şehir merkezleri) 

-Orta yoğunluktaki yerler 

-Sessiz, sakin mahalleler 

Bu yapay veri seti sayesinde, hem KMeans hem de DBSCAN algoritmalarının şehirdeki gürültü örüntülerini nasıl yakalayabildiğini gözlemleyebileceğiz:

Trafik yoğunluğu günlük şehir yaşamında karşılaşılabilen bir durum olduğu için analizde kullanmak üzere ekleyebiliriz. 

Gürültü yoğunluğu saatlere göre farklılık gösterebildiği için, önemli bir nokta olduğunu düşünerek analiz aşamasına eklemek istedim: 

np.random.normal fonksiyonu, değerlerin belirli bir ortalama (mean) ve standart sapma (scale) ile üretilmesini sağlar. Böylece çeşitlilik ve gerçekçi sonuçlar sağlanır.


Verileri bir pandas.DataFrame içerisine koyarak daha rahat analiz edilebilir hale getiriyoruz. Bu yapı, model eğitiminden görselleştirmeye kadar tüm süreçte kullanılımaktadır. 



Şehir Gürültüsü Nerede Yoğunlaşıyor? 

Modellemeye geçmeden önce oluşturduğumuz veri setine bir göz atmak istedim. Aşağıda gördüğünüz grafik, her bir değişkenin hem kendi içindeki dağılımını hem de diğer değişkenlerle olan ilişkisini gösteriyor:




Bu görselleştirme ile verilerin kümelenebilir bir yapıya sahip olup olmadığını anlamaya çalıştık. 


Bu grafik ses seviyesi, trafik yoğunluğu ve saat verilerine bakarak şehir genelinde nasıl bir yapı oluşturduğunu anlamamıza yardımcı oluyor: 

Ses_dB (gürültü seviyesi) dağılımına baktığımızda, verilerin üç farklı tepe noktası etrafında toplandığını görüyoruz. (Yüksek, orta ve düşük yoğunlukta gürültü anlamına geliyor) 


Trafik Yoğunluğu: 0 ile 1 arasında bir oranda ölçülen trafik değerleri de yine üç kümelenmeye sahip. 0.8 üzeri değerler yüksek trafik bölgelerini (örneğin şehir merkezlerini), 0.3–0.7 arası orta düzey yolları, 0.3 altı ise sessiz, daha sessiz sakin yerleri temsil ediyor. 


Zaman verisi: Sabah (8 civarı), öğle (13 civarı) ve akşam (19 civarı) olmak üzere üç farklı saat diliminde yoğunlaşan gürültü seviyeleri simüle edilmiş oldu. Bu, gerçek hayattaki gürültü örüntülerinin (örneğin sabah trafiği ya da akşam saatlerindeki pik gürültüler) daha iyi anlaşılmasını sağlıyor. 




Bu grafikte özellikle dikkatimizi çeken bir diğer nokta ise, ses seviyesi ile trafik yoğunluğunun doğrudan ilişkili olması. Yani bir bölgede trafik ne kadar yoğunsa gürültü seviyesi de o kadar yükseliyor. Diğer yandan gürültü ile zaman arasında da ters bir ilişki var gibi görünüyor. Sabah saatlerinde gürültü daha yüksekken, akşam saatlerine doğru bir azalma eğilimi görüyoruz. Bu da gerçek şehir hayatıyla oldukça uyumlu bir senaryo aslında. 


Bu analiz sayesinde modelleme aşamasına geçmeden önce verinin bize ne anlatmaya çalıştığını daha iyi anlıyoruz. 


Artık veriyi hazırladığımıza göre bu örüntüleri KMeans ve DBSCAN algoritmalarıyla analiz etmeye başlayabiliriz: 



Veri Ölçeklendirme Aşaması(Scaling): 


Elimizdeki veriler bazen çok büyük sınırlarda bazen de daha küçük aralıklarda yer alır. Örneğin; 


-Ses_dB: 30 ila 90 arasında değer alıyordu, 


-Trafik yoğunluğu ise 0 ile 1 arasında bir oran olarak verilmişti, 


-Zaman: Günün saati olduğu için 0–24 arası değişiyor. 


Biri desibel cinsinden, diğeri oran belirtiyor, bir diğeri ise zaman…aslında her biri kendi biriminde uygun aralık ve mantık içerisinde bulunuyor. Fakat bunları algoritma üzerinde kullanmadan önce ölçekleme işlemi yapmamız gerekiyor. 


Örneğin; KMeans gibi algoritmalar iki nokta arasındaki mesafeyi kullanarak gruplama yapar ama veriler farklı aralıklarda ise, algoritma büyük olan değişken daha önemliymiş gibi davranır. Örneğin; “Ses_dB” daha büyük sayılarla ifade edildiği için model neredeyse sadece bu veriye odaklanıp diğerlerini yok sayabilir ve bu da gruplamayı bozabilir. 


Bu yüzden bu tür modelleri kullanmadan önce ölçeklendirme (scaling) yapmamız gerekir.


Biz bu projede biz StandardScaler kullandık. 

StandardScaler ne yapıyor? 


-Tüm değişkenlerin ortalamasını 0’a getiriyor,

-Standart sapmasını da 1 yapıyor. 


Yani aslında her değişkeni karşılaştırılabilir hale getirdiğini söyleyebiliriz. Ve bu sayede model, verilerin yapısını daha doğru analiz edebiliyor. O zaman bir sonraki aşamada bu ölçeklenmiş veriyi KMeans algoritması ile nasıl gruplandıracağımıza bakalım: 


1) KMeans Uygulaması ile Gürültüye Göre Şehir Segmentasyonu 


Ölçeklendirme işlemini bitirdiğimize göre artık elimizde analize hazır bir veri seti var. Şimdi bu veriyi alıp KMeans algoritmasıyla gruplayacağız ama başlamadan önce; KMeans, kaç tane küme oluşturacağını bizim söylememizi istiyor. 


Eğer bu sayı (k) yanlış belirlenirse, model veriyi ya gereğinden fazla sayıda gruba ayırır ya da birbiriyle benzer olmayan verileri aynı gruba toplar. Bu tarz durumlarda doğru k değerini bulabilmek için Elbow Yöntemi kullanılır. 


KMeans’te Optimal Küme Sayısını Belirlemek – Elbow Yöntemi 

KMeans, kümeleri oluştururken her bir noktanın merkezine olan uzaklığını minimuma indirmeye çalışır. Biz de farklı k değerleri için toplam uzaklığı hesaplayabiliriz. Bu işleme SSE (Sum of Squared Errors) denir. 


Farklı k değerleri için modelin hata oranı hesaplanıp grafik çizilir. Bu grafik çoğu zaman önce hızlıca düşer, bir noktadan sonra yavaşlamaya başlar; işte bu yavaşlamanın başladığı yer “elbow” noktasıdır. Bu noktadaki değer, en optimum k değeri olarak belirlenir. 



Elbow Grafiği Oluşturma: 



Elde edilen grafik görüntüsü şu şekildedir;


Elbow Grafiğinin Yorumu: 


Bu grafikte, genellikle “dirsek” (elbow) oluşan noktaya odaklanılır. Grafik üzerindeki bu kırılma noktası daha fazla küme eklemenin gerekli olmadığını göstermektedir. Örneğin; grafik 3’te belirgin şekilde kırılıyorsa, k = 3 küme kullanmak mantıklıdır. 


Bunu şehir gürültüsü verisi özelinde düşündüğümüzde bu 3 grup büyük ihtimalle şöyle ayrılır: 


-Gürültülü bölgeler (örneğin şehir merkezleri, ana yollar çevresi) 


-Orta düzeyde gürültülü bölgeler (karma konut–ticaret alanları, ulaşım bağlantıları)


-Sessiz ve sakin bölgeler (mahalleler, park çevreleri vb.) 




KMeans Modelinin Uygulanması 

Artık elimizde en optimum k değeri olduğuna göre modeli eğitip verimizi gruplayabiliriz. Aşağıdaki kodda k=3 kullandık ama siz kendi Elbow grafiğinize göre bu değeri değiştirebilirsiniz:



Sonuçların Görselleştirilmesi: 


Bu aşamada, kümeleri iki değişken üzerinden (örneğin Ses_dB ve Trafik) çizerek görselleştireceğiz. Böylece hangi veriler hangi kümede ve kümeler gerçekten doğru şekilde ayrılmış mı bunları gözlemleyeceğiz. 


Görselleştirme işlemleri, modelin mantıklı sonuçlar üretip üretmediğini kontrol etmenin en pratik yollarından biridir.



KMeans Sonuçlarının Yorumlanması: 

-Bu grafikte, K-Means algoritmasının şehirdeki her lokasyon için gürültü seviyesi (Ses_dB) ve trafik yoğunluğu verilerine göre atadığı kümeler gösteriliyor. 

-Grafikteki her bir nokta şehirdeki bir veri noktasını (yani lokasyonu) temsil ediyor, noktaların renkleri ise ait oldukları kümeyi ifade ediyor. 

-Küme yapılarının oldukça belirgin olduğunu söyleyebiliriz. Veriler belirli bölgelerde kümelenmiş durumda ve bu kümeler genel olarak birbiriyle örtüşmeyen alanlara yayılmış. 

Örneğin; 

Yüksek ses -> Yüksek trafik yoğunluğu olan alanlar ayrı kümelerde toplanmış, 

Düşük ses -> Düşük trafik yoğunluğu olan bölgeler farklı bir grubu temsil ediyor. 

Aslında bu KMeans’in kümelere ayırma konusunda ne kadar başarılı olduğunu ve veri setindeki örüntüyü doğru bir şekilde yakalayabildiğini göstermektedir. 

-Grafikte dikkatimizi çeken bir diğer nokta ise; bazı kümeler yalnızca birkaç veri noktası içermekte. Bu durumda şöyle bir yorum yapabiliriz; 

Belki de seçilen küme sayısı biraz fazla olabilir ya da bazı küçük varyasyonları da yeni kümeler olarak algılamış ve gereğinden fazla bölünme oluşturmuş olabilir. 

Bu tarz durumlarda küme sayısını belirlerken kullandığımız Elbow metoduna tekrar dönüp optimum değeri daha dikkatli seçmek faydalı olabilir.

-Kümeler dairesel değil. Görselde fark edebileceğimiz gibi kümeler çoğu zaman dairesel veya simetrik değil. Ancak bu algoritma her zaman bu şekilde dairesel küme varsayımıyla çalışır. 

Yani bazı lokasyonlar yapay olarak birbirinden ayrılmış olabilir, böyle durumlarda ise daha esnek ve yoğunluğa duyarlı bir algoritma olan DBSCAN kullanılması oldukça önemlidir. 

-Trafik ve ses arasında korelasyon ilişkisi: 

Veride açıkça görüldüğü gibi trafik yoğunluğu arttıkça ses seviyesi de artma eğiliminde. 

Bu ilişki modelin öğrenme sürecini de destekliyor; çünkü şehir yaşamında bu iki değişken genellikle birlikte hareket ediyor. Şehir karmaşıklığı oranı vs (gürültü+trafik) 

DEĞERLENDİRME AŞAMASI 

Peki, K-Means ne kadar başarılı oldu? 

K-Means bu senaryodaki veri kümesinde ana segmentleri yakalama konusunda gayet başarılıydı ama aykırı değerler ve karmaşık, düzgün-dairesel yapıda olmayan veri sınırları olduğu zaman bu algoritmanın biraz sınırlı kalabildiğini farkettim. 

İki algoritma arasındaki çalışma farkını daha iyi anlayabilmek için hemen aşağıda DBSCAN algoritması ile tekrar aynı veriler üzerinde çalışarak farklılıkları gözlemleyeceğiz. 


2) DBSCAN ile Gürültüye Duyarlı Bölge Segmentasyonu 

K-Means ile temel kümeleri oluşturduk ancak gerçek dünya verisi çoğu zaman düzgün dağılım göstermez ve eşit yoğunluğa sahip olmayabilir böyle durumlarda K-Means bazı bölgeleri yanlış sınıflandırabilir ya da aşırı kümeleme yapabilir. Tam da bu noktaya devreye DBSCAN giriyor: 

DBSCAN Nedir? Neden Bu Algoritmayı Seçtik? 

DBSCAN (Density-Based Spatial Clustering of Applications with Noise), yoğunluk temelli bir kümeleme algoritmasıdır. Gerçek dünyadaki karmaşık verilerle çalışırken oldukça etkili bir algoritmadır. 

DBSCAN’ın avantajlarına bakarsak; 

-Küme sayısını önceden belirlememiz gerekmez. 

-Kümeler verinin yoğunluk yapısına göre otomatik olarak oluşturulur.

-Aykırı (gürültülü) noktalar -1 ile işaretlenerek ayrı tutulur. 

-Dairesel olmayan, düzensiz yapılarda bile gayet başarılı sonuçlar verir. 

Özellikle şehir haritaları, trafik örüntüleri gibi düzensiz ve karmaşık veri yapılarında bu esneklik büyük bir avantaj sağlar. 

Yani DBSCAN, gerçek veriler üzerinde doğala daha yakın yaklaşımlar sunar. 


DBSCAN Çalışma Mantığı: 

DBSCAN yoğunluğa göre kümeler oluşturur fakat bunu yaparken doğru sonuçlara ulaşabilmemiz için aşağıdaki iki noktaya dikkat etmek oldukça kritik: 

eps (epsilon) : Komşuluk yarıçapı 

Bir noktanın çevresine bakarken belirli mesafe içerisinde kalan noktalar komşu nokta sayılır. Eps, bu mesafeyi ayarlayan parametredir, yakın çevrenin ne kadar geniş olacağını belirler. Eğer bu sayı çok küçük seçilirse nokta tamamen yalnız kalır. Komşu noktası olmaz fakat çok büyük seçildiği zaman algoritma daha fazla yanlış sayıda noktayı komşu nokta olarak algılayabilir. 

min_samples : Komşu sayısı 

Bir noktanın çekirdek nokta sayılabilmesi için çevresinde en az kaç adet komşu nokta olması gerektiğini min_samples belirliyor. 

DBScan algoritması, bu iki parametre sayesinde hem küme oluştururken hem de dışarıda kalan aykırı (gürültü olarak da bahsettiğimiz noktalar buna dahil) noktaları da ayrıca etiketlemiş oluyor. 

Yani aslında temel çalışma mantığının, komşu noktalarla kümeler-gruplar kurup aykırı verileri dışarıda bırakmak olduğunu söyleyebiliriz. 


Adım Adım DBSCAN Uygulaması Yapalım: 

DBSCAN’i doğrudan uygulayarak veriyi nasıl kümelere ayırdığını adım adım görelim:

-Öncelikle veriyi ölçeklememiz gerekiyor. 

-Daha sonra model tanımını yapıyoruz (eps ve min_samples değerlerini veriyoruz).

-Ardından modeli çalıştırarak sonuçları gözlemleyeceğiz. 


Dipnot: DBSCAN veri yapısına göre esnek kümeler çıkarır ve outlier'ları -1 etiketiyle ayırır. Hemen aşağıda bu etiketleri grafik ile görselleştireceğiz 


Veri Görselleştirme Aşaması: 

Modelden aldığımız DBSCAN_Cluster etiketlerini kullanarak veriyi 2 boyutta görselleştireceğiz. 

X ekseni: Ses seviyesi (dB) 

Y ekseni: Trafik yoğunluğu 


Burada her nokta DBSCAN’in verdiği kümeye göre renklenmiş olacak ve bu sayede kümelerin ayrımı net bir şekilde görünürken, -1 ile etiketlenen aykırı noktalar da diğerlerinden ayırt edilebilir olacak.




DBSCAN Sonuçlarının Yorumlanması 

Yukarıdaki grafikte DBSCAN algoritmasının şehir gürültü verisi üzerinde yaptığı segmentasyonu görüyoruz. Bu algoritma verideki doğal yoğunluklara göre kümeler oluşturur ve bu kümelere dahil olamayan (aykırı değerler dediğimiz) gürültülü noktalar -1 etiketiyle ayrı tutulur. Bu sayede daha gerçekçi bir segmentasyon yapılıyor. 


DETAYLI GRAFİK ANALİZİ: 

Turuncu ve yeşil kümeler, belirgin yoğunluk bölgelerini temsil ediyor. Bu bölgeler şehirde benzer ses ve trafik özelliklerine sahip alanlar olabilir. 

Mavi renkle gösterilen -1 kümesi, DBSCAN’in kümelere dahil edemediği noktaları temsil ediyor. Bu noktalar, ya veri yapısına uymayan aykırı değerlerdir ya da çevresinde yeterince yoğunluk olmadığı için kümelenememiş noktalardır. 

Örneğin; sabah saatlerinde ses seviyesi düşük ama trafik yoğunluğu yüksekse, bu alışılmadık kombinasyon DBSCAN tarafından aykırı olarak tanımlanabilir. K-Means ise bu farkı yakalayamaz, çünkü sadece mesafeye odaklandığı için veriyi yanlış kümeye dahil edebilir. 

K-Means’e kıyasla DBSCAN, özellikle yoğunluk farklılıklarının bulunduğu veri setlerinde daha esnek davranır ve aykırı değerleri daha başarılı şekilde ayıklayabilir.


Genel Değerlendirme: 

Bu çalışmada çok boyutlu bir veri seti üzerinden K-Means ve DBSCAN algoritmalarıyla bölgesel segmentasyon uygulaması gerçekleştirdik. 

K-Means, verileri önceden belirlenen küme sayısına göre daha düzenli ve simetrik gruplara ayırırken, DBSCAN verideki doğal yoğunluk desenlerine göre esnek kümeler oluşturdu ve aykırı değerleri (-1 etiketiyle) ayrıca tanımlayarak bize daha gerçekçi bir sonuç sunmuş oldu. 


İki algoritmanın temel farklarını şöyle özetleyebiliriz: 

-Küme Sayısı 

K-Means: Küme sayısını önceden belirtmek gerekir. 

DBSCAN: Küme sayısı yoğunluğa göre otomatik olarak belirlenir. 

-Küme şekil ve yapısı 

K-Means: Dairesel ve simetrik kümelerde başarılıdır. 

DBSCAN: Karmaşık, düzensiz ve yoğunluğu değişen yapılarda daha başarılıdır. 

-Aykırı Değerlerle Başa Çıkma 

K-Means: Aykırı değerleri kümeye dahil edebilir. 

DBSCAN: Aykırı değerleri tespit edip (-1 ile) dışlar. 

- Veri Yoğunluğu Duyarlılığı 

K-Means: Yoğunluk farklarını ayırt edemez. 

DBSCAN: Yoğunluk temelli çalıştığı için bu farklara duyarlıdır. 

-Kullanım Senaryoları 

K-Means: Dengeli dağılıma sahip, gürültüsüz veri kümeleri için daha uygundur. DBSCAN: Gerçek dünya verileri gibi gürültülü, düzensiz veri kümeleri için idealdir. 


DBSCAN, gerçek dünya verisindeki belirsizlikleri daha iyi yöneterek ve aykırılıklar karşısında daha esnek ve başarılı sonuçlar verebiliyorken; K-Means ise düzenli yapılarda daha hızlı ve doğru sonuçlar sunmaktadır.


Sevgi TARGAY

|

10 Eylül 2025