聚类k-means/k-means++/fcm学习笔记

聚类主要是一种无监督学习,用来发现未标注数据的隐藏结构,主要是用来给数据分组,聚类算法一般有硬聚类(k-means,k-means++)和软聚类FCM(fuzzy c-means)。聚类目前广泛应用于文档,音乐,电影的分组,以及基于用户的行为对用户分组等。聚类一般有如下分类,基于层级(hierarchical)的聚类,基于密度(density-based)的聚类还有基于原型(prototype-based)的聚类。

聚类k-means/k-means++/fcm学习笔记_第1张图片


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直到样本点属于中心点的相关系数不变或者变化在一个可控的范围内或者迭代次数到达了设定的值。

你可能感兴趣的:(机器学习)