網(wǎng)站首頁 編程語言 正文
DBScan 算法解釋說明
DBScan 是密度基于空間聚類,它是一種基于密度的聚類算法,其與其他聚類算法(如K-Means)不同的是,它不需要事先知道簇的數(shù)量。
DBScan 算法通過構(gòu)建基于密度的圖模型,對數(shù)據(jù)進(jìn)行聚類。
該算法使用兩個(gè)參數(shù):半徑 eps 和最小樣本數(shù) minPts 。
它通過遍歷每一個(gè)數(shù)據(jù)點(diǎn),并將它們分為核心對象,邊界對象和噪聲。
如果一個(gè)數(shù)據(jù)點(diǎn)是核心對象,則它周圍的數(shù)據(jù)點(diǎn)也屬于該簇。
DBScan 算法通過找到密度高的區(qū)域,并將其作為簇,最終得到聚類結(jié)果。
DBScan 算法的應(yīng)用場景
對非球形簇進(jìn)行聚類:DBScan 算法可以識別出非球形的簇,因此適用于識別非球形的結(jié)構(gòu)。
對不平衡數(shù)據(jù)進(jìn)行聚類:DBScan 算法可以適用于對不平衡的數(shù)據(jù)進(jìn)行聚類,因?yàn)樗幌?K-Means 那樣需要事先知道簇的數(shù)量。
異常值檢測:DBScan 算法可以識別異常值,因?yàn)樗梢宰R別出非核心對象的點(diǎn),并將它們作為異常值。
處理高維數(shù)據(jù):DBScan 算法可以很好地處理高維數(shù)據(jù),因?yàn)樗换跉W幾里得距離,而是基于密度關(guān)系。
對動(dòng)態(tài)數(shù)據(jù)進(jìn)行聚類:DBScan 算法可以適用于對動(dòng)態(tài)數(shù)據(jù)進(jìn)行聚類,因?yàn)樗梢院芎玫靥幚韯?dòng)態(tài)數(shù)據(jù)的變化。
Python 實(shí)現(xiàn)的 DBScan 算法
from sklearn.cluster import DBSCAN
import numpy as np
# 創(chuàng)建樣本數(shù)據(jù)
X = np.array([[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]])
# 創(chuàng)建并訓(xùn)練模型
db = DBSCAN(eps=3, min_samples=2).fit(X)
# 獲取聚類標(biāo)簽
labels = db.labels_
# 打印聚類結(jié)果
print("Labels:", labels)
在代碼中,首先創(chuàng)建了樣本數(shù)據(jù),然后創(chuàng)建了一個(gè) DBSCAN 模型,并通過設(shè)置參數(shù) eps 和 min_samples 訓(xùn)練該模型。最后,我們通過調(diào)用 model.labels_ 屬性獲取了聚類標(biāo)簽,并打印出了聚類結(jié)果。
eps 參數(shù)表示數(shù)據(jù)點(diǎn)之間的最大距離,min_samples 參數(shù)表示確定一個(gè)簇所需的最小數(shù)據(jù)點(diǎn)數(shù)量。
Python 實(shí)現(xiàn) dbscan 高級算法
import numpy as np
def euclidean_distance(x, y):
return np.sqrt(np.sum((x - y)**2))
def dbscan(X, eps, min_samples):
m = X.shape[0]
labels = [0] * m
C = 0
for i in range(m):
if labels[i] != 0:
continue
neighbors = []
for j in range(m):
if euclidean_distance(X[i], X[j]) < eps:
neighbors.append(j)
if len(neighbors) < min_samples:
labels[i] = -1
else:
C += 1
labels[i] = C
for j in neighbors:
labels[j] = C
return labels
X = np.array([[1,2],[2,2],[2,3],[8,7],[8,8],[25,80]])
labels = dbscan(X, 3, 2)
print(labels)
上面的代碼中, X 是輸入的數(shù)據(jù)矩陣, eps 是半徑(或閾值), min_samples 是半徑內(nèi)的最小樣本數(shù)。
在 dbscan() 函數(shù)內(nèi),首先對每一個(gè)樣本點(diǎn),找出它的領(lǐng)域內(nèi)的樣本點(diǎn)(即與其距離小于閾值的樣本點(diǎn)),并判斷是否滿足要求的最小樣本數(shù),如果滿足,將其作為核心點(diǎn),并將其他在領(lǐng)域內(nèi)的樣本點(diǎn)聚為同一類,如果不滿足,說明該點(diǎn)是噪聲點(diǎn),不聚為任何一類。
最后返回每一個(gè)樣本點(diǎn)所屬的類別標(biāo)簽。
再演示一種 python 實(shí)現(xiàn) dbscan 算法的代碼
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import DBSCAN
# 創(chuàng)建數(shù)據(jù)集
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
# 初始化 DBScan 模型
dbscan = DBSCAN(eps=0.3, min_samples=5)
# 訓(xùn)練模型
y_pred = dbscan.fit_predict(X)
# 可視化結(jié)果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
上述代碼使用了 scikit-learn 庫中的 DBSCAN 模型,在創(chuàng)建數(shù)據(jù)集時(shí)使用了 make_moons() 函數(shù),可以創(chuàng)建一個(gè)月牙形數(shù)據(jù)集。
接著,初始化了一個(gè) DBScan 模型,其中 eps 參數(shù)表示鄰域半徑, min_samples 參數(shù)表示在鄰域內(nèi)至少需要有多少個(gè)樣本。接下來使用 fit_predict() 方法訓(xùn)練模型并預(yù)測結(jié)果。最后使用 scatter() 函數(shù)可視化結(jié)果。
運(yùn)行代碼得到如下結(jié)果。
原文鏈接:https://blog.csdn.net/hihell/article/details/128869722
相關(guān)推薦
- 2022-12-06 Python實(shí)現(xiàn)批量修改xml文件的腳本_python
- 2022-10-06 Python中os模塊的12種用法總結(jié)_python
- 2022-08-28 c++在windows、linux下獲取指定文件夾下所有文件名的方法
- 2022-05-31 python中三種輸出格式總結(jié)(%,format,f-string)_python
- 2022-09-15 C#?彈出窗口show()和showdialog()的兩種方式_C#教程
- 2022-02-18 解決scrapy爬蟲報(bào)錯(cuò) pymongo.errors.DuplicateKeyError: E11
- 2022-05-15 Python?文件與文件對象及文件打開關(guān)閉_python
- 2022-04-09 SpringMVC 使用RestFul風(fēng)格實(shí)現(xiàn)簡單的文件下載
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支