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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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