聚类算法可以简化为一个找聚类中心的问题,比如k-means,而对于输入向量空间,找他的聚类中心,可以用统计学的方法,比如GMM,也可以用向量量化的方法。
自组织映射,可以理解为一种向量量化网络,相当于我们的选人大代表,一类相近的人可以选一个代表,SOM就是这样的思想,有了这些代表,聚类问题就变成了分类问题,剩下的便是让这些输入向量站队了。呵呵
还是打个比方,现在怎么选人大代表呢?如图:
你可以想象这是一块操场空地,为了方便演示,黑点代表群众,空圈就是人大代表,乍一看这些圈圈离群众都好远,怎么行呢,人大代表当然要深入群众了,这样才能代表群众,现在的问题是怎么样让这些圈圈走到群众中去?
现在进行一个策略,每次让一个群众在原地大喊:“代表向我靠拢!”,这样图上四个代表就根据声音的方向,向这个群众移动,这里有个问题,到底是四个“人大代表”都向这个群众移动呢,还是只有少数几个“人大代表”移动,我们可以认为声音传播越远越弱,距离那位群众越远的人大代表听的声音越弱,甚至听不见,“代表”听到的声音越强,移动的距离越长,反之移动越短,甚至不移动;
根据以上的策略,如下图,我们可以看到当所有的群众都喊了若干次后,四个人大代表都站到群众中间去了,这些代表就是各自的聚类中心;
自组织映射,就是这个原理,上面的黑圈圈就是所谓的神经元,即权值矩阵,我们通过最后收敛的权值矩阵来完成分类;但是你可能会困惑,说了这么多,跟映射有什么关系呢,其实这个映射就是数据空间到神经元的映射,神经元分布密集的地方说明那里的数据分布也很密集!就像上面如果某个区域人稀疏的话,代表也没法去嘛,因为没人叫他去啊!
当数据很大的时候,我们没法一次性处理,我们可以将数据分块,比如分成4块,分别进行SOM聚类,这里假设每块分5类,然后就有4*5=20个模式向量,对于总的块来说就是有20类,然后用他们的模式向量进行一次层次聚类,就能对整个数据进行聚类了;
神经网络用相对很简单的策略来实现有些很复杂的问题,并且效果都还不错。关于上面som的实现,要搜索最近的向量,如果搜索整个输入空间是很费时的事情,这里又要提到kd树了,有兴趣的可以看看;
任何一种基于大数据的算法,首先要考虑的就是效率,可行性。