DBSCAN算法应用实例及改进模型(2)

上期Lab介绍了DBSCAN算法优势、概念原理、案例讲解。本篇文章将分为两部分:第一部分基于sklearn实现DBSCAN算法;第二部分将介绍DBSCAN算法的改进模型。

sklearn (Scikit-learn) 是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。

1. 基于sklearn实现DBSCAN算法

·第一步:导入相关包

import numpy as np

import pandas as pd

from sklearn import datasets

from sklearn.cluster import dbscan

·第二步:创建数据集并作可视化处理

%matplotlib inline #(使图形在jupyter notebook网页中显示)

data,_ = datasets.make_moons(500,noise = 0.1,random_state=1) #创建数据集

df = pd.DataFrame(data,columns = ['feature1','feature2']) #将数据集转换为dataframe

#绘制样本点,s为样本点大小,aplha为透明度,设置图形名称

df.plot.scatter('feature1','feature2', s = 100,alpha = 0.6, title = 'dataset by make_moon')

得到样本数据的散点图:

·第三步:DBSCAN实现

# eps为邻域半径,min_samples为最少点数目

core_samples,cluster_ids = dbscan(data, eps = 0.2, min_samples=20)

# cluster_id=k,k为非负整数时,表示对应的点属于第k簇,k为簇的编号,当k=-1时,表示对应的点为噪音点

# np.c_用于合并按行两个矩阵,要求两个矩阵行数相等,这里表示将样本数据特征与对应的簇编号连接

df = pd.DataFrame(np.c_[data,cluster_ids],columns = ['feature1','feature2','cluster_id'])

# astype函数用于将pandas对象强制转换类型,这里将浮点数转换为整数类型

df['cluster_id'] = df['cluster_id'].astype('int')

# 绘图,c = list(df['cluster_id'])表示样本点颜色按其簇的编号绘制

# cmap=rainbow_r表示颜色从绿到黄,colorbar = False表示删去显示色阶的颜色栏

df.plot.scatter('feature1','feature2', s = 100,

 c = list(df['cluster_id']),cmap = 'rainbow_r',colorbar = False,

 alpha = 0.6,title = 'DBSCAN cluster result')

输出聚类后的散点图:

绿色点构成簇1,紫色点构成簇2,红色点为噪音点

2. Weighted-Stop Density-Based Scanning Algorithm with Noise(WS-DBSCAN)算法

DBSCAN算法在交通领域应用广泛,仍以出行行为分析为例,该算法的确可以从乘客历史出行链中提取空间出行分布特征。然而,DBSCAN算法的主要缺点在于其欧氏距离计算的复杂性,这一问题限制了大城市公共交通运营部门以日为单位更新乘客的出行模式。为提高该算法的效率,同时保证聚类的精度,Kieu等人提出了WS-DBSCAN算法。

与典型的DBSCAN算法相比,WS-DBSCAN算法有如下特征:

① DBSCAN在分析数据时,属于一次性分析,每组不同的数据需要重新分析;而WS-DBSCAN会充分利用现存(旧)数据的特征分析新数据。

② DBSCAN会对所有点的邻近区域搜索,从而确定该点类别;而WS-DBSCAN只在必要时才对该点邻近区域实施搜索。

③ WS-DBSCAN在聚类时,会给予点属性,以该点邻近区域所有点属性值之和是否超过MinPts,作为判断是否为核心点的标准。

Kieu等人在DBSCAN算法定义的基础上,定义了

点p的权重ε邻域(weighted ε-neighborhood):


以站点为聚类对象,Kieu 对个体出行行为进行研究。将某一乘客在站点p的乘车(下车)次数记为该站点的权重。并分两个 level 分别对 origin stops 和 detination stops 进行聚类分析,并将与经典的 DBSCAN 对比。

作者提出只有当起讫点均为常规点时,该出行链才可被归为常规出行模式。如下图,O1-D1,O1-D2。:

以Level 1: 起始站点聚类分析为例,WS-DBSCAN聚类算法流程如下:

  • 历史站点数据集如下


Cluster ID Ci = -1:该点为噪音点

Cluster ID Ci = k (k为非负整数):该点归属于簇k

  • 研究站点如下


St的Cluster ID有三种可能:

1) 归属于现存的簇,分配其对应的簇编号;

2) 与已知点形成新的簇,分配其新的簇编号(编号为正整数);

3) 该点为噪音点,分配编号为-1。

  • 流程图

Step1:判断该点是否有继续研究的必要。如果Historical origin stops的权重之和小于MinPts-1,说明该点一定为噪音点;如果不是,执行Step2;

Step2:判断该点是否属于已知站点;如果不是,执行Step3

Step3:判断该点是否为a core stop:如果是,判断其属于哪个簇(从上到下依次为归属于一个已知簇,归属于多个已知簇,不属于任何已知簇);如果不是,判断其是否为a border stop,如果是,判断其属于哪个簇,如果不是,则将其归为噪音点。

  • 数据实验

数据由城市智能卡的AFC数据提炼获得,分为两部分:历史数据集为2012年6月份前三周工作日的出行链数据;测试数据集为该月份最后一周数据。

数据字段包括卡ID,上下车时间,上下站地点等必要信息。

实验结果表明:

1)当DBSCAN 与WS-DBSCAN 邻域参数相同时(ε=1000m, MinPts=8),二者处理得到的聚类结果相同,但 WS-DBSCAN 计算时间约为 DBSCAN 的0.46%。



  1. WS-DBSCAN 的计算速度受历史数据集的OD对数、出行次数的影响。OD对数越小,出行次数越多,WS-DBSCAN 的计算速度越快。

从图中可以看到,在OD对数量接近出行次数时,WS-DBSCAN 的计算速度有部分增加,但该部分乘客不到总乘客数量的3%。

DBSCAN算法就到此结束啦,如果内容对您有益,请点赞、转、关注【交通科研Lab】微信公众号,您的鼓励和支持是我们创作的最大动力!

参考文献:Kieu L M, Bhaskar A, Chung E. A modified density-based scanning algorithm with noise for spatial travel pattern analysis from smart card AFC data[J]. Transportation Research Part C: Emerging Technologies, 2015, 58: 193-207.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容