密度聚类算法python详解_python实现密度聚类(模板代码+sklearn代码)
本人在此就不搬运书上关于密度聚类的理论知识了,仅仅实现密度聚类的模板代码和调用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代码)相关推荐
- DPC密度峰值聚类算法原理详解二
DPC密度峰值聚类算法原理详解二 1.计算数据点两两之间的距离 1.使用 Numpy 模块查找两点之间的欧几里得距离: 2.使用 distance.euclidean() 函数查找两点之间的欧式距离: ...
- k-means聚类算法的详解和实现
一.相异度计算 在正式讨论聚类前,我们要先弄清楚一个问题:如何定量计算两个可比较元素间的相异度.用通俗的话说,相异度就是两个东西差别有多大,例如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能 ...
- 【机器学习】—— 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聚类算法 ...
- 机器理解大数据的秘密:聚类算法深度详解
在理解大数据方面,聚类是一种很常用的基本方法.近日,数据科学家兼程序员 Peter Gleeson 在 freeCodeCamp 发布了一篇深度讲解文章,对一些聚类算法进行了基础介绍,并通过简单而详细 ...
- 聚类算法——Birch详解
1 原理 1.1 B树 (1)m路查找树 一棵m路查找树,它或者是一棵空树,或者是满足如下性质的树: 根最多有m棵子树,并具有以下结构: ,是指向子树的指针,是关键码, 在子树中所有的关键码都大于,小 ...
- 名片管理系统python详解_Python综合应用名片管理系统案例详解
本文实例讲述了Python综合应用名片管理系统.分享给大家供大家参考,具体如下: 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 程序启动,显示名片管理系统欢迎 ...
- 彩色蟒蛇python详解_Python绘制彩色蟒蛇
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一开始在练习的时候,在网上看了一些实例,看到有一个简单的例子,就是蟒蛇的例子,大家也知道Python这个中文翻译过来就是蟒蛇的意思,接着我有借用了这个实例 ...
- python实现k core算法_python实现密度聚类(模板代码+sklearn代码)
本人在此就不搬运书上关于密度聚类的理论知识了,仅仅实现密度聚类的模板代码和调用skelarn的密度聚类算法. 有人好奇,为什么有sklearn库了还要自己去实现呢?其实,库的代码是比自己写的高效且容易 ...
- 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解
1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...
- python 雪花id_基于python实现雪花算法过程详解
这篇文章主要介绍了基于python实现雪花算法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Snowflake是Twitter提出来的一个 ...
最新文章
- 95后女生坚持转数学专业,成功直博双一流!网友:这是高手……
- 关于fseek和文件ab+打开方式的问题
- HTML页面显示缩略所有空格为一格的方法
- TintTo和TintBy
- 【ASP.NET】登陆成功后如何跳转到上一个页面
- webservie报文格式
- 2019中国民营企业500强发布:华为、海航、苏宁位列前三
- python字符串驼峰转换_将字符串转换为驼峰格式
- 使用harbor搭建docker镜像私有仓库
- coreldrawx4缩略图显示不出来_cdrx4sp2缩略图补丁|CorelDraw X4 sp2缩略图显示补丁 32/64位 最新免费版 下载_当下软件园_软件下载...
- UniWebView 3 使用心得
- scheme 微博_可用App URL Schemes
- u盘写保护,无法格式化
- 9011,9012,9013,9014,8050,8550三极管的区别
- 计算机命令清除所有,电脑深度清理命令设置方法
- docker操作时使用https时报错问题解决
- 计算机更新后启动不了,win10系统更新显卡之后开不了机如何解决
- 罗克韦尔AB PLC RSLogix5000中的比较指令使用方法介绍
- MYSQL:Unknown column ‘字段名‘ in ‘field list‘ 错误解决方案
- 「 机器人学 」“Human-aware机器人导航技术”浅谈