vlambda博客
学习文章列表

认证杯B题DBSCN聚类算法

DBSCN聚类算法可以用于B题求解,来筛选出所需要的星系:

DBSCAN是Martin Ester, Hans-PeterKriegel等人于1996年提出的一种基于密度的聚类方法,聚类前不需要预先指定聚类的个数,生成的簇的个数不定(和数据有关)。该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。该方法能在具有噪声的空间数据库中发现任意形状的簇,可将密度足够大的相邻区域连接,能有效处理异常数据。

DBSCAN算法将数据点分为三类:

• 核心点:在半径Eps内含有不少于MinPts数目的点

• 边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内

• 噪音点:既不是核心点也不是边界点的点

在这幅图里,MinPts = 4,点 A 和其他红色点是核心点,因为它们的 ε-邻域(图中红色圆圈)里包含最少 4 个点(包括自己),由于它们之间相互相可达,它们形成了一个聚类。点 B 和点 C 不是核心点,但它们可由 A 经其他核心点可达,所以也和A属于同一个聚类。点 N 是局外点,它既不是核心点,又不由其他点可达。

下面利用matlab实现DBSCN代码,其中官网推荐下载的代码如下:

其中DBSCN函数一共需要两个输入点,一个是半径Eps,另一个是最少点MinPts,matlab自带程序运行结果如下

可见根据聚类结果,将其分为了两类。

在实际应用在B题时,只需要将原始数据集更改,再逐步调整Eps和MinPts达到最佳效果即可。