如何使任何 sklearn 模型变得冗长?

Posted

技术标签:

【中文标题】如何使任何 sklearn 模型变得冗长?【英文标题】:How to make any sklearn model verbose? 【发布时间】:2021-12-17 02:27:00 【问题描述】:

我正在尝试使用 Scikit learn 实现数据聚类算法,特别是 DBSCAN。我使用 Jaccard Index 作为我的指标。但是,DBSCAN() 没有其他模型所具有的 verbose 参数。这意味着我看不到我的 DBSCAN 处于哪个时期,而且我不知道需要多长时间。此外,根据我对聚类算法的(有些有限的)知识,如果它们陷入循环,它们可能永远无法收敛;因此,了解算法在哪个迭代中非常重要。

有什么方法可以让我在哪个时代获得 scikit 打印信息?如果没有,有没有办法自己编写这样的函数并让 scikit learn 在每个输出(或类似的东西)的末尾运行这个函数?还是我必须自己编写整个 DBSCAN() 函数才能打印出关于时代和相关准确度分数的语句?

谢谢!

【问题讨论】:

【参考方案1】:

我不熟悉让 Scikit 的 DBSCAN() 实现打印它所在的迭代的选项。不过,您可以尝试推理您的数据是否有意义,需要这么长时间才能收敛。

DBSCAN() 如果您的区域具有密集集群(任何形状;这是其主要优势之一)和其他数据点较少的区域,则效果非常好。因此,如果您首先尝试在 PCA 之后以 2D 或 3D 形式可视化您的数据,您可以获得关于您的数据是一个 blob 还是是否存在高密度区域和低密度区域的第一个指示。如果数据确实是一个 blob,那么DBSCAN() 可能会很难收敛,如果收敛,它会选择一个具有许多异常的集群。此外,您的 epsilon 参数在DBSCAN() 中是一个非常重要的参数,因为这实际上将确定将被视为一个集群的点的接近程度。 epsilon 越低,您可能找到的集群就越多/

我认为以上几点可以解释为什么您的聚类算法需要这么长时间才能运行,因为DBSCAN() 通常具有大致线性(与数据点的数量)的计算复杂度。

【讨论】:

我的数据集有 6,500 列和 60,000 行。也许这对于DBSCAN() 来说太大了,无法在不荒谬的时间内(15 小时以上)运行。我考虑过 PCA,但我的数据是二进制的(即所有数据点都是 0 或 1),我在网上读到 PCA 不适用于二进制数据。您是否知道不太难实施的 PCA 替代方案?我在网上看到了一些需要我编写整个代码但数学上太复杂而无法理解的内容。 我明白了...我不太熟悉只使用二元特征,但您可以做的是在相似矩阵上执行 PCA/MDS,然后将其用作探索工具检查您是否可以通过面值识别某些分区?尽管如此,我确实认为您的数据集的维度会导致很多运行时问题。也许,广泛的预处理(共线性去除)将有助于加速 DBSCAN() 相当多?

以上是关于如何使任何 sklearn 模型变得冗长?的主要内容,如果未能解决你的问题,请参考以下文章

在使用 cmake 构建时,如何让 make 变得冗长但只有“有意义”的行?

AOSP 变得冗长

当Sklearn遇上Plotly,机器学习变得如此简单易于理解

如何在 sklearn 的 AdaBoost 中使用 Keras 模型?

如何将具有文件外依赖项的 sklearn 模型保存到磁盘?

抑制xcodebuild输出或减少冗长[重复]