聚类
属于无监督学习,将一组没有标签的自变量分类
K-means
最普及的聚类算法
是一个迭代算法
算法流程
假设将数据分为k组:
- 初始化:随机选择k个点作为聚类中心
- 打标记:将所有数据点按照到每个聚类中心的距离远近,打上距离最近的那个聚类中心的标记
- 移动聚类中心:以标记为1为例:将所有标记1的点计算出一个均值,将聚类中心移动到那个均值点上(如果有一个聚类中心没有点,则删除那个聚类中心,再随机选取一个)
重复步骤2,3,直至中心点不再变化
优化目标
又称失真代价函数
回顾算法,选择最近的点分配是为了减小 C i C_i Ci引起的误差,调整聚类中心是为了修正 μ i μ_i μi(均值不等式)
注意在算法的迭代过程中J一定是递减的
初始化
随机选择K个样本作为起始的聚类中心
不过K-均值聚类的问题是一般只指向局部最优解
所以需要多次运行该算法,然后选取代价函数最小的结果
选择聚类数
因为数据没有标签,很难通过一个精准的算法去选择聚类数
一般是两种思路
- 肘部法则
画出这样的曲线,K为横坐标,J为纵坐标,有时会出现类似肘部的拐点,如左图,我们就选择那个拐点的K值作为聚类数
而更多时候图像如右图所示,肘部法则便很难适用
-
和实际应用结合
一般执行K聚类的结果后,都会有更具体的应用,比如设计产品尺码,设计计算机集群等等,我们可以和这些应用结合来确定我们的K值。
比如衣服分:s,m,l三类,那么便可确定K聚类的K值为3