- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚编写了 DBSCAN 算法,我想知道 DBSCAN 算法是否可以允许簇中的点数小于所使用的 minPts 参数的簇。
我一直在使用http://people.cs.nctu.edu.tw/~rsliang/dbscan/testdatagen.html验证我的实现,它似乎工作正常,只是遇到了这个问题。
我正在针对示例数据集运行一些模拟,并且我一直使用 3 的 minPts。DBSCAN 算法通常会从数据集中创建 2 个点(但从来不是 1 个)的簇。这是设计使然还是我搞砸了实现?
一些示例数据,eps = 0.1,minPts = 3。
0.307951851891331 0.831249445598223
0.0223402371734102 0.352948855307395
0.780763753587736 0.691021379870838
0.950537940464233 0.849805725668467
0.66559538881555 0.603627873865714
0.983049284658883 0.320016804300256
0.710854941844407 0.646746252033276
0.404260418566065 0.610378857986247
0.740377815785062 0.899680181825385
0.430522446721104 0.597713506593236
0.0365937198682659 0.109160974206944
0.378702778545536 0.115744969861463
0.765229786171219 0.568206346858389
0.760991609078362 0.59582572271853
0.970256112036414 0.480310371834929
0.110018607280226 0.541528500403058
0.679553015939683 0.951676915377228
0.730563320094051 0.806108465793593
0.30542559935964 0.500680956757013
0.740971321585109 0.670210885196091
0.877572476806851 0.221948942738561
0.882196086404005 0.674841667374057
0.808923079077584 0.740714808339586
0.935197343553974 0.438659039064617
0.283511740287539 0.271373094185895
0.0740317893559261 0.602333299630477
0.30702819223843 0.0683579570932118
0.31839294653311 0.198790877684388
0.452546667052687 0.906595267311947
0.587719069136176 0.212557406729347
0.930029770792476 0.354712217745703
0.879549613632052 0.185285016980621
0.493609266585488 0.441520784255825
0.640463788360573 0.759178026467179
0.916182931939225 0.598151952772472
输出集群:
(Cluster: 1 { 0.780763753587736,0.691021379870838 }, { 0.66559538881555,0.603627873865714 }, { 0.710854941844407,0.646746252033276 }, { 0.765229786171219,0.568206346858389 }, { 0.760991609078362,0.59582572271853 }, { 0.740971321585109,0.670210885196091 }, { 0.882196086404005,0.674841667374057 }, { 0.808923079077584,0.740714808339586 }, { 0.916182931939225,0.598151952772472 })
(Cluster: 2 { 0.983049284658883,0.320016804300256 }, { 0.970256112036414,0.480310371834929 }, { 0.935197343553974,0.438659039064617 }, { 0.930029770792476,0.354712217745703 })
(Cluster: 3 { 0.404260418566065,0.610378857986247 }, { 0.430522446721104,0.597713506593236 })
(Cluster: 4 { 0.740377815785062,0.899680181825385 }, { 0.679553015939683,0.951676915377228 }, { 0.730563320094051,0.806108465793593 })
(Cluster: 5 { 0.378702778545536,0.115744969861463 }, { 0.30702819223843,0.0683579570932118 })
(Cluster: 6 { 0.110018607280226,0.541528500403058 }, { 0.0740317893559261,0.602333299630477 })
(Cluster: 7 { 0.877572476806851,0.221948942738561 }, { 0.879549613632052,0.185285016980621 })
(Cluster: 8 { 0.283511740287539,0.271373094185895 }, { 0.31839294653311,0.198790877684388 })
最佳答案
DBSCAN 中的集群仅保证由至少 1 个核心点组成。
由于属于超过 1 个簇的边界点将被“随机”(通常:先到)分配给其中一个簇,因此核心点可能无法保留/获取它的所有邻居。因此,它可能小于 minPts。
一维示例:minPts=4,epsilon=1:
0.0 0.5 1.0 2.0 3.0 3.5 4.0
|-------X-------| Core point at 1.0, Cluster 1.
|-------X-------| Core point at 3.0, Cluster 2.
所有其他点都不是核心点。由于点 2.0 不是核心点,因此它不连接两个集群。其中一个集群将有 4 个成员,另一个集群只有 3 个成员。
最接近引用实现的可能是 ELKI 中的 DBSCAN 实现。也许您应该检查您的结果是否与 ELKI 的结果匹配。因为在您的数据集中,我相信您也有一些编程错误。
关于machine-learning - DBSCAN 算法可以创建少于 minPts 的簇吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994584/
环顾四周,我发现可以将预先计算的距离矩阵传递给 SKLearn DBSCAN .不幸的是,我不知道如何通过它进行计算。 假设我有一个包含 100 个元素的一维数组,其中只有节点的名称。然后我有一个 2
有类似的questions和图书馆,如 ELI5和 LIME .但是我找不到解决我的问题的方法。我有一组文档,我正在尝试使用 scikit-learn 的 DBSCAN 对它们进行聚类。 .首先,我正
是否要求DBSCAN及其索引具有相同的距离函数?如果不是,什么情况下需要使用不同的距离函数? Scala 代码如何创建 DBSCAN 和索引: import de.lmu.ifi.dbs.elki.a
我在scikit-learn中的DBSCAN算法上测试了我的图像集 python 模块。相似度计算还有其他选择: # Compute similarities D = distance.squaref
我正在研究学校关于异常值检测的项目。我想我会创建自己的小数据集并使用 DBSCAN 来处理它。我想我会尝试创建一个关于网站上广告点击是否作弊的数据集。以下是我要创建的数据集的详细信息。 数据集名称:作
我使用方法 dbscan::dbscan 来按位置和密度对数据进行聚类。 我的数据如下所示: str(data) 'data.frame': 4872 obs. of 3 variables: $
使用 DBSCAN, (DBSCAN(eps=epsilon, min_samples=10, algorithm='ball_tree', metric='haversine') 我已经聚集了一个纬
我正在尝试在轨迹数据集上运行 DBSCAN (sklearn.cluster)。数据集是数组(点)的数组(轨迹)的数组 数据集_测试= array([[[46.37017059, 30.954216
我正在尝试在这里实现 DBSCAN 的代码:http://en.wikipedia.org/wiki/DBSCAN 我感到困惑的部分是 expandCluster(P, NeighborPts, C,
我有以下内容: 一个数以千计的数据集 一种计算相似度的方法,但数据点本身我无法在欧几里德空间中绘制它们 我知道 DBSCAN 应该支持自定义距离度量,但我不知道如何使用它。 假设我有一个函数 def
根据我对 DBSCAN 的理解,您可以指定 epsilon,例如 100 米,并且 — 因为 DBSCAN 考虑了密度可达性 而不 direct density-reachability 寻找簇时——
我有一个包含纬度和经度对的数据框。 这是我的数据框的样子。 order_lat order_long 0 19.111841 72.910729 1 19.111342 72
有没有什么工具可以计算出 DBSCAN 算法的 minpts 和 eps 的最优值? 目前我使用sklearn库来应用DBSCAN算法 from sklearn.cluster import DBSC
我已经在 R 中实现了 DBSCAN 算法,并且我正在将集群分配与 fpc library 的 DBSCAN 实现相匹配。 .测试是在 fpc 库 dbscan 示例中给出的合成数据上完成的: n <
这个问题已经有答案了: how to do clustering when the shape of data is (x,y,z)? (1 个回答) 已关闭 4 年前。 sklearn 中是否允许通
我正在从事与聚类任务相关的任务。 DBSCAN 拟合程序产生奇怪的结果,我不明白我的错误在哪里。我简化了代码,只留下了重要的部分: clusters = pd.read_csv('cl.csv') d
我想使用聚类算法来找到大有向图的聚类,并且我也想从该图中消除噪声。因此,我正在考虑使用DBSCAN方法,因为我发现我们可以为算法提供一个距离函数来确定两个不同节点之间的距离/相似度。 我的问题是,如何
据说 DBSCAN 在边界点上不一致,取决于它首先将点分配给哪个簇。当 DBSCAN 想要将边界点分配给其中一个簇时,是否有一种变体会考虑每个簇中边界点接近的点数(eps)? 最佳答案 在这种情况下,
我正在尝试对包含超过 100 万个数据点的数据集进行聚类。一列包含文本,另一列包含与其对应的数值。我面临的问题是它被卡住并且永远不会完成。我尝试过处理大约 100,000 个较小的数据集,它运行得相当
我正在尝试将多个核心与sklearn的DBSCAN一起使用,但是当我更改 n_jobs = -1 时,运行时间似乎没有变化(按照文档的建议,使用所有处理器来运行并行作业)。我错过了什么? import
我是一名优秀的程序员,十分优秀!