计算机中取值范围是277278,DBSCAN-密度聚类

DNSCAN有几个点需要理解清楚:

核心点:

在半径eps邻域内含有超过minpts数目的点,则为核心点,这些点都在簇内。

边界点

在半径eps邻域内含有小于minpts数目的点,则为边界点,这些点都在核心的邻居。

噪声点

不是核心点和边界点的点

核心对象

如果对象的Eps邻域至少包含最小数目MinPts的对象,则称该对象为核心对象。

eps邻域

给定对象半径Eps内的邻域称为该对象的Eps邻域,我们用 表示点p的Eps-半径内的点的集合,即:

N ( p) = {q | q在数据集 D中,distance(p , q)  Eps}

直接密度可达:

给定一个对象集合D,如果p在q的Eps邻域内,而q是一个核心对象,则称对象p 从对象q出发时是直接密度可达的(directlydensity-reachable)。

密度可达:

如果存在一个对象链 ,对于pi属于集合D,pi+1是从pi关于Eps和MinPts直接密度可达的,则对象p是从对象q关于Eps和MinPts密度可达的(density-reachable)。

密度相连:

如果存在对象O∈D,使对象p和q都是从O关于Eps和MinPts密度可达的,那么对象p到q是关于Eps和MinPts密度相连的(densityconnected)。

直接密度可达一定密度可达,密度相连一定密度可达

原理:

1,DBSCAN通过检查数据集中每个样本点的eps邻域来搜索簇,如果点p的我平时邻域包含的点多余minpts,则创建一个以p为核心对象的簇

2,DBSCAN迭代的聚集从这些核心点对象直接密度可达的对象,这个过程可能涉及一些密度可达的合并

3,当没有新的点添加到任何簇时,过程结束。

伪代码:

b7df9cedc6a4cfd1e5c47e1bf03a1233.png

import numpy as np

import matplotlib.pyplot as plt

import math

import random

from sklearn import datasets

#距离公式

def distance(x,y):

return np.sqrt(np.sum((x-y)**2))

def dbscan(dataset,minpts,eps):

n,m = dataset.shape

clusters = np.full(n,-1)

#簇的类别

k = 1

for i in range(n):

if clusters[i]!=-1:

continue

#获取领域中的所有样本点

subdataset = [j for j in range(n) if distance(dataset[j],dataset[i])<=eps]

print(subdataset)

if len(subdataset)

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])

if len(sub)>=minpts:

for t in sub:

if t not in subdataset:

subdataset.append(t)

print(clusters)

return clusters

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值