1KMeans算法
KMeans算法是用来聚类的,其中的 K 表示类别数量,以样本间的距离作为聚类的标准,该算法的核心思想非常简单,总共就 3 个步骤。
步骤 1:在样本中随机选取 K 个样本点,作为初始中心点;
步骤 2:计算每个样本点到各个中心点的距离,然后将样本点分配给最近的中心点;
步骤 3:根据聚类结果,将每类的均值作为新的中心点;
步骤 4:不断重复步骤 2、3,当中心点不再变动时,结束算法。
2 DBSCAN算法
DBSCAN 算法是一种以密度为基础的空间聚类算。该算法也很好理解,就好城市群划分,半径多少公里内的城市就算作一个城市群。当然这就设计到两个问题了,第一是我们要确定这个半径,第二是我们要确定至少多少个城市才能叫做城市群(我觉得至少要 3 个)。
假设有若干个城市,半径确定为 300 公里,圈内最小城市数为 3,那么该算法有 4 个步骤,如下:
步骤 1:随机选取一个未分类的城市;
步骤 2:以该城市为圆心,按照半径画圆,如果圆内的城市数大于等于 3,就将这些城市归为一类;
步骤 3:选定圆内其他的城市为圆心,继续画圆,如果城市数小于 3,则放弃这个圆,一直重复画圆的步骤,直到没有可画的圆,将这些城市都归为一类。
步骤 4:再次随机选择一个未分类的城市,重复步骤 2 和步骤 3。
3 对比
如下图所示,同样聚成 4 类,左边是 KMeans 算法聚类的结果,右边是 DBSCAN 聚类的结果,想一想为什么会这样呢?这是否能说明哪个算法更好呢?