# from sklearn import datasets
import numpy as np #科学计算包
import random
import matplotlib.pyplot as plt #2D绘图库
import time
begin=time.time()
def findNeighbor(j,X,eps): #eps是扫描半径
N=[] #令N为p的eps邻域中的对象的集合
for p in range(X.shape[0]): #找到所有领域内对象
temp=np.sqrt(np.sum(np.square(X[j]-X[p]))) #欧氏距离
if(temp<=eps):
N.append(p) #将p加入N列表内
return N
def dbscan(X,eps,min_Pts):
k=-1
NeighborPts=[] #array,某点领域内的对象
Ner_NeighborPts=[]
fil=[] #初始时已访问对象列表为空
gama=[x for x in range(len(X))] #初始时将所有点标记为未访问
cluster=[-1 for y in range(len(X))]
while len(gama)>0:
j=random.choice(gama)
gama.remove(j) #未访问列表中移除
fil.append(j) #添加入访问列表
NeighborPts=findNeighbor(j,X,eps)
if len(NeighborPts) < min_Pts: #比较N列表的长度和min_Pts
cluster[j]=-1 #若关于j的列表的长度过小,将j标记为噪声点
else:
k=k+1
cluster[j]=k #j不是噪声点
for i in NeighborPts: #访问N列表中的点
if i not in fil: #如果点未被添加到访问列表
gama.remove(i) #将点从未访问列表移除
fil.append(i) #将点添加到访问列表中
Ner_NeighborPts=findNeighbor(i,X,eps)
if len(Ner_NeighborPts) >= min_Pts: #判断点是否也是核心对象
for a in Ner_NeighborPts: #访问核心对象i的密度可达点
if a not in NeighborPts:
NeighborPts.append(a) #如果a不在N列表内,则进行添加
if (cluster[i]==-1): #--------------
cluster[i]=k
print(k)
return cluster
#--------------------------------------------
# X1, y1=datasets.make_circles(n_samples=5000, factor=.6,
# noise=.05)
# X2, y2 = datasets.make_blobs(n_samples=1000, n_features=2, centers=[[1.2,1.2]], cluster_std=[[.1]],
# random_state=9)
# X = np.concatenate((X1, X2))
dataset="Iris1.txt"
X=np.loadtxt(dataset, delimiter='\t')
eps=1
min_Pts=1
C=dbscan(X,eps,min_Pts)
plt.figure(num='dbscan',figsize=(12, 9), dpi=80, facecolor='pink',edgecolor='red', frameon=True)
plt.scatter(X[:,0],X[:,1],marker='*',c=C)
plt.show()
end=time.time()
print ("my dbscan用时:",end-begin)
dbscan.zip_DBSCAN_dbscanpython实现_python DBSCAN_python实现dbscan_ra
版权申诉
99 浏览量
2022-09-23
21:12:44
上传
评论
收藏 1KB ZIP 举报
钱亚锋
- 粉丝: 88
- 资源: 1万+
最新资源
- 本科毕业设计基于C# wpf人脸识别的考勤系统的设计与实现源码.zip
- 基于Ruoyi+uniapp实现学生考勤系统 学生考勤源码+项目说明.zip
- feae6bc968ca68a099455d8b8a8dea35
- 基于Pytorch训练CIRAR10上分类算法.zip
- Pytorch-pytorch深度学习教程之Tensorboard.zip
- 基于C++和Python开发yolov8-face作为人脸检测器dlib作为人脸识别器的人脸考勤系统源码+项目说明.zip
- Pytorch-pytorch深度学习教程之变分自动编码器.zip
- Pytorch-pytorch深度学习教程之神经风格迁移.zip
- Pytorch-pytorch深度学习教程之深度残差网络.zip
- Pytorch-pytorch深度学习教程之循环神经网络.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈