利用鸢尾花数据集复现DBSCAN密度聚类算法

生成数据集

from sklearn import datasets
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random 
data = datasets.load_iris()[:,:2].tolist()
data

在这里插入图片描述

  • 为了后续可视化方便,故此处选择生成二维数据集,毕竟画二维散点图不怎么需要动脑子;

在这里插入图片描述

生成核心对象

MIN_PTS = 3
E = .1
O = []
for i in range(len(data)):
	num = 0
	for j in range(len(data)):
		if distance(i,j) <= E:
			num += 1
	if num >= MIN_PTS:
		O.append(data[i]) 
O

对数据集可视化展示

plt.figure(figsize=(3,3),dpi=200)
plt.style.use('seaborn-dark')
for i in range(len(data)):
	plt.scatter(data[i][0],data[i][1],color='red')
for j in range(len(O)):
	plt.scatter(data[j][0],data[j][1],color='blue')

在这里插入图片描述

  • 此处的红色点以及蓝色点构成所有样本点,而蓝色点也就是我们控制阈值而得出的核心对象;
  • 另外,此处所有代码均为现撸,省略很多简单函数,比如distance,懂得自然懂。完整代码在jupyter上,需要可私信我或者评论区回复;

利用生成的核心对象生成簇

OBJ = O.copy() #拷贝核心对象
unflag = data.copy() #拷贝数据集,后续做标记
MIN_PTS = 3 #对象阈值
E = .1 #半径
k = 0 #聚类簇数
colors = ['yellow','green','pink','black']
markers = ['1','2','*','+']
while OBJ:
	obj = OBJ[random.randint(0,len(OBJ)-1)]
	C = [obj] #聚类簇
	Q = [obj] #核心对象遍历,队列
	unflag.remove(obj)
	while Q:
		q = Q[0]
		del Q[0]
		num = 0
		ts = []
		for i in range(len(unflag)):
			if distance(q,unflag[i]) < E:
				num += 1
				ts.append(unflag(i))
			if num >= MIN_PTS:
				for s in ts:
					if s in unflag:
						Q.append(s)
						C.append(s)
						unflag.remove(s)
	for j in C:
		if j in OBJ:
			OBJ.remove(j)
		plt.scatter(j[0],j[1],color=colors[k%4],marker = markers[k%4])
	k += 1
  • 阈值可自己调
  • 最终分成三类,list ou of range,所以不仅看颜色 更要看形状
    在这里插入图片描述
  • 本博客仅用于本人学习使用,不得转载用作他途
  • 下期出使用K-means做对比的复现
  • 目前来看,DBscan可聚类的形状远不止球状,甚好!
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexander plus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值