无监督学习
数据集是不带标签的,要找到一下隐含在数据中的机构
算法首先生成两个聚类中心,第一步进行簇分类,然后遍历数据集,计算每个点到聚类中心的距离,然后将点和最近的聚类中心分为一类;第二部内循环就是重新划分聚类,将两个聚类中心移动到同类点的平均位置,然后在进行簇分类,计算每个节点到新的聚类中为的距离然后进行分类,再次更新聚类中心的位置,这样不断迭代下去,知道聚类中心不会再改变,成为聚类中心收敛。
即使是分类不佳的数据,算法也能较好的将数据分类,然后根据不同组内数据的特点进行市场划分。
K-means算法的优化目标
K-means算法也存在优化目标,损失函数,了解算法的优化目标可以帮助我们进行算法的debug,更好的调试目标,也可以再进行优化,寻找簇的时候找到最优解,避免局部最优。
最小化损失函数也称为算法的失真代价函数。通过优化代价函数,可以找到合适的类中心。
随机初始化
如何初始化聚类中心
聚类算法可能会得到局部最优,如下图所示,将本应归为一类的点分离开:
为了跳出这种局部最优,我们通常进行多次随机初始化,多次重复选择聚类中心。尽力实现较好的局部最优或全局最优。以下是实际做法:
如上所示,可以重复进行一百次聚类算法,然后找到使损失函数最小的聚类结果。通常在目标类数目较少的情况下,多次初始化效果较好,如果类数据过多,则多次随机初始化不太奏效。
聚类数量的选择
通常进行聚类数量选择的方法还是通过观察图或者聚类算法的输出,还没有自动选择的方法。有一个肘部法则(Elbow method)
通过画出损失函数和聚类数量的图像,可以选择拐点对应的数量作为聚类数量。但是,有时也会遇到有图的情况,拐地不明确。还可以通过聚类目的进行局类数目的选择,如下图:
进行聚类是为了实现多种目的,如市场分割等,因此,我们可以根据目的进行聚类数的选择,如在进行T-shirt尺码的设计时,我们可能需要三种尺码的T-shirt,或者是五种,然后就确定了聚类的数量。