假设我在d维空间中有少量点,c_1,c_2,...,c_N,其中N大约为50-100。
现在,我在d维空间中有一组样本x_1,x_2,...,x_M,其中M可以大到1e7。
是否有一种有效的方法来隔离样本x_1,x_2,...,x_M,使得对于每个j,我们将x_j分配给点c_k,对于该点c_k,从x_j到c_k(对于所有k)的欧几里德距离是最小?
到目前为止,我采用的是暴力方法:对于每一个j,我只计算x_j与所有c_k的距离。在低维度中,我可以使用Matlab中的repmat和一些矢量化代码轻松完成此操作。
然而,在高维度时,我在进行repmat时会遇到内存问题,尤其是在M非常大的情况下。因此,运行for循环迭代每个x_j变得非常慢。由于我必须多次执行此聚类过程,因此我的整个模拟时间超过一天。
有关如何提高群集过程效率的任何想法?我试着环顾四周,但只找到了与我无关的k-means聚类,因为给出了c_1,...,c_N。
答案 0 :(得分:0)
像k-d树这样的最近邻结构在高维度上工作得很差(维数的诅咒)。我的第一个建议是以足够大的块来处理样本,以避免MATLAB解释器的开销,但足够小以至于它们适合缓存。