聚类算法

来源:互联网 发布:mac安装php环境 编辑:程序博客网 时间:2024/06/05 21:56

机器学习中有两类的大问题,一个是分类,一个是聚类。分类是根据一些给定的已知类别标号的样本,训练某种学习机器,使它能够对未知类别的样本进行分类。这属于supervised learning(监督学习)。而聚类指事先并不知道任何样本的类别标号,希望通过某种算法来把一组未知类别的样本划分成若干类别,这在机器学习中被称作 unsupervised learning (无监督学习)。

1、定义:
所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高。其中每个子集叫做一个簇。
这里写图片描述

2、相异度计算(跟之前的一篇博文中kNN相似)
1、曼哈顿距离:对应特征值相减的绝对值的累和。类似一范数
这里写图片描述
2、欧式距离:对应特征值相减后的平方和再取根号。类似二范数
这里写图片描述
3、余弦距离:
4、核函数映射后的距离

3、聚类算法分类
1、cluster是一个独立于里干外一个的:k-means,高斯混合模型
2、树状层叠,无需输入聚类个数:层次聚类

4、k-means聚类算法
算法流程:
1)从D中随机取k个元素,作为k个簇的各自的中心。
2)分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
3)根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
4)将D中全部元素按照新的中心重新聚类。
5)重复第4步,直到聚类结果不再变化。
6)将结果输出
这里写图片描述

4.1 迭代收敛怎么定义:
1、聚类中心不再有变化
2、每个样本到对应聚类中心的距离之和不再有很大的变化
4.2 损失函数有吗
这里写图片描述
这是一个NP问题,收敛到局部最低点的过程(初始值点不同,收敛结果可能也不同)。
怎么解决这个问题呢?
1.第一个聚类中心选一个样本点,第二个聚类中心选距离它最远的样本点,第三个…..(k-means ++)
2.多初始化几遍(sklearn里面初始化10次)
4.3 k的取值问题
肘点法:
这里写图片描述

5.层次聚类
这里写图片描述
根据簇与簇之间的距离来进行聚类,每一个层次的都有.

6.高斯混合模型

原创粉丝点击