資料探勘實驗(八) DBSCAN聚類 R語言

2021-10-02 08:26:51 字數 1499 閱讀 5847

了解dbscan演算法基本原理;

編寫**並實現dbscan演算法對資料的聚簇

採用的資料集 :r語言factoextra包裡的multishapes資料集

函式首先確定兩個引數:

(1)epsilon:在乙個點周圍鄰近區域的半徑

(2)minpts:鄰近區域內至少包含點的個數

根據以上兩個引數,可以把樣本中的點分成三類:

核點:滿足領域內的點》=minpts,則為核樣本點

邊界點:滿足領域內的點(factoextra)

library(ggplot2)

data<

-data.frame(multishapes[,1

:2])

ggplot(data,aes(x,y)

)+geom_point(

)#主函式

dbscan = function(data,eps,minpts)

else

if(pts>1&

& pts< minpts)

else}}

#刪除雜訊點

data_c<

-data[which(data_n$cluster!=0)

,]#去掉雜訊點之後的領域

dismatrix2

.matrix(dist(data_c, method =

"euclidean"))

cluster<

-list()

for(i in

1:nrow(data_c)

)#合併有交集的鄰域,生成乙個新簇

for(i in

1:length(cluster))}

}}newcluster<

-list()

#去掉空列表

for(i in

1:length(cluster))}

#為相同簇中的物件賦相同的標籤

data_c[,4

].character(

)for

(i in

1:length(newcluster))}

return

(data_c)

}#執行

test<

-dbscan(data,

0.15,6

)#設定eps為0.15,minpts為6

ggplot(test,aes(x,y,colour=factor(test[,4

])))

+ geom_point(shape=factor(test[,4

]))原資料

經過聚類後

聚類演算法 DBSCAN

dbscan 是一種簡單的,基於密度的聚類演算法。本次實現中,dbscan 使用了基於中心的方法。在基於中心的方法中,每個資料點的密度通過對以該點為中心以邊長為 2 eps 的網格 鄰域 內的其他資料點的個數來度量。根據資料點的密度分為三類點 1 核心點 該點在鄰域內的密度超過給定的閥值 minps...

DBSCAN聚類演算法

基於密度定義,我們將點分為 dbscan演算法的本質就是隨大流,邊界點緊緊圍繞著核心點,他們抱團,不帶噪點玩兒 小團體多了,聯絡比較密切的小團體之間聚成了同個類 比較偏遠的小團體想要加入這個圈子,進不去,就單幹,我們自己玩自己的,聚成了另外的乙個類 一開始就被孤立的噪點吧,自然有自己的傲骨,接著孤芳...

DBSCAN 聚類演算法

dbscan演算法是一種基於密度聚類的演算法。核心概念 核心點 若某個點的密度達到演算法設定的閾值 即 r 鄰域內點的數量不小於 minpts 則其為核心點。直接密度可達 若某點p在點q的 r 鄰域內,且q是核心點,則稱p從q出發直接密度可達。密度可達 若有乙個點的序列q0 q1 qk,對任意qi從...