#前言:
上一篇博客我们简要介绍了一下有关线性回归算法的相关理论知识,了解了一些有关机器学习的基础概念,这篇博客将继续介绍一种机器学习的相关算法--聚类算法。
什么是聚类算法?顾名思义就是将传入的数据依照其相似性的特点从而分成不同的类别,本质上就是一类分类问题。同时聚类算法也是一种典型的无监督学习算法,所谓无监督学习算法就是我们所传入的数据集中并没有标签来对我们训练的结果进行纠正,这类算法普遍存在的一个训练难点就在于我们对于参数的调控。
例如上图所示,就是利用聚类算法算法所实现的一个分类效果。从上图可以看出,聚类算法将处于相近位置的点全部归为一类,从而实现了分类的效果。
#K-MEANS算法综述
K-MEANS算法是一种典型的聚类算法,在讲解其算法理论原理之前,我需要给大家介绍几个基本概念:
·参数k:k是我们人为设置的一个参数,表示我们希望算法帮助我们将数据分为几类,后续的调参工作也是围绕k展开,同时这也是一个难点。
·质心:就是对于某一个分类类别中,所有数据点的坐标均值。
·距离的度量: 通常我们会用到欧几里得距离或者余弦相似度来进行距离的求解。而这里的距离就是指各个数据点与质心之间的距离大小。
·优化目标:我们的优化目标如下
如何解读上面的公式,本质上如何去判断一个分类好不好,对于K-MEANS算法来说就是每一个数据点到其分类类别质心的距离之和最小,而上述的公式表达的正是这个意思。
#K-MEANS工作流程
我们依照上图来简述一下工作流程:
1.首先在数据点中随机生成k个质心
2.遍历所有数据点,计算各个数据点分别到各个质心的距离。对于所得到的多个距离,我们将数据点划分到距离最小的质心所属的类别
3.最对现有的分别类别,重新计算质心坐标
4.重复2,3的操作,直至质心位置不在发生变化为止
#K-MEANS算法的优缺点
优点:通过上面的简单介绍不难发现,K-MEANS算法具有简单快速的特点,且对于常规数据集的处理效果十分理想
缺点:k值难以确定,不仅仅是K-MEANS算法,对于所有的聚类算法来说,参数的确定永远是一个难题。同时由于K-MEANS算法需要对所有的数据点进行多次便利,所有对于复杂庞大的数据来说,K-MEANS算法可能不是一个很好的选择。同时K-MEANS算法无法处理一些复杂不规则的数据,例如下图
我们所希望的是将该数据集分为外层和内层两个类别,但是很显然,K-MEANS算法是无法实现的。