首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过对数据分类进行预测(二)

基于数据的聚类

DBSCAN 创建于 1996 年,是一种可自动确定自然集群数量的简单聚类方法。该方法能够以可靠方式处理异常样本(DBSCAN 称之为噪声)。可以在“用于数据分类的无监督学习”中进一步了解聚类算法。DBSCAN 最初被定义为用在数据库中,因识别(大小和形状)不规则的集群而闻名,而且适用于k-均值无法顺利实现聚类的数据。

DBSCAN 是无监督的,它尝试使用数据的隐藏特征来提供数据结构。它使用了两个参数:最少的点数和 epsilon 距离。

DBSCAN 算法

DBSCAN 处理一个多维空间中的点。每个点由一个特征矢量表示,而且给定了两个矢量,您可以使用一个指标来计算它们之间的距离(比如欧氏距离)。

该算法从一个点开始,您可以识别离原始点给定距离(称为epsilon距离)内的邻近点数量。如果邻近点数量满足或超出了阈值(称为最少点数或),则将这个点称为核心点,并将它与一个新集群相关联。否则,会将这个点标为噪声。对于每个邻近点(称为密度可达点),只要它继续满足条件(离此点 epsilon 距离内的点),就继续执行此操作并对它执行聚类。如果您到达一个没有密度可达点的点,那么可以将该点包含在集群中,但不使用超过此点的点来合并新点。

任何不满足条件(epsilon 距离内的)的点都被定义为噪声,但是,如果发现它们是一个集群中另一个点的密度可达点,那么最终可以将它们移动到该集群中。

让我们在图 2的上下文中看看此流程。首先在左图中(名为Start),我挑选了一个点并检查它的邻近点。如果,我的点满足此条件并被添加到集群中。我们添加了两个邻近(密度可达)点用于测试,并继续执行该流程。只要每个点在 epsilon 距离内至少有两个邻近点,它们就会被添加到集群中并称为核心点)。密度可达但本身不满足密度标准的点是非核心点(例如蓝色的点)。该算法在右侧结束(名为End)。绿色的点(核心点)和蓝色的点(非核心点,但密度可达)都包含在集群中。右上角的红色点是异常值,被视为噪声。

图 2. 完整的 DBSCAN 流程

接下来,我将介绍 DBSCAN 实现的核心。

DBSCAN 实现

可以在 GitHub 上找到这个 DBSCAN 实现。现在我们探讨一下实现该算法的核心的两个关键函数。剩余函数处理距离计算和邻近点内存管理。

函数(参见清单 4)实现了聚类算法的外部循环。它迭代数据集,确定观察值是否满足密度函数(epsilon 距离内的观察值)。如果不满足,则将该观察值标为噪声;否则,会创建一个集群并处理它的邻近点。

清单 4. 主 dbscan 函数

函数(参见清单 5)围绕一个满足密度限制的点构建一个集群。它迭代邻近点列表(称为种子集),查看它们是否在当前集群内。以前定义为噪声的观察值会被加载到该集群中,已加载到该集群中的观察值会被忽略。然后检查当前(未被忽略的)观察值的邻近点;此观察值的所有(满足此条件的)邻近点都会加载到种子集中,以针对此集群进行检查。这个过程会一直持续到没有新观察值被加载到种子集中,并且种子集中的所有观察值都已检查。返回时,函数会挑选下一个观察值并继续执行该流程(可能添加新的集群)。

清单 5. 密度可达点之后的函数

在不到 50 行的核心代码中,我创建了一个简单的聚类解决方案,它与更传统的方法相比具有明显优势。考虑使用前面的动物园数据集的 DBSCAN:必须调整 DBSCAN 来选择正确的和 epsilon。在这个示例中,我选择了 epsilon = 1.7 和= 4。通过这些参数,DBSCAN 创建了 6 个类,14 个观察值是噪声,整体准确率为 74%。它完美地对鸟和鱼的类别进行了聚类,但将哺乳动物集群拆分为一个大型集群和一个小型集群。

使用前面的测试案例,它将“flea with teeth”和“six-legged aquatic egg layer”都划分到昆虫类别中,将“predator with hair”划分为噪声。调整 epsilon 距离和参数可以提高此数据集的准确率。

预测和分类是机器学习的两个有许多应用的重要方面。从预测消费者的行为(基于他们对类似消费者的分类)到预测保险政策的风险(基于描述政策和申请者的特征),通过分类进行预测是一个真实的机器学习应用示例。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180811G1HUVI00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券