我正在尝试使用Scikit learn实现一个数据聚类算法,特别是DBSCAN。我使用Jaccard Index作为我的指标。但是,DBSCAN()
没有其他模型所具有的verbose
参数。这意味着我看不到我的DBSCAN在哪个时期,我也不知道这将需要多长时间。此外,根据我(有点有限)的集群算法知识,如果它们陷入循环,它们可能永远不会收敛;因此,了解算法处于哪个迭代中是非常重要的。
有没有什么方法可以让我得到关于我在哪个时代的打印信息?如果没有,有没有办法自己编写这样的函数,并让scikit learn在每次输出(或类似的东西)结束时运行这个函数?或者,我是否必须自己编写整个DBSCAN()
函数,才能打印出有关纪元和相关精度分数的语句?
谢谢!
发布于 2021-11-04 08:31:32
我不熟悉让Scikit的DBSCAN()
实现打印它所在的迭代的选项。尽管如此,您可以尝试推断您的数据是否有意义,它需要这么长的时间才能收敛。
如果您的区域具有密集的集群(任何形状;这是其主要优势之一),而其他区域只有很少的数据点,则DBSCAN()
工作得非常好。因此,如果您首先尝试在PCA之后以2D或3D形式可视化您的数据,您可以获得数据是否为一个斑点或是否存在高密度区域和低密度区域的第一个指示。如果数据确实是一个斑点,那么DBSCAN()
很可能很难收敛,如果它收敛,它会选择一个具有许多异常的集群。此外,你的ε参数在DBSCAN()
中是一个非常重要的参数,因为它实际上将决定被视为一个簇的点的邻近度。epsilon越低,可能找到的集群越多/
我认为以上几点可以解释为什么集群算法需要这么长时间才能运行,因为DBSCAN()
通常具有大致线性(与数据点的数量)计算复杂度。
https://stackoverflow.com/questions/69812473
复制