DBscan算法是典型的基于密度的聚类算法,假定类别可以通过样本分布的紧密程度决定。在DBscan算法中,将样本密集的一个区域内的点作为一个cluster,再将相连的clueter聚合为一个cluster。
- 把所有的数据点区分并标记为核心点、边界点和噪音点
删除噪音点 - 所有在半径Eps内的核心点间由边相连
- 联通的核心点作为一组成为一个cluster
- 分配每一个边界点到它所落入的核心点半径范围内的cluster中
若在某点半径Eps内有>=minPts个点,则该点就是核心点,
若点不是核心点,但是被其他核心点包括,则为边界点
若又不是核心点,又没被包括,则为离群点(噪音点
- 距离选择
DBscan对不同的距离指标总体上效果差异不大,选择欧式距离作为距离指标。 - 参数选择
在DBscan中不需要预先决定cluster的数目,算法自动决定聚类的数目,但是需要设定Eps和MinPts两个参数。在本实验中对扫描半径Eps和最小包含点MinPts 的取值如下:
minPts = [3 4 5 6 7 8 9]
Eps = [0.2 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29]
dbscan.py
import numpy as np
import data_utils as du
d