本文实例讲述了Python聚类算法之DBSACN。分享给大家供大家参考,具体如下:

DBSCAN:是一种简单的,基于密度的聚类算法。本次实现中,DBSCAN使用了基于中心的方法。在基于中心的方法中,每个数据点的密度通过对以该点为中心以边长为2*EPs的网格(邻域)内的其他数据点的个数来度量。根据数据点的密度分为三类点:

核心点:该点在邻域内的密度超过给定的阀值MinPs。

边界点:该点不是核心点,但是其邻域内包含至少一个核心点。

噪音点:不是核心点,也不是边界点。

有了以上对数据点的划分,聚合可以这样进行:各个核心点与其邻域内的所有核心点放在同一个簇中,把边界点跟其邻域内的某个核心点放在同一个簇中。

# scoding=utf-8

import pylab as pl

from collections import defaultdict,Counter

points = [[int(eachpoint.split("#")[0]), int(eachpoint.split("#")[1])] for eachpoint in open("points","r")]

# 计算每个数据点相邻的数据点,邻域定义为以该点为中心以边长为2*EPs的网格

Eps = 10

surroundPoints = defaultdict(list)

for idx1,point1 in enumerate(points):

for idx2,point2 in enumerate(points):

if (idx1 < idx2):

if(abs(point1[0]-point2[0])<=Eps and abs(point1[1]-point2[1])<=Eps):

surroundPoints[idx1].append(idx2)

surroundPoints[idx2].append(idx1)

# 定义邻域内相邻的数据点的个数大于4的为核心点

MinPts = 5

corePointIdx = [pointIdx for pointIdx,surPointIdxs in surroundPoints.iteritems() if len(surPointIdxs)>=MinPts]

# 邻域内包含某个核心点的非核心点,定义为边界点

borderPointIdx = []

for pointIdx,surPointIdxs in surroundPoints.iteritems():

if (pointIdx not in corePointIdx):

for onesurPointIdx in surPointIdxs:

if onesurPointIdx in corePointIdx:

borderPointIdx.append(pointIdx)

break

# 噪音点既不是边界点也不是核心点

noisePointIdx = [pointIdx for pointIdx in range(len(points)) if pointIdx not in corePointIdx and pointIdx not in borderPointIdx]

corePoint = [points[pointIdx] for pointIdx in corePointIdx]

borderPoint = [points[pointIdx] for pointIdx in borderPointIdx]

noisePoint = [points[pointIdx] for pointIdx in noisePointIdx]

# pl.plot([eachpoint[0] for eachpoint in corePoint], [eachpoint[1] for eachpoint in corePoint], 'or')

# pl.plot([eachpoint[0] for eachpoint in borderPoint], [eachpoint[1] for eachpoint in borderPoint], 'oy')

# pl.plot([eachpoint[0] for eachpoint in noisePoint], [eachpoint[1] for eachpoint in noisePoint], 'ok')

groups = [idx for idx in range(len(points))]

# 各个核心点与其邻域内的所有核心点放在同一个簇中

for pointidx,surroundIdxs in surroundPoints.iteritems():

for oneSurroundIdx in surroundIdxs:

if (pointidx in corePointIdx and oneSurroundIdx in corePointIdx and pointidx < oneSurroundIdx):

for idx in range(len(groups)):

if groups[idx] == groups[oneSurroundIdx]:

groups[idx] = groups[pointidx]

# 边界点跟其邻域内的某个核心点放在同一个簇中

for pointidx,surroundIdxs in surroundPoints.iteritems():

for oneSurroundIdx in surroundIdxs:

if (pointidx in borderPointIdx and oneSurroundIdx in corePointIdx):

groups[pointidx] = groups[oneSurroundIdx]

break

# 取簇规模最大的5个簇

wantGroupNum = 3

finalGroup = Counter(groups).most_common(3)

finalGroup = [onecount[0] for onecount in finalGroup]

group1 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[0]]

group2 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[1]]

group3 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[2]]

pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or')

pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy')

pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og')

# 打印噪音点,黑色

pl.plot([eachpoint[0] for eachpoint in noisePoint], [eachpoint[1] for eachpoint in noisePoint], 'ok')

pl.show()

运行效果截图如下:

希望本文所述对大家Python程序设计有所帮助。

用python做简单的聚类分析案例_Python聚类算法之DBSACN实例分析相关推荐

  1. python 聚类算法包_Python聚类算法之DBSACN实例分析 python怎么用sklearn包进行聚类

    python 怎么可视化聚类的结果 science 发表的聚类算法的python代码 测试数据长什...说明你的样本数据中有nan值,通常是因为原始数据中包含空字符串或None值引起的. 解决办法是把 ...

  2. python做简单温度转华氏_python温度转换华氏温度实现代码

    相信有些小伙伴,在没接触py之前,肯定都是有所准备的,想学语言由来已久,拿小编来说,一直趁着空挡就开始找课程学习,用记下学习历程,还会向一些大佬提出有疑问的点.这样一来我能获取问题答案,也能听到其他人 ...

  3. python做简单的游戏名字_python猜名字游戏

    〈1〉森浓不绿 | 深海不蓝 <2>Eternalhear ﹙3﹚狂欢的过客つ [4]穷鬼∵ 〈5〉∝花.袭人. [6]喜欢望着你 | 不要望着我 <7>妈妈说会骂人才是好孩子 ...

  4. 平均聚类系数_Python聚类算法的应用实例

    一家批发经销商想将发货方式从每周五次减少到每周三次,简称成本,但是造成一些客户的不满意,取消了提货,带来更大亏损,项目要求是通过分析客户类别,选择合适的发货方式,达到技能降低成本又能降低客户不满意度的 ...

  5. 基于聚类分析和协同过滤算法的营养膳食分析系统的设计与实现

    1 简介 今天向大家介绍一个帮助往届学生完成的毕业设计项目,基于聚类分析和协同过滤算法的营养膳食分析系统的设计与实现. 1. 协同过滤的算法思想 1.1. 基于内容的推荐中不足之处 基于内容的推荐方法 ...

  6. 聚类 python 代码_不足 20 行 Python 代码,高效实现 k-means 均值聚类算法

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 不足 20 行 Python 代码,高效实现 k-means 均值聚类算法-1.jpg (143.81 KB, ...

  7. python做一个登录注册界面_Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  8. python做数据可视化的代码_Python数据可视化正态分布简单分析及实现代码

    Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候... 正态分布(Normaldistribution),也称"常态分布",又名高斯分布(Gaussiandi ...

  9. python聚类分析案例_python 聚类分析实战案例:K-means算法(原理源码)

    K-means算法: 关于步骤:参考之前的博客 关于代码与数据:暂时整理代码如下:后期会附上github地址,上传原始数据与代码完整版, 各种聚类算法的对比:参考连接 Kmeans算法的缺陷 1.聚类 ...

最新文章

  1. Docker-Compose搭建单体SkyWalking 6.2
  2. 从C++strStr到字符串匹配算法
  3. android相关使用工具
  4. 前端学习(1840):前端面试题之小程序入门
  5. Java代理设计模式(Proxy)的具体实现:静态代理和动态代理
  6. wps怎么画网络图_尼玛,WPS竟然悄悄搞了个免费的公文写作AI...【石说】
  7. 算法导论12.2节习题解答
  8. potplayer最全使用教程,【无边框透明美化教程】+【全球IPTV电视直播教程】+【不用下载观看影视剧教程】!
  9. JavaScript丧尸游戏开发教程
  10. 【读书】卡勒德·胡赛尼《群山回唱》 摘录
  11. 用Python来判断输入的身份证号的性别
  12. Sketch 插件开发指南
  13. 绘制正态分布概率密度函数
  14. 基于Android的百度地图定位开发
  15. kubernetes 菜鸟_菜鸟系列k8s——k8s快速入门(1)
  16. 玩儿转ffmeg的7个技巧
  17. 【转载】 有道笔记-打卡50件事
  18. linux shell正则表达式如何匹配域名(包含中文域名)
  19. 33岁,还在找工作,惊讶到我了
  20. windows无法访问指定设备路径或文件怎么回事(系统找不到指定路径解决方法)

热门文章

  1. Jenkins部署瘦身jar包
  2. 2023年二级建造师报考条件要求及考试时间
  3. Iocomp .NET WinForm Bug Fix
  4. c#获取ssl证书有效性_如何在c#中获取远程服务器的SSL证书信息
  5. CSS——CSS 背景应用
  6. 一些实用的GitHub项目
  7. 智能电销系统的回拨模式怎么样?企业该怎么选
  8. 《proe 二次开发01》
  9. SpringBoot-MyBatis资源分享网站项目笔记
  10. jitter()函数的使用