并不是在边界上的点就是边界点
出发—表示方向;可达—够得着
从P到q密度可达,p和m两个互相之间都是直接密度可达,如果密度可达则一定密度相连
部分代码:
import numpy as np
#定义一个类 用于计算样本状态信息
#距离计算
def distance(x,y):
return np.sqrt(np.sum(x-y)**2)
def dbscan(dataset,minPts,eps):
"""
:param dataset:数据集
:param minPts:最小点数
:param eps:半径
:return 放回样本簇到集合
"""
n,m=dataset.shape
#定义一个容器,存储样品分类
clusters=np.full((n,1),-1)
#簇点类别
k=-1
for i in range(n):
if clusters[i]!=-1:
continue
#获取领域中的所有样本点
subdataset=[j for j in range(n) if distance(dataset[j],p)<eps]
if len(subdataset)<minPts:
continue
#建立新的簇(标记)
k+=1
clusters[i]=k
for j in subdataset:
clusters[j]=k
if j>i:
sub =[item for item in range(n) if distance(dataset[j],dataset[item])<=eps]
if len(sub)>=minPts:
for t in sub:
if t not in subdataset:
subdataset.append(t)
# subdataset.extend(sub)#sub中元素,append是列表
# subdataset=list(set(subdataset)) set导致数据乱了
return clusters
没分出来