本人在此就不搬运书上关于密度聚类的理论知识了,仅仅实现密度聚类的模板代码和调用skelarn的密度聚类算法。

有人好奇,为什么有sklearn库了还要自己去实现呢?其实,库的代码是比自己写的高效且容易,但自己实现代码会对自己对算法的理解更上一层楼。#调用科学计算包与绘图包

import numpy as np

import random

import matplotlib.pyplot as plt# 获取数据

def loadDataSet(filename):

dataSet=np.loadtxt(filename,dtype=np.float32,delimiter=',')

return dataSet#计算两个向量之间的欧式距离

def calDist(X1 , X2 ):

sum = 0

for x1 , x2 in zip(X1 , X2):

sum += (x1 - x2) ** 2

return sum ** 0.5#获取一个点的ε-邻域(记录的是索引)

def getNeibor(data , dataSet , e):

res = []

for i in range(dataSet.shape[0]):

if calDist(data , dataSet[i])

res.append(i)

return res#密度聚类算法

def DBSCAN(dataSet , e , minPts):

coreObjs = {}#初始化核心对象集合

C = {}

n = dataSet.shape[0]

#找出所有核心对象,key是核心对象的index,value是ε-邻域中对象的index

for i in range(n):

neibor = getNeibor(dataSet[i] , dataSet , e)

if len(neibor) =minPts:

coreObjs[i] = neibor

oldCoreObjs = coreObjs.copy()

k = 0#初始化聚类簇数

notAccess = list(range(n))#初始化未访问样本集合(索引)

while len(coreObjs) 0:

OldNotAccess = []

OldNotAccess.extend(notAccess)

cores = coreObjs.keys()

#随机选取一个核心对象

randNum = random.randint(0,len(cores)-1)

cores=list(cores)

core = cores[randNum]

queue = []

queue.append(core)

notAccess.remove(core)

while len(queue) 0:

q = queue[0]

del queue[0]

if q in oldCoreObjs.keys() :

delte = [val for val in oldCoreObjs[q] if val in notAccess]#Δ = N(q)∩Γ

queue.extend(delte)#将Δ中的样本加入队列Q

notAccess = [val for val in notAccess if val not in delte]#Γ = Γ\Δ

k += 1

C[k] = [val for val in OldNotAccess if val not in notAccess]

for x in C[k]:

if x in coreObjs.keys():

del coreObjs[x]

return C# 代码入口

dataSet = loadDataSet(r"E:\jupyter\sklearn学习\sklearn聚类\DataSet.txt")

print(dataSet)

print(dataSet.shape)

C = DBSCAN(dataSet, 0.11, 5)

draw(C, dataSet)

结果图:

下面是调用sklearn库的实现db = skc.DBSCAN(eps=1.5, min_samples=3).fit(dataSet) #DBSCAN聚类方法 还有参数,matric = ""距离计算方法

labels = db.labels_ #和X同一个维度,labels对应索引序号的值 为她所在簇的序号。若簇编号为-1,表示为噪声

print('每个样本的簇标号:')

print(labels)

raito = len(labels[labels[:] == -1]) / len(labels) #计算噪声点个数占总数的比例

print('噪声比:', format(raito, '.2%'))

n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) # 获取分簇的数目

print('分簇的数目: %d' % n_clusters_)

print("轮廓系数: %0.3f" % metrics.silhouette_score(X, labels)) #轮廓系数评价聚类的好坏

for i in range(n_clusters_):

print('簇 ', i, '的所有样本:')

one_cluster = X[labels == i]

print(one_cluster)

plt.plot(one_cluster[:,0],one_cluster[:,1],'o')

plt.show()

到此这篇关于python实现密度聚类(模板代码+sklearn代码)的文章就介绍到这了,更多相关python 密度聚类内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

密度聚类算法python详解_python实现密度聚类(模板代码+sklearn代码)相关推荐

  1. DPC密度峰值聚类算法原理详解二

    DPC密度峰值聚类算法原理详解二 1.计算数据点两两之间的距离 1.使用 Numpy 模块查找两点之间的欧几里得距离: 2.使用 distance.euclidean() 函数查找两点之间的欧式距离: ...

  2. k-means聚类算法的详解和实现

    一.相异度计算  在正式讨论聚类前,我们要先弄清楚一个问题:如何定量计算两个可比较元素间的相异度.用通俗的话说,相异度就是两个东西差别有多大,例如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能 ...

  3. 【机器学习】—— K-means聚类算法原理详解 以及 二维、三维数据的K-means聚类Python实现

    文章目录 一.K-Means聚类算法原理过程 1.1 K-means聚类的一些细节 1.1.1 样本x(i)x^{(i)}x(i)与中心点μkμ_kμk​距离的衡量 1.1.2 K-means聚类算法 ...

  4. 机器理解大数据的秘密:聚类算法深度详解

    在理解大数据方面,聚类是一种很常用的基本方法.近日,数据科学家兼程序员 Peter Gleeson 在 freeCodeCamp 发布了一篇深度讲解文章,对一些聚类算法进行了基础介绍,并通过简单而详细 ...

  5. 聚类算法——Birch详解

    1 原理 1.1 B树 (1)m路查找树 一棵m路查找树,它或者是一棵空树,或者是满足如下性质的树: 根最多有m棵子树,并具有以下结构: ,是指向子树的指针,是关键码, 在子树中所有的关键码都大于,小 ...

  6. 名片管理系统python详解_Python综合应用名片管理系统案例详解

    本文实例讲述了Python综合应用名片管理系统.分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎 ...

  7. 彩色蟒蛇python详解_Python绘制彩色蟒蛇

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一开始在练习的时候,在网上看了一些实例,看到有一个简单的例子,就是蟒蛇的例子,大家也知道Python这个中文翻译过来就是蟒蛇的意思,接着我有借用了这个实例 ...

  8. python实现k core算法_python实现密度聚类(模板代码+sklearn代码)

    本人在此就不搬运书上关于密度聚类的理论知识了,仅仅实现密度聚类的模板代码和调用skelarn的密度聚类算法. 有人好奇,为什么有sklearn库了还要自己去实现呢?其实,库的代码是比自己写的高效且容易 ...

  9. 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解

    1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...

  10. python 雪花id_基于python实现雪花算法过程详解

    这篇文章主要介绍了基于python实现雪花算法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Snowflake是Twitter提出来的一个 ...

最新文章

  1. 95后女生坚持转数学专业,成功直博双一流!网友:这是高手……
  2. 关于fseek和文件ab+打开方式的问题
  3. HTML页面显示缩略所有空格为一格的方法
  4. TintTo和TintBy
  5. 【ASP.NET】登陆成功后如何跳转到上一个页面
  6. webservie报文格式
  7. 2019中国民营企业500强发布:华为、海航、苏宁位列前三
  8. python字符串驼峰转换_将字符串转换为驼峰格式
  9. 使用harbor搭建docker镜像私有仓库
  10. coreldrawx4缩略图显示不出来_cdrx4sp2缩略图补丁|CorelDraw X4 sp2缩略图显示补丁 32/64位 最新免费版 下载_当下软件园_软件下载...
  11. UniWebView 3 使用心得
  12. scheme 微博_可用App URL Schemes
  13. u盘写保护,无法格式化
  14. 9011,9012,9013,9014,8050,8550三极管的区别
  15. 计算机命令清除所有,电脑深度清理命令设置方法
  16. docker操作时使用https时报错问题解决
  17. 计算机更新后启动不了,win10系统更新显卡之后开不了机如何解决
  18. 罗克韦尔AB PLC RSLogix5000中的比较指令使用方法介绍
  19. MYSQL:Unknown column ‘字段名‘ in ‘field list‘ 错误解决方案
  20. 「 机器人学 」“Human-aware机器人导航技术”浅谈

热门文章

  1. 用SyncToy进行两台服务器之间文件同步
  2. Office文档修复介绍之:laola文件格式介绍
  3. 多元函数的泰勒展开Talor以及黑塞矩阵
  4. MyEclipse配置Tomcat 7
  5. 教你给视频添加马赛克的剪辑技巧,轻松简单
  6. c语言编程数的平方,C语言编程实例:由两个平方三位数获得三个平方二位数
  7. git 镜像下载和基本使用
  8. android libpng16,Android原生(Native)C开发之六:libpng移植笔记
  9. STM32的ucgui移植
  10. 60页5G+智慧农业大数据 2022