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() 到底是啥,它可以用于非常大的数据集吗?的主要内容,如果未能解决你的问题,请参考以下文章