[英]Efficient dynamic clustering [closed]
我有一组来自单位间隔的数据点(即带有数值的一维数据集)。 我在线上收到一些其他数据点,而且某些数据点的值可能会动态变化。 我正在寻找一种可以有效处理这些问题的理想聚类算法。
我知道顺序k均值聚类可以应对新实例的添加,并且我认为只需稍作修改即可使用动态实例值(即,首先从各个聚类中获取经过修改的实例,然后更新聚类的均值,最后给出修改后的实例作为算法的输入,就像添加了一个看不见的实例一样)。
我对使用k-means算法的关注是要求提供簇数作为输入。 我知道他们在时间和空间复杂度方面击败了其他聚类算法(GA,MST,分层方法等)。 老实说,我不确定,但是也许可以摆脱上述算法之一的困扰。 即使我的数据集相对较大,一个维度的存在也让我感到奇怪。
更具体地说,我的典型测试用例将包含约10K-200K一维数据点。 我想最好在一秒钟内完成聚类。 假设值点的动态变化是平滑的,即相对较小。 因此,高度推荐能够使用现有解决方案(即能够在更改值或添加新值时继续在现有解决方案上进行集群化)的方法。
总而言之:
您能想到一种可以在计算效率和聚类准确度之间提供最佳结合的算法吗? 上面定义的问题?
k-均值算法是否有一些不错的试探法,可以预先自动计算K的值?
因为您的数据集是一维的,所以您可以使用一种非常简单有效的方法来根据单链接聚类规则动态更新聚类 。 该规则规定,只要第一个聚类中的某个点和第二个聚类中的某个点的距离小于预定阈值距离,就会将2个聚类合并为1个聚类。
您可以在每个BST节点内的字段中记录每个点所属的群集。 或者,如果插入操作占主导,那么使用并/查找数据结构可能会更快。
除了BST(或决策树)之外,其他方法是分层聚类,例如BIRCH算法 ,它非常适合大型数据集并将新的数据点添加到现有聚类中,它的性能也是最好的之一
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.