计算聚类过程中点和cluster的距离,有以下几种方式:
启发式算法有两种方法,从下而上或者从上而下。 以从下而上为例,一开始每一个obes就是一个cluster,然后根据距离,不断地结合两个更近的cluster到一个cluster,达到一定的收敛条件后停止。
首先先选择k个初始点当做群的中心,然后数据集中的所有点根据与群中心的远近划分属于哪个群。然后在根据群的性质取群的中心点,然后再次划分所有点属于的群,不断往复,直到群的中心不发生变化,达到稳定的状态停止。
策略是:多选择几个k,看看average distance to centroid
如何变化。
理论上,随着k的增加,这个值应该越变越小,但是减少的幅度也越来越小,我们需要的就是那个拐点。
初始点的选择很有学问,不能够太近都属于一个cluster,这样的话其他的cluster就发现不了。 所以,应该让点越分散越好。
前面讨论的启发式算法的复杂度是O(n3)O(n^3),使用priority queue
的话能减低到O(n2logn)O(n^2logn)。
KMEANS的复杂度是KNKN,但是收敛很慢,也不适用于大数据集。
因此,我们需要一种算法,能够处理数据量很大的分类问题。
BFR(Bradley-Fayyad-Reina)算法,是KMEANS的变种,适用于大数据的分类(数据量只能在disk中存储,不可能全部放在memory里)。
这个算法的基础是一个很重要的假设:
assumes each cluster is normally distributed around a centroid in Euclidean space.
假设的存在,使得每个cluster长得都像下图这样:
核心思想就是先用一些样本训练出大概的样子,并且用4个数据很好地用样本代替了总体。