考虑到复杂平面中的一组点,我想找到一个“典型值”,类似于均值或模式。但是,我预计会有很多异常值,并且只有少数几个点接近典型值。以下是我想要使用的确切措施:
求出方差小于某个程序员定义的常数C
的最大点集的平均值
我发现的最接近的是文章Finding k points with minimum diameter and related problems,它提供了一种有效的算法,用于找到一组具有最小方差的k点,对于一些程序员定义的常数k。这对我没用,因为接近典型值的点数可能变化很大,可能还有其他小簇。然而,将文章的结果合并到二进制搜索算法中表明我的问题可以在多项式时间内解决。我在这里问,希望找到一个更有效的解决方案。
答案 0 :(得分:0)
这是方法(从我对问题的理解): -
从数据集中选择点k,并按照O(NlogN)
中k的距离的升序计算排序的点列表。
将k保持为平均值将从排序列表中的点添加到集合中直到方差<1。 C然后停止。
为所有点执行此操作
跟踪最大的集合。
时间复杂度: - O(N^2*logN)
其中N是数据集的大小
答案 1 :(得分:0)
模式搜索算法(如Mean-Shift聚类)可能仍然是一个不错的选择。
然后,您可以将模式保留为方差低于阈值C
的最大点集。
另一种方法是使用相当大的k
运行k-means。然后删除对方差贡献过多的所有点,减少k
并重复。即使k-means不能很好地处理噪声,也可以使用它(特别是使用大k
)来识别这些对象。
或者您可能首先运行一些简单的异常值检测方法来删除这些异常值,然后仅识别简化集中的模式。一个好的候选方法是1NN离群值检测,如果你有一个加速的R树,它应该在O(n log n)
中运行。