DBSCAN(Python的宏观调查)

简而言之, 群集是将一组对象组合在一起的任务, 以使同一群集中的对象彼此之间的相似性高于其他群集中的对象。相似度是反映两个数据对象之间关系强度的量。聚类主要用于探索性数据挖掘。群集在机器学习, 模式识别, 图像分析, 信息检索, 生物信息学, 数据压缩和计算机图形学等许多领域都有广泛的用途。
聚类技术有很多家族, 你可能熟悉最流行的一种:K-Means(属于基于质心的聚类家族)。作为快速更新, K-Means确定数据中的k个质心并通过将点分配给最近的质心来聚类点。
尽管K-Means在实践中易于理解和实现, 但该算法不会处理离群值, 因此, 所有点都被分配给了一个聚类, 即使它们不属于任何聚类。在异常检测领域, 这会引起问题, 因为会将异常点分配给与” 正常” 数据点相同的群集。异常点将群集质心拉向它们, 因此很难将它们归类为异常点。
本教程将介绍另一种类型的集群技术, 称为基于密度的集群, 特别是DBSCAN(基于密度的集群技术)。与像K-Means这样的基于质心的聚类相比, 基于密度的聚类通过识别点的” 密集” 聚类来工作, 从而可以学习任意形状的聚类并识别数据中的离群值。
在这篇文章中, 你将了解

  • 基于质心的聚类技术的缺点
  • 基于密度的聚类技术概述
  • DBSCAN的内部运作
  • Python中DBSCAN的简单案例研究
  • DBSCAN的应用
基于质心的聚类技术的缺点:
在讨论基于质心的聚类的缺点之前, 让我对其进行简要介绍。重心是群集中心的数据点(虚部或实部)。在基于质心的聚类中, 聚类由中心向量或质心表示。此质心可能不一定是数据集的成员。基于质心的聚类是一种迭代聚类算法, 其中相似性的概念是通过数据点与聚类的质心的接近程度得出的。
【DBSCAN(Python的宏观调查)】有时, 数据集可能包含超出预期范围的极值, 并且与其他数据不同。这些被称为离群值。更正式地说, 离群值是与总体中随机样本中的其他值之间存在异常距离的观察值。基于质心的聚类技术的主要基础是数据点和质心之间的距离测量。因此, 基于质心的聚类技术通常无法识别出在很大程度上偏离数据正态分布的数据点。甚至在对数据建立预测模型之前, 离群值都可能导致误导性表示, 进而导致对收集数据的误导性解释。对于从数据构建有效的预测和分析模型, 这基本上是不希望的。
你可以将以下两个较高的条形图(高于其余条形图)视为该特定数据中的异常值:
DBSCAN(Python的宏观调查)

文章图片
基于密度的聚类技术的一般介绍:
在讨论基于密度的聚类之前, 你首先需要涵盖一个主题:?-邻里。
?邻域背后的一般思想是给定一个数据点, 你希望能够推理出其周围空间中的数据点。形式上, 对于某些实值?> 0和某个点p, p的?邻域定义为距离p最多为distance的点集。
如果回想一下几何, 所有点都与中心等距的形状就是圆。在2D空间中, 点p的?邻域是包含在以p为中心的半径circle的圆中的点集。在3D空间中, the邻居是半径为p的球体, 以p为中心, 在3D空间中, ?邻居只是半径为?的N球体, 以p为中心。
让我们考虑一个使这个想法更具体的例子。在下面的图像中, 100个数据点以[1, 3] X [2, 4]间隔分散。让我们选择点(3, 2)作为我们的点p。
DBSCAN(Python的宏观调查)

文章图片
让我们简要介绍一下用于绘图目的的函数:plt.scatter():此函数实际上基于数据(作为提供的[x和y]参数)创建散点图。 plt.xlabel():它可以帮助你沿X轴放置标签。 (在这种情况下为杂货店)plt.ylabel():它可以帮助你沿Y轴放置标签。 (在这种情况下为牛奶)plt.show():创建图后, 此功能可帮助你将其显示为输出。
出于所有可视化目的, 你应该真正探索Matplotlib的美丽世界。它的文档绝对很棒。
你可以轻松地发现误入歧途的数据点。对?好吧, 这些就是你的离群值。
借助DBSCAN, 我们希望确定这一主要客户群, 但同时也希望将具有更多非常规年度购买习惯的客户标记为离群值。
由于数据的值是数千, 因此你将通过将每个属性缩放为0均值和单位方差来规范化每个属性。基本上, 这样做是有助于保持要素之间的相互关系完整, 从而使一个要素的微小变化反映在另一个要素上。
df = df[["Grocery", "Milk"]]df = df.as_matrix().astype("float32", copy = False)

stscaler = StandardScaler().fit(df)df = stscaler.transform(df)

你将构造一个DBSCAN对象, 该对象在半径0.5的附近至少需要15个数据点才能被视为核心点。
dbsc = DBSCAN(eps = .5, min_samples = 15).fit(df)

接下来, 我们可以提取聚类标签和离群值以绘制结果。
labels = dbsc.labels_core_samples = np.zeros_like(labels, dtype = bool)core_samples[dbsc.core_sample_indices_] = True

DBSCAN(Python的宏观调查) 凭着直觉, DBSCAN算法能够识别一群平均食品杂货和平均乳制品购买量的顾客。此外, 它还可以标记那些年度购买行为与其他客户有太大差异的客户。
由于异常值对应于具有更极端购买行为的客户, 因此批发分销商可以专门为这些客户提供独家折扣, 以鼓励他们进行更大的购买。
DBSCAN的实际应用程序:
  • 假设我们有一个电子商务, 并且我们想通过向客户推荐相关产品来提高销售量。我们不确切知道客户在寻找什么, 但是根据数据集, 我们可以预测相关产品并将其推荐给特定客户。我们可以将DBSCAN应用于我们的数据集(基于电子商务数据库), 并根据用户购买的产品查找集群。使用这个集群, 我们可以发现客户之间的相似性, 例如, 如果客户A购买了一支笔, 一本书和一把剪刀, 而客户B购买了一本书和一把剪刀, 那么你可以向客户B推荐一支笔。
  • 在基于深度学习的高级方法学兴起之前, 研究人员使用DBSCAN来从可能介导癌症的基因数据集中分离基因。
  • 科学家使用DBSCAN来检测由移动GPS设备生成的轨迹数据中的停靠点。停靠点代表了轨迹中最有意义和最重要的部分。
结论: 因此, 在此博文中, 你了解了基于质心的聚类的主要缺点, 并熟悉了另一类聚类技术, 即基于密度的聚类。你还看到了它们如何克服基于质心的聚类的缺点。
你了解了DBSCAN的工作原理, 并进行了案例研究。此外, 你还获得了有关DBSCAN已解决的现实生活问题的全面概述。作为进一步的阅读, 我真的建议大家通过其他基于密度的聚类方法, 例如” 级别集树” 聚类以及它与DBSCAN有何不同。
如果你想了解有关Python群集的更多信息, 请参加我们的Python无监督学习课程。
参考文献:
  • Martin Ester, Hans-Peter Kriegel, J?rgSander和Xuxiaowei。 1996年。一种基于密度的发现簇的算法一种基于密度的发现簇的大型空间数据库中的算法。在第二届知识发现和数据挖掘国际会议论文集(KDD’ 96)中, Evangelos Simoudis, Hanwei Wei和Usama Fayyad(编辑)。 AAAI按226-231。
  • https://towardsdatascience.com/how-dbscan-works-and-why-should-i-use-it-443b4a191c80
  • https://www.coursera.org/learn/predictive-analytics/lecture/EVHfy/dbscan

    推荐阅读