快速學(xué)習(xí)一個(gè)算法,DBSCAN
今天給大家分享一個(gè)超強(qiáng)的算法模型,DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一種基于密度的聚類算法,常用于識別空間數(shù)據(jù)中的任意形狀的聚類,同時(shí)能夠有效地處理噪聲數(shù)據(jù)。
它不需要預(yù)先指定簇的數(shù)量,這與 K-means 等算法不同。
核心思想
DBSCAN 通過分析數(shù)據(jù)點(diǎn)在空間中的密度,自動識別簇。
它的基本思想是:對于一個(gè)數(shù)據(jù)集中的每個(gè)點(diǎn),通過計(jì)算其鄰域內(nèi)點(diǎn)的數(shù)量來確定其是否位于簇的高密度區(qū)域中。
圖片
關(guān)鍵參數(shù)
DBSCAN 依賴于兩個(gè)關(guān)鍵參數(shù):
- ε(eps)
用于定義一個(gè)點(diǎn)的鄰域的半徑。該值決定了一個(gè)點(diǎn)與另一個(gè)點(diǎn)是否是密切相關(guān)的。 - MinPts
一個(gè)點(diǎn)的鄰域中至少需要包含的點(diǎn)的數(shù)量(包括該點(diǎn)自身),以將其視為核心點(diǎn)。
關(guān)鍵術(shù)語
- 核心點(diǎn)(Core Point)
如果一個(gè)點(diǎn)的鄰域中包含至少 MinPts 個(gè)點(diǎn),則該點(diǎn)是核心點(diǎn)。 - 邊界點(diǎn)(Border Point)
一個(gè)點(diǎn)不滿足核心點(diǎn)的條件,但位于一個(gè)核心點(diǎn)的鄰域內(nèi)。 - 噪聲點(diǎn)(Noise Point)
既不是核心點(diǎn)也不是邊界點(diǎn)。
算法步驟
- 初始化
從數(shù)據(jù)集中隨機(jī)選擇一個(gè)未訪問的數(shù)據(jù)點(diǎn)。 - 鄰域搜索
對于每個(gè)數(shù)據(jù)點(diǎn),DBSCAN 會找到其 ε 鄰域內(nèi)的所有點(diǎn)。 - 核心點(diǎn)識別
如果某個(gè)點(diǎn)在其 ε 鄰域內(nèi)至少有 MinPts 個(gè)鄰居,則該點(diǎn)被歸類為核心點(diǎn)。這些點(diǎn)構(gòu)成了聚類的中心。 - 聚類形成
DBSCAN 從核心點(diǎn)開始,并遞歸訪問其密度連通的鄰居(彼此 ε 鄰域內(nèi)的點(diǎn))。
所有核心點(diǎn)及其密度可達(dá)的鄰居都被分配到同一個(gè)聚類中。 - 邊界點(diǎn)分配
邊界點(diǎn)被分配到與其關(guān)聯(lián)的核心點(diǎn)相同的簇。 - 噪聲分類
任何既不是核心點(diǎn)也不是邊界點(diǎn)的點(diǎn)都被視為噪聲點(diǎn)或異常值。這些點(diǎn)不屬于任何聚類。
示例代碼
下面是一個(gè)使用 Python 的 Scikit-learn 庫實(shí)現(xiàn) DBSCAN 的示例代碼。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
# 生成示例數(shù)據(jù)
X, _ = make_moons(n_samples=300, noise=0.05, random_state=0)
# 應(yīng)用 DBSCAN 算法
dbscan = DBSCAN(eps=0.2, min_samples=5)
labels = dbscan.fit_predict(X)
# 可視化結(jié)果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('DBSCAN Clustering')
plt.show()
圖片
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 沒有預(yù)定義聚類數(shù)
與 K-Means 不同,DBSCAN 不需要指定聚類數(shù),因此適用于聚類結(jié)構(gòu)未知的數(shù)據(jù) - 對異常值具有魯棒性
DBSCAN 可以有效處理位于密集區(qū)域之外的異常值并將其標(biāo)記為噪聲 - 靈活的形狀檢測
DBSCAN 可以找到任意形狀的聚類,而 K-Means 則僅限于球形聚類
缺點(diǎn)
- 參數(shù)敏感性,性能可能因 ε 和 MinPts 的選擇而異
- 時(shí)間復(fù)雜度高
- 對于大型數(shù)據(jù)集來說,計(jì)算距離和識別核心點(diǎn)的計(jì)算成本可能很高