DBSCAN算法的预期行为是否是这样的(两个相同的数据样本不属于同一个簇)?

请原谅我没有使用正式术语,我最近才开始接触机器学习。

为了学习,我决定尝试使用Ruby实现DBSCAN算法(https://github.com/matiasinsaurralde/dbscan)。

基于https://github.com/matiasinsaurralde/dbscan/blob/master/examples/simple.rb中的简单示例,我创建了一个包含1000个数组的数组,每个数组包含两个随机值,“x”和“y”(一个二维点),然后我将这些数据输入到DBSCAN算法中(根据需要调整“epsilon”和“最小距离”)。

data_sample = Array.new(1000) { Array.new(2) { rand(100).round } }dbscan = DBSCAN( data_sample, :epsilon => 3, :min_points => 2, :distance => :euclidean_distance )

然后我将结果数据(簇和未簇的数据)导出到Excel中,以便绘制簇和未簇数据的图表。

这是我的结果:

enter image description here黑色点是未簇的数据。

现在有一件事我还不确定:对于一些非常接近的点,或者一些共享相同x和y的点,我发现其中一个点没有进入与另一个点相同的簇,而是被归类为未簇的点。

看看点47, 74:属于簇的点在另一个未簇点的“上面”。这种情况也发生在14, 87,77, 64,20, 61以及许多其他地方(对于一些点对,它们有相同的x和y)。

正如我所说,我还在学习中,所以请问是否有人能解释我所看到的现象?这是否与DBSCAN算法的内部工作原理有关?还是更可能是算法实现中的一些错误?或者是我做了一些错误的假设?

希望这些信息足够,但如果你需要更多信息,请随时告诉我。


回答:

实际上这里包含了两个问题:

  1. 两个非常接近的点是否可能有不同的标记?特别是其中一个被标记为“未簇”?

是的,这是可能的,直接来自dbscan方法,特别是要求一个点必须有足够多的近邻点,才能被分类为除“未簇”之外的任何类别。

  1. 两个位置完全相同的点是否可能最终进入两个不同的簇?

不,这是不可能的。因此,要么这些点并非完全相同(也许你在比较它们的四舍五入表示,而非真实值?),要么实现中有错误。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注