聚类主要是一种无监督学习,用来发现未标注数据的隐藏结构,主要是用来给数据分组,聚类算法一般有硬聚类(k-means,k-means++)和软聚类FCM(fuzzy c-means)。聚类目前广泛应用于文档,音乐,电影的分组,以及基于用户的行为对用户分组等。聚类一般有如下分类,基于层级(hierarchical)的聚类,基于密度(density-based)的聚类还有基于原型(prototype-based)的聚类。
k-means实现思路:
1. 随机从数据集中选择k个中心点
2. 对于数据集中的每一条数据,比较与k个中心点的距离,然后把当前数据分配给最近的中心点
3. 重新计算数据集中k个中心点
4. 重复第二步和第三步,只到中心点的位置变化不变或者变化在指定的范围内或者迭代次数满足设定的目标。
比较与中心点的距离一般采用的是欧式距离,k-means可能会选择到最差的结果,需要多跑几次,而且每次跑的结果