SKLearn 的 Birch Clustering 中的 partial_fit() 到底是啥,它可以用于非常大的数据集吗?

Posted

技术标签:

【中文标题】SKLearn 的 Birch Clustering 中的 partial_fit() 到底是啥,它可以用于非常大的数据集吗?【英文标题】:What really is partial_fit() in SKLearn's Birch Clustering, and can it be used in very large datasets?SKLearn 的 Birch Clustering 中的 partial_fit() 到底是什么,它可以用于非常大的数据集吗? 【发布时间】:2019-07-12 11:01:45 【问题描述】:

我的数据是轻尾的,在两个极端都有几个异常值。我正在使用 Birch 对数据进行聚类,在此之前我使用 RobustScaler 来转换数据,然后使用 PCA 来减少维度。但是我收到一个 MemoryError:

这对我来说有点不寻常,因为当我尝试另一种仅映射来自 [0,1] 的原始数据的转换方法时,Birch 算法会起作用。

我阅读了 SKLearn 的 Birch 文档并了解了 partial_fit() 函数,但那里没有足够的细节让我了解它的用途以及如何使用它。文档只是说:'在线学习。防止从头开始重建 CFTree。'

【问题讨论】:

【参考方案1】:

查看源代码。

当您可以访问源代码时,不要依赖网络论坛上的人来猜测函数的作用。原因很简单:它可能因版本而异。所以我可以给你一个正确的答案,不同的版本......

您是否一次就整个数据调用了partial_fit?那不是你应该做的。一次只处理一批。

内存问题可能是由于旧数据仍可访问且未进行垃圾收集(例如未转换的数据),也可能是由于参数不同。如果您仔细研究 Birch 论文,您会发现它对内存的控制比我们在今天的 Python 等语言中更紧密,并且在现代操作系统上无法重现这种详细程度。 p>

但您应该考虑的主要问题有以下两个:

    Birch 聚类在此数据上的质量是否真的足够好?还是您在努力解决错误的问题? 如果只使用 50% 的“大”数据,质量会下降多少?统计上应该没关系...该方法基于聚合,并且此类聚合的精度随着 sqrt(n) 的增长而增长...即,添加越来越多的数据并不重要。

【讨论】:

您好感谢您的评论,我还没有使用 partial_fit(),图像上显示的结果基于 Birch [没有 partial_fit()]。我想知道 partial_fit() 是否可用于扩展桦木集群,即使手头有源代码,它似乎运行批次的迭代,但再次听到首先使用此功能的人的建议仍然是件好事手。

以上是关于SKLearn 的 Birch Clustering 中的 partial_fit() 到底是啥,它可以用于非常大的数据集吗?的主要内容,如果未能解决你的问题,请参考以下文章

用scikit-learn学习BIRCH聚类

BIRCH聚类算法原理

BIRCH+聚类

BIRCH聚类算法原理

聚类算法(BIRCH)

Birch聚类算法的实现