机器学习实战-ch2-有标签的聚类算法

时间:2024-03-31 16:07:44

本书中的这个聚类算法多少有些让人意外。通常的聚类算法是这样的:

  1. 给定一堆点;
  2. 给定一个距离计算的算法;
  3. 给定一个cluster之间的距离d,或者最小的cluster数目k;
  4. 初始化,每个点作为初始集群的中心;
  5. 循环直到cluster个数小于K,或者任意两个cluster的距离大于d;
    1. 计算每个点i到每个中心点j之间的距离,Dij;
    2. 将绝对值最小的节点 i 汇总到cluster j中;
    3. 重新计算cluster j的中心点。
  6. 对每个clsuster一个label。

注意这个算法是没有提前标注的。事先不知道有多少个集群,也不知道每个集群有什么含义。我们只是知道这些集群是互相类似的。

------------

本章的算法描述的是另一个场景。之前已经有一些例子【属性1,属性2,属性3,结果】。我们希望知道一个新来的实例【属性1,属性2,属性3,结果是啥?】。算法如下:

  1. 计算出输入节点inX与已知节点 dataSet 中各个点的距离;
  2. 按照距离从小到大排列,选择前K个dataSet中的点;
  3. 看dataSet中各个点的各个结果出现的频率;
  4. 选择出现频率最高的结果作为算法结果。

这种算法应该是专门为已知label的算法训练的。而且它不能批量的计算。因为加入dataSet中有N个节点,输入M个节点进行预测,需要计算M*N。如果能提前把N个几点汇总成K个聚集的话,M个节点的预测就会小很多。

那就回引发另一个问题,有没有可能把dataSet的节点聚集成S个群以后,每个群有多个结果,比如90%结果1,5%结果2,3%结果3。这样的话,找到的输入对应的cluster也只能是得出一个概率。