为了以特定方式划分数据,我应该将哪些参数传递给 dbscan 或 optic

数据挖掘 机器学习 无监督学习 数据库扫描 聚类
2022-02-26 17:37:47

我有数千个非常相似的数据集,需要以对角线方式分成两组。例如: 在此处输入图像描述在此处输入图像描述

我尝试使用 dbscan 和 optic 的参数作为 epsilon 和 minPoints 甚至 metric,但它们都没有帮助我将数据正确地划分为 2 组。

我只成功地使用 dbscan 划分数据。如果我消除这些组之间的噪音以使它们成为完全独立的 2 组,我使用直方图来完成

j = 1
hist, bin_edges = np.histogram(data, bins=500)
max_bin = np.where(np.amax(hist) == hist)[0][0]
max_noise = bin_edges[max_bin+j]
filtered_indicies = data > max_noise
data = data[filtered_indicies]

这些线消除了数据中、组之间以及周围的噪声

j > 1

这导致我删除了以后需要重新处理的必要数据。

所以,我要回到我的主要问题,我怎么知道哪个 epsilon、minPoints 或 dbscan 的其他参数可以帮助我正确划分这些数据?或者有没有比我上面介绍的(直方图)更好的方法来消除这些组之间的噪音而不删除必要的数据?

1个回答

从参数的含义开始。

ε是每个点周围的搜索半径。您需要这个搜索半径足够小,以至于它不能完全“弥合”集群之间的差距。如果间隙宽度可变,ε需要足够小以容纳最窄的间隙。请注意,在确定间隙宽度时,我们可以将偶尔的偏离点排除在考虑之外,因为 minPoints 可以处理间隙中的少量“出血”。但是,通过检查数据,您可以看到ε小于最小间隙将导致最右侧的点被排除在右侧集群之外。

minPoints 是范围内的最小点数ε指向x在集群中c为了x被纳入c. 当我们确定最小间隙宽度时,我们允许每个簇中的几个点穿过间隙。minPoints 必须足够大,以使这些杂散点不会桥接群集。具体来说,如果有n来自集群的点c1之内ε集群中的一个点c2, minPoints 必须大于n. 请注意,与ε,将 minPoints 设置得足够大以保持主集群分离会导致边缘上的一些点被排除在这些集群之外。

DBSCAN 无法将所有点干净地聚集到您想要的两个集群中,因为它使用本地连接而不是全局一致性进行连接。即使是从一堆点到其他点的一座桥也将它们组合成一个集群。为了将两个集群分开,就会出现异常值。如果离群值不可接受,您可以使用简单的启发式方法将它们加入两个主要集群,例如加入离离群值更近的集群。如果后处理不可接受,您可能需要使用全局聚类方法,例如谱聚类;您也可能在均值偏移方面取得成功。