1. DBSCAN 定义
DBSCAN (Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法。与K均值聚类和层次聚类不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
图1 模拟DBSCAN算法生成的三个簇
在图1中,设定MinPts=4,图中蓝色的点是核心对象(这些点E邻域中点的个数大于等于4), 黑色的点是非核心对象,灰色的点是孤立点。在同一个圈(E邻域)中的点,黑色的点从蓝色点直接密度可达。从图1中可以看出DBSCAN把所有样本分成了四类,其中三类分别在不同的簇中。每一个簇中蓝色的点(核心对象)之间是密度可达的,蓝色的点和黑色的点之间是密度相连的。还有一类为异常值(灰色的点),所以DBSCAN不仅可以做聚类分析,还可以做异常值检测。
2.2 DBSCAN 算法描述
3.1 优点
(1) 相比于K-Means之类的聚类算法只适用于凸样本集,DBSCAN既适用于凸样本集,也适用于非凸样本集,并且可以对任意形状的稠密数据集进行聚类(可参见下文图2)。
(1) 对数据要求较高,如果样本集密度不均匀、聚类间差距较大时,DBSCAN的结果较差,最好在聚类之前对数据进行标准化处理。
(2) 距离阈值eps(E邻域的半径)和邻域内包含样本数MinPts参数较难确定,并且对结果影响较大。
(3) 如果样本集较大时,聚类收敛的时间较长。
实例:用DBSCAN对笑脸数据聚类
4. DBSCAN 在Python中实现代码
from sklearn.cluster import DBSCAN #加载库
result=DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, algorithm=’auto’, leaf_size=30, p=None).fit(X)
5. 项目实战
import pandas as pd
import numpy as np
mcc_dm = pd.read_csv('mcc_dm.csv')
step2:挑选变量
coulmns_dm = [
'all_avg_tran_amt_30d',
'all_tran_cnt_suc_pct_30d',
'card_tran_cnt_cre_pct_30d',
'all_tran_cnt_m5k_suc_pct_30d',
'tran_cnt_100int_f5_suc_pct_30d',
'ms_deb_card_cnt_pct_30d'
]
step3: 使用DBSCAN进行聚类并寻找异常样本点
#标准化处理
from sklearn import preprocessing
X_dm = mcc_dm[columns_dm]
X_dm_1 = preprocessint.scale(X_dm)
#DBSCAN聚类
from sklearn.cluster import DBSCAN
dm_scale_dbscan = DBSCAN(eps=2, min_samples=10).fit(X_dm_1)
X_dm['pred_scale_dbscan'] = dm_scale_dbscan.labels_
代码解析:
X_dm['pred_scale_dbscan'].value_counts().sort_index() #看下落在每一组的数据分布情况
-1 16
X_dm.groupby('pred_scale_dbscan').mean()
本文是本人使用DBSCAN后的一些见解,如有不当之处恳请指正。
-end-
猜你感兴趣:
长按识别上方二维码学习更多Python知识
喜欢这篇文章
就请点个 “ 在看 ” 吧
本文分享自微信公众号 - 阿黎逸阳的代码(gh_f3910c467dfe)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4687686/blog/4665943