上一节讲的无监督学习,但是很多人可能会很疑惑,没有目标,那算法是怎么学会该怎样分类的呢?今天就简介一下其中的聚类算法。
聚类
首先说明是什么聚类。聚类就是按照某种标准把一个数据集可以分割成不同的类或者簇,使得同一个簇内的数据对象的相似性尽可能的大,而不在同一个簇中的数据对象的差异性也尽可能的大。
聚类的过程
聚类的过程一般包括:
- 数据准备。特征标准化
- 特征选择。选择最有效的特征
- 特征提取。对选择的特征进行转换
- 聚类。一般是通过某种距离函数或者相似度系数等进行相似度度量,获取簇,下面会详细 介绍有哪些相似度度量方法
- 聚类结果评估。分析聚类结果,比如距离误差等
相似度度量方法
常用的相似度度量方法包括:
- 闵可夫斯基距离,也叫做欧式距离
- 杰卡德相似系数
- 余弦相似度
- 皮尔逊积矩相关系数
- 相对熵
- helinger距离
每一个都有相应的计算公式,可以自行搜索,此处不赘述。
聚类的方法
聚类从大分类上分为下面:
划分式
其中的代表是kmeans算法,算法的核心:
对于给定的K类目,先进行初始划分,然后改变样本和簇的隶属,使得每次改进之后的划分都比前面好,也就是所谓的簇内更相似
至于初始点,可以随机生成,也可以使用固定算法。
初始的时候数据是不分簇的,需要我们随机生成K个点,这里是用2个举例(图中蓝色和红色的点):
然后以这两个点计算样本中数据与这两个点的距离
距离这2个点中每个点更近的点,被归为一个簇,迭代结束就形成了两个簇。
然后取每个簇的中心点(均值点)再次作为K类的点,以样本中的数据再次计算与这K个点的距离,再进行分簇,然后再与上面的进行相同的迭代。
迭代到最后,簇中的样本基本不会再变化。
Kmeans算法优点就是:简单,能够快速处理大数据集,特别是当簇近似高斯分布时,效果更好。
Kmeans算法缺点:初值敏感,而且需要提前定义K,且要能够计算均值
层次聚类
层次聚类是对给定的数据集进行层次的分解,直到满足一定的条件。层次聚类又分为两种,一种是自底向上,一种是自顶向下。
自底向下是将每个单独的样本作为一个簇,然后合并这些簇,直到满足条件。另外一种则是相反的方向,逐步的细分。
举个例子:学校里的学生,比如学生A和B在喜爱篮球的特征更相似,合并为一个簇,然后A B和C在喜欢运动的特征上相似,可以合并成更大的簇,然后依次向上合并成更大的簇。
整个过程是类似下面显示:
基于密度的聚类
该算法的核心是定义一个密度函数,当两个样本在定义的密度函数值内,那我们就认为这两个样本是密度可达的,密度可达的样本可以分成一个簇。