DBSCAN——python实现
# -*- coding: utf-8 -*-
from matplotlib.pyplot import *
from collections import defaultdict
import random
import json
"""
计算两点欧式距离的函数
"""
def dist(p1,p2):
return ((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) ** (0.5) all_points = []
index = 1000
#use python build-in library to load the json file
flickr_data = json.load(file("Paris_points.json"))
for i in range(index):
Coord = [flickr_data['latitudes'][i],flickr_data['longitudes'][i]]
all_points.append(Coord) """
设置E和minPts的值
"""
E = 0.001
minPts = 7 """
随机产生100个直角坐标,测试用,测试时用E = 8, minPts = 8
"""
#all_points = []
# for i in range(100):
# randCoord = [random.randint(1,50),random.randint(1,50)]
# if not randCoord in all_points:
# all_points.append(randCoord) """
找出核心点
"""
other_points = []
core_points = []
plotted_points = []
for point in all_points:
point.append(0) #assign initial level 0,即定义核心点的类型,每个核心点作为一个中心
total = 0
for otherPoint in all_points:
distance = dist(otherPoint,point)
if distance <= E:
total += 1 if total > minPts:
core_points.append(point)
plotted_points.append(point)
else:
other_points.append(point) """
找到边界点
"""
border_points = []
for core in core_points:
for other in other_points:
if dist(core,other) <= E:
border_points.append(other)
plotted_points.append(other) """
完成分类的算法,给核心点都贴上标签
"""
cluster_label = 0 for point in core_points:
if point[2] == 0:
cluster_label += 1
point[2] = cluster_label for point2 in plotted_points:
distance = dist(point2, point)
if point2[2] == 0 and distance <= E:
#print point,point2
point2[2] = point[2] """
当所有的点都分配到相应的标签后,我们把同一簇的划分到一起
"""
cluster_list = defaultdict(lambda:[[],[]])
for point in plotted_points:
cluster_list[point[2]][0].append(point[0])
cluster_list[point[2]][1].append(point[1]) markers = ['+','*','.','d','^','v','>','<','p']
#markers = ['b.','g.','r.','c.','m.','y.','k.'] """
画出所有点的图
"""
figure(1)
allx = []
ally = []
for plot_point in all_points:
allx.append(plot_point[0])
ally.append(plot_point[1])
plot(allx, ally,"r.")
title("total points=" + str(len(all_points)) + " E =" + str(E) + " Min Points=" + str(minPts)) """
画出核心点的图
"""
figure(2)
i = 0
print cluster_list
for value in cluster_list:
cluster = cluster_list[value]
plot(cluster[0],cluster[1],markers[i])
i = i % 8 + 1
#i = i % 6 + 1
title(str(len(cluster_list)) + " clusters created with E = "+ str(E) + " Min Points=" + str(minPts)) """
画出噪音点的图
"""
figure(3)
noise_points = []
for point in all_points:
if not point in core_points and not point in border_points:
noise_points.append(point)
noisex = []
noisey = []
for point in noise_points:
noisex.append(point[0])
noisey.append(point[1])
plot(noisex,noisey,"x") title("noise Points = "+ str(len(noise_points)) + " E ="+str(E)+" Min Points="+str(minPts))
#axis((0,60,0,60))
show()
DBSCAN——python实现的更多相关文章
- Python实现DBScan
Python实现DBScan 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=>end: 结束 ...
- (数据科学学习手札15)DBSCAN密度聚类法原理简介&Python与R的实现
DBSCAN算法是一种很典型的密度聚类法,它与K-means等只能对凸样本集进行聚类的算法不同,它也可以处理非凸集. 关于DBSCAN算法的原理,笔者觉得下面这篇写的甚是清楚练达,推荐大家阅读: ht ...
- Python机器学习——DBSCAN聚类
密度聚类(Density-based Clustering)假设聚类结构能够通过样本分布的紧密程度来确定.DBSCAN是常用的密度聚类算法,它通过一组邻域参数(ϵϵ,MinPtsMinPts)来描述样 ...
- Python实现DBSCAN聚类算法(简单样例测试)
发现高密度的核心样品并从中膨胀团簇. Python代码如下: # -*- coding: utf-8 -*- """ Demo of DBSCAN clustering ...
- Python机器学习笔记:K-Means算法,DBSCAN算法
K-Means算法 K-Means 算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛.K-Means 算法有大量的变体,本文就从最传统的K-Means算法学起,在其基础上学习 ...
- 挑子学习笔记:DBSCAN算法的python实现
转载请标明出处:https://www.cnblogs.com/tiaozistudy/p/dbscan_algorithm.html DBSCAN(Density-Based Spatial Clu ...
- [MCM] K-mean聚类与DBSCAN聚类 Python
import matplotlib.pyplot as plt X=[56.70466067,56.70466067,56.70466067,56.70466067,56.70466067,58.03 ...
- 吴裕雄 python 机器学习——密度聚类DBSCAN模型
import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...
- DBscan算法及其Python实现
DBSCAN简介: 1.简介 DBSCAN 算法是一种基于密度的空间聚类算法.该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其它空间对象)的数目不小于某一给定阀值.DBS ...
随机推荐
- 判断App运行是否在前台
转自:http://notes.stay4it.com/2016/02/26/check-if-app-is-running-forground/ 在一些场景中,经常会需要判断App是否在后台运行,比 ...
- Surprise团队第二周项目总结
Surprise团队第二周项目总结 项目进展 已实现五子棋人人模式部分 人人模式: 基本方式:采取黑棋先行,黑白交替的下棋顺序. 模式:通过鼠标点击相应棋盘中的"交叉点",在lay ...
- nohup使用(转)
在启动weblogic的时候我们经常看到如下的命令: nohup ./startWebLogic.sh >out.log 2>&1 & 其中 0.1.2分别代表如下含义: ...
- JDBC的应用实例
首先要添加一个引用的库 在项目上右键--构建路径--配置构建路径--在(库)中选择添加外部JAR--选择jar包添加 jar文件是驱动包 添加后包资源管理器中显示一个引用的库会有jar包 加载数据访问 ...
- 【转载】ANSYS 动力分析 (9) - 瞬态动力分析 (1)
原文地址:http://htbbzzg.blog.163.com/blog/static/69725206201081663611208/ 第四章 瞬态动力分析 第一节:瞬态动力分析的定义和目的 ...
- VMware Player安装Debian系统
尝试用虚拟机来安装Debian系统,感觉这样一来安装与卸载方便,二来也可以在Linux系统安装出现问题的情况下方便在host主机上查找解决方法,同时也避免了要重新设置分区来安装Linux系统(双系统的 ...
- NOIp 2011 mayan游戏 搜索
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- 关于VR边纹理材质的渲染
前段时间经常渲染白模线框的图,写了这个脚本方便工作,后来又加了中英文适配,今天贴上来. fn YY_edgestex = ( vr = renderers.current case of ( (vr材 ...
- 【IOS学习】1.IOS框架
1.框架概述 iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa ...
- Android 从图库到选择图片onActivityResult接收注意的问题
从图库选择图片然后返回数据接收处理的时候,这个时候我们可能会遇到一个问题.就是明明我走了返回的代码.但是为什么我的图片路径没有拿到?这个时候可能是Android的api不同导致,因为Android4. ...