Python'da Scikit-Learn ile DBSCAN

Python'da Scikit-Learn ile DBSCAN

Giriş

Bir danışmanlık şirketinde veri bilimcisi olarak çalışıyorsunuz. Halihazırda atandığınız proje, finansla ilgili kursları yakın zamanda bitirmiş öğrencilerin verilerini içeriyor. Kursları yöneten finans şirketi, öğrencilerin aynı kursları veya farklı kursları satın almalarını etkileyen ortak faktörlerin olup olmadığını anlamak ister. Şirket, bu faktörleri anlayarak bir öğrenci profili oluşturabilir, her öğrenciyi profile göre sınıflandırabilir ve bir kurs listesi önerebilir.

Farklı öğrenci gruplarından gelen verileri incelerken, aşağıdaki 1, 2 ve 3'te olduğu gibi üç nokta düzenlemesiyle karşılaştınız:

Python PlatoBlockchain Veri Zekasında Scikit-Learn ile DBSCAN. Dikey Arama. Ai.

1. arsada, yarım daire içinde düzenlenmiş mor noktalar, bu dairenin içinde bir dizi pembe nokta, bu yarım dairenin dışında biraz turuncu noktalar ve diğerlerinden uzak beş gri nokta olduğuna dikkat edin.

2. arsada, yuvarlak bir mor nokta kütlesi, bir başka turuncu nokta ve ayrıca diğerlerinden uzak dört gri nokta vardır.

Ve 3. arsada, mor, mavi, turuncu, pembe ve üç tane daha uzak gri nokta olmak üzere dört nokta konsantrasyonu görebiliriz.

Şimdi, yeni öğrenci verilerini anlayabilecek ve benzer grupları belirleyebilecek bir model seçecek olsanız, bu tür verilere ilginç sonuçlar verebilecek bir kümeleme algoritması var mı?

Arsaları tarif ederken, gibi terimlerden bahsettik. noktaların kütlesi ve noktaların konsantrasyonu, tüm grafiklerde daha fazla yoğunluğa sahip alanlar olduğunu gösterir. Biz de atıfta bulunduk dairesel ve yarım daire düz bir çizgi çizerek veya yalnızca en yakın noktaları inceleyerek tanımlanması zor olan şekiller. Ek olarak, ana veri dağılımından muhtemelen sapan, daha fazla zorluk veya sorun yaratan bazı uzak noktalar vardır. gürültü grupları belirlerken

gibi gürültüyü filtreleyebilen yoğunluğa dayalı bir algoritma DBSCAN (Dvarlık-BEsaslı Spatika Cparıldayan Aile uygulamalar Noise), daha yoğun alanlar, yuvarlak şekiller ve gürültülü durumlar için güçlü bir seçimdir.

DBSCAN Hakkında

DBSCAN, araştırmalarda en çok atıf yapılan algoritmalardan biridir, ilk yayını 1996'da yapılmıştır. orijinal DBSCAN kağıdı. Makalede araştırmacılar, algoritmanın doğrusal olmayan uzamsal kümeleri nasıl tanımlayabildiğini ve daha yüksek boyutlara sahip verileri verimli bir şekilde nasıl işleyebildiğini gösteriyor.

DBSCAN'ın arkasındaki ana fikir, belirli bir mesafe içinde olacak minimum sayıda nokta olmasıdır. yarıçap denilen en “merkezi” küme noktasından çekirdek nokta. Bu yarıçap içindeki noktalar komşuluk noktalarıdır ve o komşuluğun kenarındaki noktalar da komşuluk noktalarıdır. sınır noktaları or sınır noktaları. Yarıçap veya komşuluk mesafesi denir epsilon mahallesi, ε-mahalle ya da sadece ε (Yunanca epsilon harfinin sembolü).

Ayrıca, belirlenen bir kümeye ait olma yarıçapını aştığı için çekirdek nokta veya sınır noktası olmayan ve çekirdek nokta olmak için gereken minimum nokta sayısına sahip olmayan noktalar olduğunda, bunlar dikkate alınır. gürültü noktaları.

Bu, üç farklı noktamız olduğu anlamına gelir, yani, çekirdek, sınır ve gürültü. Ayrıca, ana fikrin temel olarak bir yarıçapa veya mesafeye dayandığına dikkat etmek önemlidir, bu da DBSCAN'ı - çoğu kümeleme modelinde olduğu gibi - bu mesafe metriğine bağımlı kılar. Bu ölçü Öklid, Manhattan, Mahalanobis ve daha pek çoğu olabilir. Bu nedenle, verilerin bağlamını dikkate alan uygun bir mesafe ölçüsü seçmek çok önemlidir. Örneğin, bir GPS'ten alınan sürüş mesafesi verilerini kullanıyorsanız, Manhattan mesafesi gibi sokak yerleşimlerini dikkate alan bir ölçüm kullanmak ilginç olabilir.

Python PlatoBlockchain Veri Zekasında Scikit-Learn ile DBSCAN. Dikey Arama. Ai.

Not: DBSCAN, gürültüyü oluşturan noktaları haritaladığı için aykırı değer tespit algoritması olarak da kullanılabilir. Örneğin, hangi banka işlemlerinin hileli olabileceğini belirlemeye çalışıyorsanız ve hileli işlem oranı düşükse, DBSCAN bu noktaları tespit etmek için bir çözüm olabilir.

Çekirdek noktayı bulmak için, DBSCAN önce rastgele bir nokta seçecek, ε-komşusu içindeki tüm noktaları haritalayacak ve seçilen noktanın komşu sayısını minimum nokta sayısıyla karşılaştıracaktır. Seçilen noktanın minimum nokta sayısından daha fazla veya eşit sayıda komşusu varsa, çekirdek nokta olarak işaretlenecektir. Bu çekirdek nokta ve komşuluk noktaları ilk kümeyi oluşturacaktır.

Algoritma daha sonra ilk kümenin her noktasını inceleyecek ve eşit sayıda veya ε içindeki minimum nokta sayısından daha fazla komşu noktaya sahip olup olmadığına bakacaktır. Varsa, bu komşu noktalar da ilk kümeye eklenecektir. Bu süreç, ilk kümedeki noktaların ε içindeki minimum nokta sayısından daha az komşusu olana kadar devam eder. Bu olduğunda, algoritma o kümeye nokta eklemeyi durdurur, o kümenin dışında başka bir çekirdek nokta tanımlar ve bu yeni çekirdek nokta için yeni bir küme oluşturur.

DBSCAN daha sonra, o kümeye eklenecek başka nokta kalmayıncaya kadar, ikinci kümenin yeni bir çekirdek noktasına bağlı tüm noktaları bulma birinci küme sürecini tekrarlayacaktır. Daha sonra başka bir çekirdek noktayla karşılaşacak ve üçüncü bir küme oluşturacak veya daha önce bakmadığı tüm noktaları yineleyecektir. Bu noktalar bir kümeden ε uzaklıktaysa, o kümeye eklenir ve sınır noktaları olur. Değillerse, gürültü noktaları olarak kabul edilirler.

Önerileri: DBSCAN'ın arkasındaki fikirle ilgili birçok kural ve matematiksel gösterim vardır, daha derine inmek istiyorsanız, yukarıda bağlantısı verilen orijinal makaleye bir göz atmak isteyebilirsiniz.

DBSCAN algoritmasının nasıl çalıştığını bilmek ilginçtir, ancak neyse ki, Python'un Scikit-Learn kitaplığının zaten bir uygulaması olduğunda, algoritmayı kodlamaya gerek yoktur.

Pratikte nasıl çalıştığını görelim!

Kümeleme için Verileri İçe Aktarma

DBSCAN'ın pratikte nasıl çalıştığını görmek için projeleri biraz değiştirip 200 müşterinin türü, yaşı, yıllık geliri ve harcama puanına sahip küçük bir müşteri veri seti kullanacağız.

Harcama puanı 0 ile 100 arasında değişir ve bir kişinin bir alışveriş merkezinde ne sıklıkta para harcadığını 1'den 100'e kadar bir ölçekte gösterir. 0, onlar en çok harcayanlardır.

Not: Veri setini indirebilirsiniz okuyun.

Veri setini indirdikten sonra, bunun adında bir CSV (virgülle ayrılmış değerler) dosyası olduğunu göreceksiniz. alışveriş-data.csv, Pandas'ı kullanarak bir DataFrame'e yükleyeceğiz ve customer_data değişken:

import pandas as pd path_to_file = '../../datasets/dbscan/dbscan-with-python-and-scikit-learn-shopping-data.csv'
customer_data = pd.read_csv(path_to_file)

Verilerimizin ilk beş satırına göz atmak için, yürütebilirsiniz. customer_data.head():

Bunun sonucu:

 CustomerID Genre Age Annual Income (k$) Spending Score (1-100)
0 1 Male 19 15 39
1 2 Male 21 15 81
2 3 Female 20 16 6
3 4 Female 23 16 77
4 5 Female 31 17 40

Verileri inceleyerek müşteri kimlik numaralarını, türünü, yaşını, k$ cinsinden gelirlerini ve harcama puanlarını görebiliriz. Bu değişkenlerin bir kısmının veya tamamının modelde kullanılacağını unutmayın. Örneğin, kullanacak olsaydık Age ve Spending Score (1-100) bir mesafe metriği kullanan DBSCAN için değişkenler olarak, bozulmaları önlemek için bunları ortak bir ölçeğe getirmek önemlidir, çünkü Age yıllarla ölçülür ve Spending Score (1-100) 0 ile 100 arasında sınırlı bir aralığa sahiptir. Bu, bir tür veri ölçeklendirmesi yapacağımız anlamına gelir.

Ayrıca, veri türünün tutarlı olup olmadığını görerek ve Panda'nın çalıştırılmasıyla işlenmesi gereken herhangi bir eksik değer olup olmadığını doğrulayarak, verilerin ölçekleme dışında daha fazla ön işlemeye ihtiyaç duyup duymadığını da kontrol edebiliriz. info() yöntem:

customer_data.info()

Bu şunu görüntüler:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200 entries, 0 to 199
Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 CustomerID 200 non-null int64 1 Genre 200 non-null object 2 Age 200 non-null int64 3 Annual Income (k$) 200 non-null int64 4 Spending Score (1-100) 200 non-null int64 dtypes: int64(4), object(1)
memory usage: 7.9+ KB

Her müşteri özelliği için boş olmayan 200 giriş olduğu için kayıp değer olmadığını gözlemleyebiliriz. Kategorik bir değişken olduğu için sadece tür sütununun metin içeriğine sahip olduğunu da görebiliriz. objectve diğer tüm özellikler sayısaldır, türün int64. Böylece, veri türü tutarlılığı ve boş değerlerin olmaması açısından, verilerimiz daha fazla analiz için hazırdır.

Verileri görselleştirmeye ve DBSCAN'da hangi özellikleri kullanmanın ilginç olacağını belirlemeye devam edebiliriz. Bu özellikleri seçtikten sonra ölçeklendirebiliriz.

Bu müşteri veri kümesi, kesin hiyerarşik kümeleme kılavuzumuzda kullanılanla aynıdır. Bu veriler, nasıl keşfedileceği ve mesafe ölçümleri hakkında daha fazla bilgi edinmek için şu adrese göz atabilirsiniz: Python ve Scikit-Learn ile Hiyerarşik Kümeleme için Kesin Kılavuz!

Verileri Görselleştirme

Seaborn'u kullanarak pairplot(), her özellik kombinasyonu için bir dağılım grafiği çizebiliriz. O zamandan beri CustomerID yalnızca bir tanımlamadır ve bir özellik değildir, bunu şu şekilde kaldıracağız: drop() çizmeden önce:

import seaborn as sns customer_data = customer_data.drop('CustomerID', axis=1) sns.pairplot(customer_data);

Bu çıktılar:

Python PlatoBlockchain Veri Zekasında Scikit-Learn ile DBSCAN. Dikey Arama. Ai.

tarafından üretilen özelliklerin kombinasyonuna bakıldığında pairplot, grafiği Annual Income (k$) ile Spending Score (1-100) yaklaşık 5 nokta grubu gösteriyor gibi görünüyor. Bu, özelliklerin en umut verici kombinasyonu gibi görünüyor. İsimleri ile bir liste oluşturabilir, bunları listeden seçebiliriz. customer_data DataFrame ve seçimi depolamak customer_data gelecekteki modelimizde kullanmak için tekrar değişken.

selected_cols = ['Annual Income (k$)', 'Spending Score (1-100)']
customer_data = customer_data[selected_cols]

Sütunları seçtikten sonra bir önceki bölümde bahsettiğimiz ölçeklendirmeyi gerçekleştirebiliriz. Özellikleri aynı ölçeğe getirmek veya standartlaştırmak Scikit-Learn'leri içe aktarabiliriz. StandardScaler, oluşturun, ortalamasını ve standart sapmasını hesaplamak için verilerimizi sığdırın ve ortalamasını çıkararak ve standart sapmaya bölerek verileri dönüştürün. Bu, ile tek adımda yapılabilir. fit_transform() yöntem:

from sklearn.preprocessing import StandardScaler ss = StandardScaler() scaled_data = ss.fit_transform(customer_data)

Değişkenler artık ölçeklendirildi ve bunları yalnızca içeriğini yazdırarak inceleyebiliriz. scaled_data değişken. Alternatif olarak, bunları yeni bir scaled_customer_data DataFrame'i sütun adlarıyla birlikte kullanın ve head() yine yöntem:

scaled_customer_data = pd.DataFrame(columns=selected_cols, data=scaled_data)
scaled_customer_data.head()

Bu çıktılar:

 Annual Income (k$) Spending Score (1-100)
0 -1.738999 -0.434801
1 -1.738999 1.195704
2 -1.700830 -1.715913
3 -1.700830 1.040418
4 -1.662660 -0.395980 

Bu veriler kümeleme için hazır! DBSCAN'ı tanıtırken minimum nokta sayısından ve epsilondan bahsetmiştik. Model oluşturulmadan önce bu iki değerin seçilmesi gerekir. Nasıl yapıldığını görelim.

Min. Numuneler ve Epsilon

DBSCAN kümelemesi için minimum nokta sayısını seçmek için, aşağıdaki gibi, verilerdeki boyut sayısı artı birden eşit veya daha yüksek olması gerektiğini belirten bir pratik kural vardır:

$$
metin {dak. puan} >= metin{veri boyutları} + 1
$$

Boyutlar veri çerçevesindeki sütun sayısıdır, 2 sütun kullanıyoruz, yani min. puanlar 2+1 yani 3 veya daha yüksek olmalıdır. Bu örnek için, kullanalım 5 dakika. puan.

$$
metin{5 (min. puan)} >= metin{2 (veri boyutları)} + 1
$$

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Şimdi, ε değerini seçmek için bir yöntem var ki burada bir En Yakın Komşular Algoritma, her nokta için önceden tanımlanmış sayıda en yakın noktanın mesafelerini bulmak için kullanılır. Bu önceden tanımlanmış komşu sayısı min. eksi 1'i az önce seçtiğimiz noktalar. Dolayısıyla, bizim durumumuzda, algoritma verilerimizin her noktası için 5-1 veya 4 en yakın noktayı bulacaktır. bunlar k-komşular ve k 4'e eşittir.

$$
metin{k-komşular} = metin{dak. puan} – 1
$$

Komşuları bulduktan sonra uzaklıklarını büyükten küçüğe doğru sıralayacağız ve y ekseni ile x ekseni üzerindeki noktaları çizeceğiz. Grafiğe baktığımızda, bir dirseğin bükülmesine benzediği yeri ve dirseğin bükülmesini tanımlayan y ekseni noktasının önerilen ε değeri olduğunu bulacağız.

not: ε değerini bulmak için kullanılan grafiğin büyük veya küçük bir veya daha fazla "dirsek bükülmesi" olması mümkündür, bu olduğunda değerleri bulabilir, test edebilir ve kümeleri en iyi tanımlayan sonuçlara sahip olanları seçebilirsiniz. ya grafiklerin metriklerine bakarak.

Bu adımları gerçekleştirmek için algoritmayı içe aktarabilir, verilere sığdırabilir ve ardından her noktanın mesafelerini ve indekslerini kneighbors() yöntem:

from sklearn.neighbors import NearestNeighbors
import numpy as np nn = NearestNeighbors(n_neighbors=4) nbrs = nn.fit(scaled_customer_data)
distances, indices = nbrs.kneighbors(scaled_customer_data)

Mesafeleri bulduktan sonra büyükten küçüğe sıralayabiliriz. Mesafeler dizisinin ilk sütunu kendisine nokta olduğundan (yani tümü 0'dır) ve ikinci sütun en küçük mesafeleri içerdiğinden, ardından ikinciden daha büyük mesafelere sahip olan üçüncü sütun gelir ve bu böyle devam eder. ikinci sütunun değerlerini ve bunları distances değişken:

distances = np.sort(distances, axis=0)
distances = distances[:,1] 

Artık en küçük mesafeleri sıraladığımıza göre, içe aktarabiliriz. matplotlib, mesafeleri çizin ve "dirsek kıvrımının" olduğu yere kırmızı bir çizgi çizin:

import matplotlib.pyplot as plt plt.figure(figsize=(6,3))
plt.plot(distances)
plt.axhline(y=0.24, color='r', linestyle='--', alpha=0.4) plt.title('Kneighbors distance graph')
plt.xlabel('Data points')
plt.ylabel('Epsilon value')
plt.show();

Bu sonuçtur:

Python PlatoBlockchain Veri Zekasında Scikit-Learn ile DBSCAN. Dikey Arama. Ai.

Doğruyu çizerken ε değerini bulacağımıza dikkat edin, bu durumda 0.24.

Sonunda minimum puanlarımız ve ε var. Her iki değişkenle de DBSCAN modelini oluşturabilir ve çalıştırabiliriz.

DBSCAN Modeli Oluşturma

Modeli oluşturmak için Scikit-Learn'den içe aktarabilir, modelle aynı olan ε ile oluşturabiliriz. eps bağımsız değişken ve minimum puan mean_samples argüman. Daha sonra onu bir değişkende saklayabiliriz, hadi ona diyelim dbs ve ölçeklenmiş verilere sığdırın:

from sklearn.cluster import DBSCAN dbs = DBSCAN(eps=0.24, min_samples=5)
dbs.fit(scaled_customer_data)

Aynen böyle, DBSCAN modelimiz veriler üzerinde oluşturulmuş ve eğitilmiştir! Sonuçları çıkarmak için, labels_ mülk. Ayrıca yeni bir tane oluşturabiliriz. labels sütunundaki sütun scaled_customer_data dataframe ve tahmin edilen etiketlerle doldurun:

labels = dbs.labels_ scaled_customer_data['labels'] = labels
scaled_customer_data.head()

Bu nihai sonuçtur:

 Annual Income (k$) Spending Score (1-100) labels
0 -1.738999 -0.434801 -1
1 -1.738999 1.195704 0
2 -1.700830 -1.715913 -1
3 -1.700830 1.040418 0
4 -1.662660 -0.395980 -1

Şu etiketlere sahip olduğumuzu gözlemleyin: -1 değerler; bunlar gürültü noktaları, herhangi bir kümeye ait olmayanlar. Algoritmanın kaç gürültü noktası bulduğunu bilmek için -1 değerinin etiket listemizde kaç kez göründüğünü sayabiliriz:

labels_list = list(scaled_customer_data['labels'])
n_noise = labels_list.count(-1)
print("Number of noise points:", n_noise)

Bu çıktılar:

Number of noise points: 62

62 puanlık orijinal verimizin 200 noktasının gürültü olarak kabul edildiğini zaten biliyoruz. Bu, DBSCAN kümelemesinin bir kümenin parçası olarak pek çok noktayı dikkate almadığını gösteren çok fazla gürültüdür. Verileri çizdiğimizde yakında ne olduğunu anlayacağız.

Başlangıçta, verileri gözlemlediğimizde, 5 nokta kümesi varmış gibi görünüyordu. DBSCAN'in kaç küme oluşturduğunu bilmek için -1 olmayan etiket sayısını sayabiliriz. Bu kodu yazmanın birçok yolu vardır; burada, DBSCAN'in birçok küme bulduğu veriler için de çalışacak bir for döngüsü yazdık:

total_labels = np.unique(labels) n_labels = 0
for n in total_labels: if n != -1: n_labels += 1
print("Number of clusters:", n_labels)

Bu çıktılar:

Number of clusters: 6

Algoritmanın, verilerin birçok gürültü noktasına sahip 6 kümeye sahip olduğunu tahmin ettiğini görebiliriz. Bunu seaborn's ile çizerek görselleştirelim. scatterplot:

sns.scatterplot(data=scaled_customer_data, x='Annual Income (k$)', y='Spending Score (1-100)', hue='labels', palette='muted').set_title('DBSCAN found clusters');

Bunun sonucu:

Python PlatoBlockchain Veri Zekasında Scikit-Learn ile DBSCAN. Dikey Arama. Ai.

Grafiğe baktığımızda, DBSCAN'in daha yoğun bağlantılı noktaları yakaladığını ve aynı kümenin parçası sayılabilecek noktaların ya gürültü olduğunu ya da başka bir küçük küme oluşturduğunu düşündüğünü görebiliriz.

Python PlatoBlockchain Veri Zekasında Scikit-Learn ile DBSCAN. Dikey Arama. Ai.

Kümeleri vurgularsak, DBSCAN'in noktalar arasında daha az boşluk olan küme 1'i nasıl tamamen aldığına dikkat edin. Ardından, daha fazla aralıklı noktaları gürültü olarak kabul ederek, noktaların birbirine yakın olduğu 0 ve 3 numaralı kümelerin parçalarını alır. Sol alt yarıdaki noktaları da gürültü olarak kabul eder ve sağ alt taraftaki noktaları 3 kümeye ayırır, bir kez daha noktaların birbirine daha yakın olduğu 4, 2 ve 5 numaralı kümeleri yakalar.

DBSCAN'in kümelerin yoğun alanlarını yakalamak için harika olduğu, ancak verilerin daha büyük şemasını, 5 kümenin sınırlarını belirlemek için çok fazla olmadığı sonucuna varmaya başlayabiliriz. Verilerimizle daha fazla kümeleme algoritmasını test etmek ilginç olurdu. Bakalım bir ölçüm bu hipotezi doğrulayacak mı?

Algoritmayı Değerlendirmek

DBSCAN'ı değerlendirmek için kullanacağız siluet puanı aynı kümenin noktaları arasındaki mesafeyi ve kümeler arasındaki mesafeleri dikkate alacaktır.

Not: Şu anda, çoğu kümeleme metriği, yoğunluğa dayalı olmadıkları için DBSCAN'ı değerlendirmek için kullanılmaya uygun değildir. Burada, Scikit-learn'de zaten uygulandığı ve küme şekline bakmaya çalıştığı için siluet puanını kullanıyoruz.

Daha uygun bir değerlendirmeye sahip olmak için, onu kullanabilir veya aşağıdakilerle birleştirebilirsiniz: Yoğunluk Tabanlı Kümeleme Doğrulaması Yoğunluğa dayalı kümeleme için özel olarak tasarlanmış (DBCV) metriği. Bu konuda DBCV için bir uygulama mevcuttur. GitHub.

İlk olarak, içe aktarabiliriz silhouette_score Scikit-Learn'den sütunlarımızı ve etiketlerimizi iletin:

from sklearn.metrics import silhouette_score s_score = silhouette_score(scaled_customer_data, labels)
print(f"Silhouette coefficient: {s_score:.3f}")

Bu çıktılar:

Silhouette coefficient: 0.506

Bu skora göre DBSCAN verinin yaklaşık %50'sini yakalayabilmiş görünüyor.

Sonuç

DBSCAN Avantajları ve Dezavantajları

DBSCAN çok benzersiz bir kümeleme algoritması veya modelidir.

Avantajlarına bakacak olursak, verilerdeki yoğun alanları ve diğerlerinden uzak noktaları yakalama konusunda oldukça iyi. Bu, verilerin belirli bir şekle sahip olması gerekmediği ve yoğun bir şekilde bağlantılı oldukları sürece diğer noktalarla çevrelenebileceği anlamına gelir.

Minimum noktaları ve ε'yi belirtmemizi gerektirir, ancak örneğin K-Ortalamalarda olduğu gibi önceden küme sayısını belirtmeye gerek yoktur. Yüksek boyutlu veriler için tasarlandığından çok büyük veri tabanlarında da kullanılabilir.

Dezavantajlarına gelince, aynı kümede farklı yoğunlukları yakalayamadığını gördük, dolayısıyla yoğunluk farklarında büyük zorluklar yaşıyor. Ayrıca mesafe metriğine ve noktaların ölçeklenmesine de bağlıdır. Bu, veriler iyi anlaşılmadıysa, ölçek farklılıkları ve mantıklı olmayan bir mesafe metriği varsa, muhtemelen onu anlayamayacaktır.

DBSCAN Uzantıları

gibi başka algoritmalar da vardır. Hiyerarşik DBSCAN (HDBSCAN) ve Kümeleme yapısını (OPTICS) tanımlamak için sıralama noktalarıDBSCAN'ın uzantıları olarak kabul edilen .

Hem HDBSCAN hem de OPTICS, verilerde değişen yoğunluklarda kümeler olduğunda genellikle daha iyi performans gösterebilir ve ayrıca seçime veya ilk dakikaya karşı daha az duyarlıdır. noktalar ve ε parametreleri.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı