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

news/2024/5/20 9:22:53 标签: 聚类, 机器学习, python

生成数据集

python">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

在这里插入图片描述

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

在这里插入图片描述

生成核心对象

python">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

对数据集可视化展示

python">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上,需要可私信我或者评论区回复;

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

python">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可聚类的形状远不止球状,甚好!

http://www.niftyadmin.cn/n/1523784.html

相关文章

华为音频编辑服务带你一键伴奏分离!

华为音频编辑服务的音源分离功能支持人声与人声&#xff0c;人声与伴奏&#xff0c;人声与乐器元素&#xff08;即所有乐器单独提取&#xff09;。 首先&#xff0c;我们来看一段使用华为音频编辑服务提取的《Dream it Possible》伴奏Demo。 &#xff08;查看示例效果请访问&am…

bootstrap 图片轮询_轮询、长轮询和websocket

一、轮询在一些需要进行实时查询的场景下应用比如投票系统&#xff1a;大家一起在一个页面上投票在不刷新页面的情况下&#xff0c;实时查看投票结果1、后端代码from flask importFlask, render_template, request, jsonifyapp Flask(__name__)USERS{1: {name: 小米, count: 30…

《字节流与字符流的区别详解》 重要,一定要看

http://blog.csdn.net/zxman660/article/details/7875799 字节流与字符流的区别详解 标签&#xff1a; stringbytejava虚拟机io磁盘2012-08-17 09:23 33891人阅读 评论(10) 收藏 举报分类&#xff1a;菜鸟自学Java系列&#xff08;57&#xff09; 字节流与字符流 先来看一下流…

Insights直播预告 | 多媒体管线服务,助您轻松进入“技术流”创新阵地

【导读】 随着各类音视频移动应用快速发展&#xff0c;短视频、线上直播等娱乐方式逐渐为大众所喜爱。优质的视听效果和交互体验&#xff0c;往往能吸引更多的用户。多媒体管线服务作为一个轻量级的多媒体开发框架&#xff0c;其跨平台、高性能的多媒体处理能力可综合降低开发…

提及少年一词,应与平庸相斥

一年前&#xff0c;我想象过我达成所有 flag 时的样子&#xff0c;会去写长长的经验贴&#xff0c;会去想去的地方闪闪发光&#xff0c;会站在高高的领奖台上指点江山&#xff0c;激扬文字&#xff0c;粪土tmd当年万户侯。 如今&#xff0c;我只有一个念头&#xff0c;我不光要…

HDD成都站:HMS Core 6.0带来新可能,多元服务驱动产品价值提升

9月10日&#xff0c;由华为开发者联盟主办的HDD&#xff08;Huawei Developer Day&#xff09;于成都举行。活动中&#xff0c;华为HMS Core各领域专家重点解读了HMS Core 6.0为开发者带来的多项全新能力&#xff0c;及生态开放应用的场景和价值。多位华为专家也详细展示了各平…

SQL小心得

查 select * from table_1 inner/left join table_2 on ... where ... group by ... having ..

Java SE7新特性之try-with-resources语句

http://blog.csdn.net/jackiehff/article/details/17765909 try-with-resources语句是一个声明一个或多个资源的 try 语句。一个资源作为一个对象&#xff0c;必须在程序结束之后随之关闭。 try-with-resources语句确保在语句的最后每个资源都被关闭 。任何实现了 java.lang.A…