我对sklearn.cluster.MiniBatchKMeans
感兴趣,认为它是使用大型数据集的一种方式。无论如何,我对MiniBatchKMeans.partial_fit()
和MiniBatchKMeans.fit()
之间的区别感到困惑。
关于fit()
的文档指出:
通过将X上的质心分成小批来计算。
有关partial_fit()
的文档指出:
更新k表示单个小批量X上的估算值。
因此,据我所知,fit()
将数据集拆分为数据块,以训练k均值(我猜batch_size
的参数MiniBatchKMeans()
就是这个) partial_fit()
使用传递给它的所有数据来更新中心。术语“更新”可能看起来有点含糊,指示是否应该执行初始训练(使用fit()
),但是从documentation中的示例来看,这不是必须的(我可以使用{ {1}}的开头。)
partial_fit()
是否将使用传递给它的所有数据而不论其大小是真的吗?还是将数据大小绑定到作为参数传递给partial_fit()
构造函数的batch_size
上?同样,如果将MiniBatchKMeans
设置为大于实际数据大小,则结果将与标准k均值算法相同(我猜想,由于结构不同,后一种情况下效率可能会有所不同)。
答案 0 :(得分:1)
partial_fit
用于在线群集,而fit
用于离线群集,但是我认为MiniBatchKMeans的partial_fit
方法有点粗糙。
我从存储库中分离了旧的PR,发现this one,这似乎是该实现的第一个提交,它提到该算法可以将partial_fit
方法实现为在线聚类方法(遵循在线API讨论)。
与BIRCH实现一样,该算法也将fit
用作一次性离线聚类,并将partial_fit
用作在线聚类。
但是,我进行了一些测试,通过使用整个数据集中的拟合与使用partial_fit和大块拟合来比较结果标签的ARI,并且似乎没有任何结果,因为ARI结果是非常低(〜0.5),并且显然通过更改初始化来调整适合的块状拍子partial_fit,这没有任何意义。您可以找到我的笔记本here。
所以我的猜测是基于PR中的this response:
我相信该分支机构可以并且应该合并。
在线拟合API(partial_fit)可能需要成熟,但是我 认为这超出了这项工作的范围。核心 贡献,这是一个小批量的K均值,很好,而且似乎确实 加快速度。
自PR以来,实现没有太大变化,partial_fit方法仍然有点粗糙,从2011年到现在的两个实现都发生了变化(与release标签相比),但是它们都调用了函数_mini_batch_step
中的partial_fit
一次(没有详细信息),而fit
中的多次调用(具有详细信息)。