日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

DBSCAN聚类

發(fā)布時間:2023/11/28 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DBSCAN聚类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

DBSCAN

Density-Based Spatial Clustering of Applications with Noise

  1. 一種基于密度,對噪聲魯棒的空間聚類算法。
  2. DBSCAN算法可以找到樣本點的全部密集區(qū)域,并把這些密集區(qū)域當(dāng)做一 個一個的聚類簇
  3. 通常情形下,密度聚類算法從樣本密度的角度來考察樣本之間的可連接性, 并基于可連接樣本不斷擴展聚類簇以獲得最終的聚類結(jié)果。
  4. DBSCAN算法基于一組“領(lǐng)域”參數(shù)(ε,MinPts)來刻畫樣本分布的緊密程度。ε:領(lǐng)域半徑;MinPts:密度閾值
    關(guān)于DBSCAN的通俗描述:

對于DBSCAN算法最為重要的就是核心點。什么是核心點呢?簡單來說就是當(dāng)在以一個點為圓心半徑為ε的區(qū)域內(nèi)存在不少于MinPts個其他點時,此點即為核心點, 暫稱核心點為“大哥”,核心點的鄰域點為“小弟”,當(dāng)大哥的小弟作為大哥時,又會存在一批小弟,當(dāng)?shù)诙〉苡肿鳛榇蟾?#xff0c;又會找出第三批小弟,如此循環(huán)直至找不到小弟, 那么這些由第一代大哥衍生出來的小弟也好大哥也好與它們的鄰域構(gòu)成一個簇,也就是一類。后來的點按照以上的操作往復(fù)循環(huán)就能找到一個一個的簇,直到所有的點被找過。

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets #加載數(shù)據(jù)集
X=datasets.make_circles(n_samples=1000, factor=0.2, noise=0.1)[0] #生成環(huán)形數(shù)據(jù)
def distance(X):      #計算個點之間的距離(矩陣,同pdist2)n=len(X)D=np.zeros((n,n))for i in range(n):for j in range(0,i):D[i][j]=np.linalg.norm(X[i]-X[j],ord=2)D[j][i]=D[i][j]return D
def dbscan(X,epsilon,MinPts):C=0  #以點在源數(shù)據(jù)中的位置標(biāo)記類別n=len(X)idx=[0 for i in range(n)]  #類別信息存儲visited=[0 for i in range(n)] #巡查判斷D=distance(X)  #距離矩陣def RegionQuery(i):       #列出一個點周圍ε內(nèi)存在的點的下標(biāo)Neighbors=np.where(D[i,:]<=epsilon)return list(Neighbors)[0].tolist()  #以列表形式返回def ExpandCluster(i,Neighbors,C):  #將鄰域點能夠成為核心點的點歸類idx[i]=C  #將點賦給類別k=1while k<=len(Neighbors):j=Neighbors[k]if visited[j]==0:visited[j]=1Neighbors2=RegionQuery(j)if len(Neighbors2)>=MinPts:Neighbors.extend(Neighbors2)if idx[j]==0:idx[j]=C  #將沒有分類的點分類k=k+1if k>len(Neighbors)-1:breakfor i in range(n):  #尋找核心點if visited[i]==0:visited[i]=1Neighbors=RegionQuery(i)if len(Neighbors)>=MinPts:C=C+1   #類別標(biāo)志加一ExpandCluster(i,Neighbors,C)return idx
def plot(a,X):  #繪畫板塊m=max(a)for j in range(m):index=[i for i,v in enumerate(a) if v==j+1]x=[]y=[]for k in index:x.append(X[k][0])y.append(X[k][1])plt.scatter(x,y)x=[]y=[]for i in range(len(a)): #噪點繪制if a[i]==0:x.append(X[i][0])y.append(X[i][1])plt.scatter(x,y,marker='x')plt.show()
if __name__=="__main__":  #設(shè)置ε為0.2,MinPts為3 進(jìn)行測a=dbscan(X,0.2,3)plot(a,X)

總結(jié)

以上是生活随笔為你收集整理的DBSCAN聚类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。