聚类主要是一种无监督学习。用来发现未标注数据的隐藏结构,主要是用来给数据分组。聚类算法一般有硬聚类(k-means,k-means++)和软聚类FCM(fuzzy c-means)。聚类眼下广泛应用于文档,音乐,电影的分组,以及基于用户的行为对用户分组等。聚类一般有例如以下分类,基于层级(hierarchical)的聚类,基于密度(density-based)的聚类还有基于原型(prototype-based)的聚类。
k-means实现思路:
1. 随机从数据集中选择k个中心点
2. 对于数据集中的每一条数据,比較与k个中心点的距离,然后把当前数据分配给近期的中心点
3. 又一次计算数据集中k个中心点
4. 反复第二步和第三步。仅仅到中心点的位置变化不变或者变化在指定的范围内或者迭代次数满足设定的目标。
比較与中心点的距离一般採用的是欧式距离,k-means可能会选择到最差的结果,须要多跑几次,并且每次跑的结果不一定同样。
k-means++ 实现思路:
1. 初始化一个空的集合M来存储k个中心点
2. 随机的从数据集中选择第一个中心点并存到M中
3. 对数据集中的每一条不在M中的数据,计算对M所产生的最小平方距离
4. 随机的选择下一个中心点。此时中心点的选择会依据一个有权重的概率分布,规则是距离中心点越远的点,选择的概率也越大。计算公式=当前中心点与M最小的距离/第三步产生的数据求和。
5. 反复2.3.4直到k中心点都选择完毕。
6. 使用k-means的方式来处理以后的过程。
另一种称之为软聚类的方法,这个主要是依据概率来推断当前数据属于那一个cluster
如对上图中有三个中心点的样例。对于一个新的样本点,使用k-means或k-means++得出的结果为[k1=0,k2=1,k3=0],使用FCM得到的结果应该是这个样子的[k1=0.1,k2=0.75,k3=0.15]。这个说明这个新的样本点属于k2的概率是最大的。
FCM实现思路:
1. 指定中心点的个数k而且随机的为每一个数据点分配中心点的概率
2. 又一次计算中心点
3. 更新每一个数据点属于中心点的依据
4. 反复2.3直到样本点属于中心点的相关系数不变或者变化在一个可控的范围内或者迭代次数到达了设定的值。