【发布时间】:2011-08-06 20:46:45
【问题描述】:
如何在分类数据(蘑菇数据集)上实现 DBSCAN 算法?
什么是一次性聚类算法?
您能否提供一次性聚类算法的伪代码?
【问题讨论】:
标签: algorithm data-mining cluster-analysis dbscan
如何在分类数据(蘑菇数据集)上实现 DBSCAN 算法?
什么是一次性聚类算法?
您能否提供一次性聚类算法的伪代码?
【问题讨论】:
标签: algorithm data-mining cluster-analysis dbscan
您可以使用任意距离函数运行 DBSCAN,而无需对其进行任何更改。索引部分会更加困难,因此您可能只会得到O(n^2) 的复杂性。
但是,如果您仔细观察 DBSCAN,它所做的只是计算距离、将它们与阈值进行比较并计算对象。这是它的一个关键优势,它可以很容易地应用于各种数据,你只需要定义一个距离函数和阈值。
我怀疑是否存在一次性版本的 DBSCAN,因为它依赖于成对距离。您可以修剪其中一些计算(这是索引发挥作用的地方),但本质上您需要将每个对象与其他每个对象进行比较,因此它在 O(n log n) 中,而不是一次性。
One-pass:我相信最初的 k-means 是一种一次性算法。前 k 个对象是您的初始手段。对于每个新对象,您选择关闭均值并使用新对象(增量)更新它。只要您不对数据集进行另一次迭代,这就是“一次性”。 (虽然结果会比 lloyd 风格的 k-means 更糟糕)。
【讨论】:
读取前 k 个项目并持有它们。计算它们之间的距离。
对于剩余的每一项:
找出它最接近k个项目中的哪一个,以及这两个项目之间的距离。
如果这比 k 项中任意两项之间的最近距离长,您可以将新项与这两项中的一项交换,并且至少不会减小任意两项新 k 项之间的最近距离。这样做是为了尽可能增加这个距离。
假设所有项目的集合可以划分为 l
【讨论】: