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 ...
随机推荐
- 项目中Gradle使用总结
一.配置Gradle使用Maven仓库 项目过程中,我们可能会遇到maven的本地库和gradle使用的maven本地库,不是同一个库.现在总结下怎么配置使得maven和gradle都使用相同的mav ...
- Xamarin Android.Views.WindowManagerBadTokenException: Unable to add window -- token android.os.BinderProxy
Android.Views.WindowManagerBadTokenException: Unable to add window -- token android.os.BinderProxy@ ...
- Qt MainWindow结构
(图自:FinderCheng 的 Qt 学习之路(11): MainWindow)
- ng-class的用法
最近在学习angular框架,ng-class是angular框架的一个指令,这里是ng-class指令的官方解释: ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类. ng ...
- html画布
一.<canvas>标签 Html5 引入了一个新的<canvas> 标签,这个标签所代表的区域就好象一块画布,你的所有图形绘制最后都要在这块画布上呈现.有了这个标签,浏览器的 ...
- 自己瞎捣腾的Win7下Linux安装之路-----理论篇
接着上回说道,我把双系统做好啦,开心.... 之后我就在想几个问题: 1.在Ubuntu装好后,重启电脑却还是win7,等我用EasyBCD之后,才可选择使用装好的Ubuntu呢? 2.在用EasyB ...
- 【python】pandas & matplotlib 数据处理 绘制曲面图
Python matplotlib模块,是扩展的MATLAB的一个绘图工具库,它可以绘制各种图形 建议安装 Anaconda后使用 ,集成了很多第三库,基本满足大家的需求,下载地址,对应选择pytho ...
- php 上传大文件配置upload_max_filesize和post_max_size选项
php 上传大文件配置upload_max_filesize和post_max_size选项 (2014-04-29 14:42:11) 转载▼ 标签: php.ini upload _files[f ...
- 【P1915】[usaco09 dec gold]电视游戏问题
在百度上搜到了nzx学长的题解orz 原题: 农夫约翰的奶牛们游戏成瘾!本来FJ是想要按照陶叫兽的做法拿她们去电击戒瘾的,可是后来他发现奶牛们玩游戏之后比原先产更多的奶.很明显,这是因为满足的牛会产更 ...
- 威纶触摸屏和三菱PLC3S之间的通信设置
触摸屏软件中: PLC型号:FX3U\FX3G 接口类型:RS-485 4W 端口:COM2(19200,E,7,1)