生活随笔
收集整理的這篇文章主要介紹了
DBSCAN算法理论和Python实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
- https://github.com/Sean16SYSU/MachineLearningImplement
DBSCAN算法
基于密度的聚類方法DBSCAN算法,是相當(dāng)經(jīng)典。
算法思路很簡(jiǎn)單。
簡(jiǎn)述算法思路:
選取密度較高的點(diǎn)作為核心點(diǎn)通過一個(gè)核心點(diǎn)出發(fā),把其領(lǐng)域的點(diǎn)都放入到廣度優(yōu)先搜索的隊(duì)列中。將所有找到的點(diǎn)歸結(jié)為一個(gè)類。之后,再?gòu)男碌臎]有被訪問過的點(diǎn)中找其他的核心點(diǎn)開始,又繼續(xù)進(jìn)行廣度優(yōu)先搜索。一直到所有的點(diǎn)都被訪問過(即分配過了對(duì)對(duì)應(yīng)的類別)
Python實(shí)現(xiàn)
from sklearn
import datasets
import numpy
as np
import matplotlib
.pyplot
as pltiris
= datasets
.load_iris
()
def DBSCAN(X
, epsilon
=1, MinPts
=10):Nx
= [0 for i
in range(len(X
))] core_points
= []for i
, xi
in enumerate(X
):temp
= np
.array
([np
.linalg
.norm
(xi
- cj
) if i
!= j
else np
.inf
for j
, cj
in enumerate(X
)])Nx
[i
] = set(np
.where
(temp
< epsilon
)[0])if len(Nx
[i
]) >= MinPts
:core_points
.append
(i
)k
= 0not_visited
= set([i
for i
in range(len(X
))])Ck
= [0 for i
in range(len(X
))] if len(core_points
) == 0:print("Not core_points")while len(core_points
) > 0:not_visited_temp
= not_visitedo
= core_points
[np
.random
.randint
(0, len(core_points
))]Queue
= [o
]not_visited
= not_visited
- set(Queue
)while len(Queue
) > 0:q
= Queue
[0]Queue
= Queue
[1:]if len(Nx
[q
]) >= MinPts
:delta
= Nx
[q
] & not_visitedQueue
= Queue
+ list(delta
)not_visited
= not_visited
- deltaCk
[k
] = not_visited_temp
- not_visitedcore_points
= list(set(core_points
) - Ck
[k
])k
+= 1Ans
= np
.zeros
(len(X
))for k_i
in range(k
):Ans
[list(Ck
[k_i
])] = k_i
return Ans
test_y
= DBSCAN
(iris
.data
,)
from sklearn
.decomposition
import PCAX_reduced
= PCA
(n_components
=2).fit_transform
(iris
.data
)
plt
.scatter
(X_reduced
[:, 0], X_reduced
[:, 1], c
=test_y
, cmap
=plt
.cm
.Set1
)
- iris數(shù)據(jù)集其實(shí)是有三個(gè)類別的。應(yīng)該是有些類別的數(shù)值數(shù)值波動(dòng)特征不太明顯。
- 可以先做數(shù)據(jù)預(yù)處理之后,再做聚類,效果會(huì)好很多。
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的DBSCAN算法理论和Python实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。