本书中的这个聚类算法多少有些让人意外。通常的聚类算法是这样的:
- 给定一堆点;
- 给定一个距离计算的算法;
- 给定一个cluster之间的距离d,或者最小的cluster数目k;
- 初始化,每个点作为初始集群的中心;
- 循环直到cluster个数小于K,或者任意两个cluster的距离大于d;
- 计算每个点i到每个中心点j之间的距离,Dij;
- 将绝对值最小的节点 i 汇总到cluster j中;
- 重新计算cluster j的中心点。
- 对每个clsuster一个label。
注意这个算法是没有提前标注的。事先不知道有多少个集群,也不知道每个集群有什么含义。我们只是知道这些集群是互相类似的。
------------
本章的算法描述的是另一个场景。之前已经有一些例子【属性1,属性2,属性3,结果】。我们希望知道一个新来的实例【属性1,属性2,属性3,结果是啥?】。算法如下:
- 计算出输入节点inX与已知节点 dataSet 中各个点的距离;
- 按照距离从小到大排列,选择前K个dataSet中的点;
- 看dataSet中各个点的各个结果出现的频率;
- 选择出现频率最高的结果作为算法结果。
这种算法应该是专门为已知label的算法训练的。而且它不能批量的计算。因为加入dataSet中有N个节点,输入M个节点进行预测,需要计算M*N。如果能提前把N个几点汇总成K个聚集的话,M个节点的预测就会小很多。
那就回引发另一个问题,有没有可能把dataSet的节点聚集成S个群以后,每个群有多个结果,比如90%结果1,5%结果2,3%结果3。这样的话,找到的输入对应的cluster也只能是得出一个概率。