聚类
聚类是用于获得有关数据结构的最常见的探索性数据分析技术之一。可以将其定义为识别数据中的子组的任务,以使同一子组(集群)中的数据点非常相似,而不同群集中的数据点则非常不同。换句话说,我们尝试根据相似性度量(例如基于欧几里得的距离或基于相关的距离)在数据中找到同质子组,以使每个群集中的数据点尽可能相似。决定使用哪种相似性度量取决于特定应用。
聚类分析可以基于我们尝试根据特征查找样本子集的特征,也可以基于我们尝试基于样本查找特征子集的样本。我们将在此介绍基于功能的集群。聚类用于市场细分;我们试图在行为或属性,图像分割/压缩方面对彼此相似的客户处以罚款;我们尝试将相似的区域分组在一起,根据主题进行文档聚类等。
与有监督的学习不同,聚类被认为是无监督的学习方法,因为我们没有将聚类算法的输出与真实标签进行比较以评估其性能的基本事实。我们只想通过将数据点分为不同的子组来尝试调查数据的结构。
在本文中,我们将仅介绍Kmeans,由于其简单性,Kmeans被认为是最常用的聚类算法之一。
Kmeans算法是一种迭代算法,它尝试将数据集划分为K个定义的不同非重叠子组(群集),其中每个数据点仅属于一个组。 它尝试使群集内的数据点尽可能相似,同时还要使群集尽可能不同(远)。 它将数据点分配给群集,以使数据点和群集质心(属于该群集的所有数据点的算术平均值)之间的平方距离之和最小。 群集内的变化越少,同一群集内的数据点越齐(相似)。
kmeans算法的工作方式如下:
- 指定集群数K。
- 通过首先对数据集进行混洗,然后为质心随机选择K个数据点而不进行替换来初始化质心。
- 不断进行迭代,直到质心没有变化为止。 也就是说,将数据点分配给群集的过程没有改变。
计算数据点和所有质心之间的平方距离之和。
将每个数据点分配给最近的群集(质心)。
通过取属于每个群集的所有数据点的平均值,计算群集的新质心。
kmeans用来解决该问题的方法称为期望最大化。 E步骤将数据点分配给最近的群集。 M步骤正在计算每个群集的质心。 以下是关于我们如何数学上解决它的细目(随意跳过它)。
目标函数是:
如果数据点xi属于簇k,则wik = 1; 否则,wik = 0。 另外,μk是xi簇的质心。
这里要注意的几件事:
由于包括kmeans在内的聚类算法使用基于距离的度量来确定数据点之间的相似性,因此建议对数据进行标准化以使其平均值为零,标准差为1,因为几乎所有数据集中的要素几乎都具有不同的度量单位 例如年龄与收入。
给定kmeans的迭代性质和质心在算法开始时的随机初始化,由于kmeans算法可能停留在局部最优且可能不会收敛于全局最优,因此不同的初始化可能导致不同的聚类。 因此,建议使用不同的质心初始化来运行算法,并选择产生较低平方距离总和的运行结果。
例子1: