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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DBSAN密度聚类算法

發布時間:2024/2/28 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DBSAN密度聚类算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import numpy as np import matplotlib.pyplot as plt import math import randomfrom sklearn import datasets # visitlist類用于記錄訪問列表 # unvisitedlist記錄未訪問過的點 # visitedlist記錄已訪問過的點 # unvisitednum記錄訪問過的點數量 class visitlist:def __init__(self, count=0):self.unvisitedlist=[i for i in range(count)]self.visitedlist=list()self.unvisitednum=countdef visit(self, pointId):self.visitedlist.append(pointId)self.unvisitedlist.remove(pointId)self.unvisitednum -= 1def dist(a, b):# 計算a,b兩個元組的歐幾里得距離return math.sqrt(np.power(a-b, 2).sum())def my_dbscanl(dataSet, eps, minPts):# numpy.ndarray的 shape屬性表示矩陣的行數與列數nPoints = dataSet.shape[0]print(nPoints)# (1)標記所有對象為unvisited# 在這里用一個類vPoints進行買現vPoints = visitlist(count=nPoints)# 初始化簇標記列表C,簇標記為 kk = -1C = [-1 for i in range(nPoints)]while(vPoints.unvisitednum > 0):# (3)隨機上選擇一個unvisited對象pp = random.choice(vPoints.unvisitedlist)# (4)標記p為visitedvPoints.visit(p)# (5)if p的$\varepsilon$-鄰域至少有MinPts個對象# N是p的$\varepsilon$-鄰域點列表N = [i for i in range(nPoints) if dist(dataSet[i], dataSet[p])<= eps]if len(N) >= minPts:# (6)創建個新簇C,并把p添加到C# 這里的C是一個標記列表,直接對第p個結點進行賦植k += 1C[p]=k# (7)令N為p的ε-鄰域中的對象的集合# N是p的$\varepsilon$-鄰域點集合# (8) for N中的每個點p'for p1 in N:# (9) if p'是unvisitedif p1 in vPoints.unvisitedlist:# (10)標記p’為visitedvPoints.visit(p1)# (11) if p'的$\varepsilon$-鄰域至少有MinPts個點,把這些點添加到N# 找出p'的$\varepsilon$-鄰域點,并將這些點去重添加到NM=[i for i in range(nPoints) if dist(dataSet[i], \dataSet[p1]) <= eps]if len(M) >= minPts:for i in M:if i not in N:N.append(i)# (12) if p'還不是任何簇的成員,把P'添加到C# C是標記列表,直接把p'分到對應的簇里即可if C[p1] == -1:C[p1]= k# (15)else標記p為噪聲else:C[p]=-1# (16)until沒有標t己為unvisitedl內對象return CX1, Y1 = datasets.make_circles(n_samples=2000, factor=0.6, noise=0.05,random_state=1) X2, Y2 = datasets.make_blobs(n_samples=500, n_features=2, centers=[[1.5,1.5]],cluster_std=[[0.1]], random_state=5) X = np.concatenate((X1, X2)) C1 = my_dbscanl(X, 0.1, 10)plt.scatter(X[:, 0], X[:, 1], c=C1, marker='.') plt.show()

?

總結

以上是生活随笔為你收集整理的DBSAN密度聚类算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。