• https://github.com/Sean16SYSU/MachineLearningImplement

DBSCAN算法

基于密度的聚类方法DBSCAN算法,是相当经典。
算法思路很简单。
简述算法思路:

  1. 选取密度较高的点作为核心点
  2. 通过一个核心点出发,把其领域的点都放入到广度优先搜索的队列中。
  3. 将所有找到的点归结为一个类。之后,再从新的没有被访问过的点中找其他的核心点开始,又继续进行广度优先搜索。一直到所有的点都被访问过(即分配过了对对应的类别)

Python实现

  • 导入数据
from sklearn import datasets
import numpy as np
import matplotlib.pyplot as pltiris = datasets.load_iris()
  • 算法实现
def DBSCAN(X, epsilon=1, MinPts=10):Nx = [0 for i in range(len(X))] core_points = []for i, xi in enumerate(X):temp = np.array([np.linalg.norm(xi - cj) if i != j else np.inf for j, cj in enumerate(X)])Nx[i] =  set(np.where(temp < epsilon)[0])if len(Nx[i]) >= MinPts:core_points.append(i)k = 0not_visited = set([i for i in range(len(X))])Ck = [0 for i in range(len(X))] if len(core_points) == 0:print("Not core_points")while len(core_points) > 0:not_visited_temp = not_visitedo = core_points[np.random.randint(0, len(core_points))]Queue = [o]not_visited = not_visited - set(Queue)while len(Queue) > 0:q = Queue[0]Queue = Queue[1:]if len(Nx[q]) >= MinPts:delta = Nx[q] & not_visitedQueue = Queue + list(delta)not_visited = not_visited - deltaCk[k] = not_visited_temp - not_visitedcore_points = list(set(core_points) - Ck[k])k += 1Ans = np.zeros(len(X))for k_i in range(k):Ans[list(Ck[k_i])] = k_ireturn Ans
  • 测试
test_y = DBSCAN(iris.data,)
  • 画图
from sklearn.decomposition import PCAX_reduced = PCA(n_components=2).fit_transform(iris.data)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=test_y, cmap=plt.cm.Set1)

  • iris数据集其实是有三个类别的。应该是有些类别的数值数值波动特征不太明显。
  • 可以先做数据预处理之后,再做聚类,效果会好很多。

DBSCAN算法理论和Python实现相关推荐

  1. 一个简单好用的磨皮祛斑算法理论和python实现

    前言 最近看了一个磨皮算法祛斑感觉效果不错,效果图看文末就行,个人觉得效果非常不错滴. 国际惯例,参考博客: 磨皮算法的源码:YUCIHighPassSkinSmoothing How To Smoo ...

  2. DBSCAN聚类算法——机器学习(理论+图解+python代码)

    一.前言 二.DBSCAN聚类算法 三.参数选择 四.DBSCAN算法迭代可视化展示 五.常用的评估方法:轮廓系数 六.用Python实现DBSCAN聚类算法 一.前言 去年学聚类算法的R语言的时候, ...

  3. 机器学习强基计划7-5:图文详解密度聚类DBSCAN算法(附Python实现)

    目录 0 写在前面 1 密度聚类 2 DBSCAN算法 3 Python实现 3.1 算法复现 3.2 可视化实验 0 写在前面 机器学习强基计划聚焦深度和广度,加深对机器学习模型的理解与应用.&qu ...

  4. dbscan算法python实现_Python实现DBScan

    Python实现DBScan 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end: 结束 ...

  5. 模拟退火算法理论+Python解决函数极值+C++实现解决TSP问题

    简述 算法设计课这周的作业: 赶紧写了先,不然搞不完了. 文章目录 简述 算法理论部分 变量简单分析 从状态转移概率到状态概率 推导 理解当温度收敛到接近0的时候,收敛到结果 理论部分的后记 pyth ...

  6. 【建模算法】dbscan算法(python实现)

    [建模算法]dbscan算法(python实现) 对于学习机器学习和数据挖掘数据分析的小伙伴们来说,dbscan算法一定不会陌生.dbscan算法是一种基于密度的空间聚类算法,它可以快熟处理聚类同时有 ...

  7. 非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析实践技术

    有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法.尽管各类商业软件使用方便,但其使用对用户来说往往是一个"黑箱子" ...

  8. 基于MATLAB与Python的DBSCAN算法代码

    接上文,我们详细介绍了DBSCAN与几种常见聚类算法的对比与流程,DBSCAN聚类算法最为特殊,它是一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,接下来将DBSCAN分析代码分享 Pytho ...

  9. 非线性有限元:基本理论与算法及基于Python、Fortran程序实现与案例分析

    非线性有限元:基本理论与算法及基于Python.Fortran程序实现与案例分析 (qq.com) 有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采 ...

最新文章

  1. Linux之磁盘管理,分区
  2. linux 启动rabbitmq 报错:
  3. xml签名和普通数字签名
  4. 《2022博客之星拉票专用帖》
  5. 融合通信常见问题3月刊 | 云信小课堂
  6. 帝国网站管理系统7.5服务器信息,帝国CMS程序 7.5版本新闻可以使用的后台免登录接口...
  7. 基于GCCAVR的TLC2543读写程序----模拟SPI方式实现
  8. 解决Unity3D导出apk失败:Failed to re-package resources
  9. linux协议栈劫持,Linux系统优化之TCP协议栈优化-基本篇1
  10. 第 15 章 垃圾回收相关算法
  11. 电动汽车仿真系列-电动汽车复合电源的建模与仿真研究
  12. 浅谈设备驱动的作用与本质,有无操作系统Linux设备驱动的区别
  13. Arcgis拓扑检查必须相互覆盖操作步骤
  14. YARN ACCEPTED: waiting for AM container to be allocated, launched and register with RM.
  15. 2017-11-3 白银分析
  16. 百度地图设置显示中心点
  17. js中关于时间的转化——将秒/毫秒转化成xx小时xx分钟xx秒
  18. fMRI质量预检查与服务器批量处理:时间点、体素尺寸批量审查与Dpabi(DPARSFA)服务器上无GUI无弹窗处理脑功能影像(附matlab脚本)
  19. EtherCAT DC (学习笔记)
  20. Python Basic - GIL:global interpreter lock(全局解释器锁)

热门文章

  1. 安全研究人受够!再公布WordPress 3大外挂漏洞
  2. 叔叔我要可乐,要冰冻的
  3. Java之JVM 优化经验总结
  4. PHP高手如何修炼?
  5. SharePoint 2010 change home page或者default page
  6. myeclipse优化方案
  7. 【正一专栏】读《怎样做社会研究》——社会研究的意义
  8. 算法导论之单源最短路径
  9. 虚拟光驱安装服务器无法运行,windows7虚拟光驱无法正常打开怎么办
  10. @EnableAspectJAutoProxy||AOP原理:【看给容器中注册了什么组件,这个组件什么时候工作,这个组件的功能是什么?】