[ML]机器学习_聚类算法

目录

一、什么是聚类

1、背景

2、定义

3、概念

二、K-means直观理解

三、K-means算法

1、定义

2、K-means聚类算法公式

四、K-means优化目标

1、欧几里得距离平方和(误差平方和)

五、初始化K-means

1、定义

2、随机选择初始化法(Random Initialization)

六、选择聚类数量

1、定义

2、选择聚类数量的方法


一、什么是聚类

1、背景

        无监督学习(Unsupervised learning),是指在数据集中没有标签或类别信息的情况下,对数据进行分组或分类的一种机器学习方法。

        在无监督学习中,我们只关注数据本身的特征,通过对数据的内在结构和相似性进行分析,将数据分为不同的组或类别。无监督学习算法可用于聚类、降维、异常检测等任务。

        聚类是无监督学习中最常用的技术之一,它是一种将数据集分成多个组或簇的方法。不同的聚类算法基于不同的原理,可能会产生不同的结果。例如,K-Means聚类算法假设每个簇的数据都符合高斯分布,通过最小化簇内的方差来确定簇的中心;DBSCAN聚类算法则基于数据点之间的距离和密度来确定簇的大小和形状。

        降维是另一种常用的无监督学习技术。它通过将高维数据投影到低维空间中,并尽可能保留数据的原始结构和特征来减少数据的维度。常见的降维方法包括主成分分析(PCA)和流形学习(Manifold Learning)。

        异常检测是另一个应用非常广泛的无监督学习技术。异常检测算法可用于检测在数据中不常见或不同于其他数据的异常值。一些常见的异常检测算法包括基于密度的算法、基于聚类的算法、基于统计模型的算法等。

        总的来说,无监督学习是一种广泛应用于数据分析和机器学习领域的技术,它不需要特定的标签信息,只需要数据本身的特征信息就可以进行分析和处理。

2、定义

        聚类是一种机器学习和数据挖掘技术,它是将数据集中的数据对象分成不同的组或类的过程。它的目的是识别出数据集中相似的数据对象,并将它们分组。

        聚类算法通常基于两个基本假设:相似性和连续性。相似性假设认为属于同一组的数据对象应该具有相似的属性值。连续性假设认为属于同一组的数据对象应该彼此接近。

        聚类算法可以用于各种不同的领域,例如数据挖掘、生物学、图像处理和市场营销。聚类的结果可以用于确定数据集中的模式和结构,以及发现数据集中的异常值和离群点。

3、概念

        聚类(Clustering)算法查看大量数据点,并找到彼此相关或相似的数据点。

将聚类(无监督学习算法)与二元分类(监督学习算法)进行比较:

        监督学习:

         给定一个具有特征x_{1}x_{2}的数据集,有一个包含输入特征x和输出特征标签y的训练集,通过监督学习,可以绘制如图这样的数据集并拟合逻辑回归算法或神经网络来学习这样的决策边界。

        无监督学习:

        在监督学习中,数据集包括输入x和目标输出y,相比之下,在无监督学习中,得到的数据集只有x,没有目标标签y。对于无监督学习,要求算法找到有关数据的一些有趣结构,聚类算法在数据中寻找一种特定类型的结构。查看数据集并尝试查看它是否可以分组到集群中,意味着彼此相似的点组。在图中情况下,聚类算法可能会发现该数据集包含来自此处显示的两个聚类的数据。

二、K-means直观理解

        假设有30个未标记训练示例的数据集,在这个数据集上运行K-means算法。

        算法首先会随机猜测两个聚类的中心位置(想让它找到几个集群可以人为决定),它就会将数据分为两个集群。

        其实这两个随即中心点并不是很好,但是没关系。

K-means会重复做两件事,第一个是将点分配给簇质心,第二个是移动簇质心。 

        第一步,遍历所有点,查看更接近红色十字还是蓝色十字,将这些点中的每一个分配给它更接近的集群质心。

         第二步,查看所有的红点并取它们的平均值,然后将红色十字移动到红色点的平均位置处,查看所有的蓝色点并取它们的平均值,然后将蓝色十字移动到蓝色点的平均位置处。

        现在有了新的对聚类质心位置的猜测,将再次查看所有30个训练示例。并检查它们中的每一个是否更接近新位置的红色或蓝色集群质心。然后将再次将它们关联起来,每个点指向更近的簇质心。

         事实证明,如果继续重复这两个步骤,那就是查看每个点并将其分配给最近的聚类质心,然后将每个聚类质心移动到所有具有相同颜色的点的平均值。

        持续执行这两个步骤,最后会发现点的颜色和簇质心的位置没有更多的变化,这意味着此时k-means聚类算法已经收敛。

三、K-means算法

1、定义

        k-means聚类算法是一种常见的无监督机器学习算法,用于将相似的数据点分组为具有相似特征的簇。该算法通过最小化每个簇内部数据点的距离平方和来实现聚类目标。

算法步骤如下:

  1. 首先需要确定聚类的中心数量k。

  2. 随机选择k个数据点作为初始中心点。

  3. 对每个数据点进行聚类分配,即将每个数据点分配到距离最近的中心点所在的簇中。

  4. 根据每个簇中的数据点重新计算其对应的中心点位置。

  5. 重复步骤3和步骤4,直到簇的分配不再发生变化或者达到指定的迭代次数。

  6. 算法结束,得到k个簇。

优点:

  1. 算法实现简单,容易理解和实现。

  2. 对于大数据集有较高效率和良好的可扩展性。

  3. 能够处理高维数据,适用于许多领域的应用。

缺点:

  1. 需要手动确定簇的数量k,不同的k可能会得到不同的结果。

  2. 算法对噪声和离群点比较敏感。

  3. 算法的表现受初始中心点的选择影响较大,可能会导致陷入局部最优解。

        总体来说,k-means算法是一种常见的聚类算法,其通过不断迭代来优化聚类过程,具有简单易懂、高效可扩展等优点,但需要手动确定簇的数量和对初始中心点敏感等缺点,需要根据具体应用场景选择。

2、K-means聚类算法公式

第一步,随机初始化k个簇质心\mu _{1}\mu _{2}、...、\mu _{k}。举例,对应于随机选择的两个簇质心红色十字和蓝色十字的位置,此时k=2,红色十字为\mu _{1},蓝色十字为\mu _{2}

notes:

        \mu _{1}\mu _{2}是与训练示例具有相同的维度的向量,在所有示例中,都是具有两个特征x_{1}x_{2}的二维向量,那么 \mu _{1}\mu _{2}也是二维向量。

第二步,k-means算法将重复执行上述的两个步骤。

        1)、将点分配给簇质心,根据每个点到簇质心的距离将其划分给最近的集群中。

        对于所有m个训练示例,设置c^{(i)}等于训练样例x^{i}距离最近的簇质心(1到k)的索引。

在数学上,可以写成计算x^{i}\mu _{k}之间的距离,也被称为L2范数,想要找到最小化L2范数的k值,对应于最近训练示例x^{i}的簇质心\mu _{k},然后最小化的这个k值就是c^{(i)}的值。如图中,x^{1}c^{(1)}=1x^{12}c^{(12)}=2。当实现这个算法时,最小化平方距离实际上更方便,因为最小平方距离的簇质心应该与最小距离的簇质心相同。

        2)、移动簇质心,计算当前集群中点的平均值,将簇质心移动到平均值处。

         对于所有k个聚类,将要更新的聚类质心位置,设置为分配给该聚类k的点的平均值,具体来说,需要查看该聚类中的所有点,查看它们在横轴上的值,然后取横轴上的平均值,还要计算纵轴上的值,然后取纵轴上的平均值,计算这两个平均值后,就获得了该聚类的簇质心\mu _{k}的位置。

        在数学上,如果第一个集群已经分配了训练示例:x^{(1)}x^{(5)}x^{(6)}x^{(10)},那么四个训练示例相加再除以4,得到第一个集群的新簇质心。需要明确的是,这些x值中每一个都包含两个数字的向量,或者如果有n个特征则示例中包含n个数字向量,因此\mu也包含n个数字向量。

notes:

        极端情况,如果一个集群分配给它的训练样本为零,在这种情况下,\mu _{k}将尝试计算其中空点的平均值,这没有定义。对于这种情况,最常见的做法就是消除该集群,最终得到k-1个集群。如果需要k个集群,另一种方法就是随机重新初始化该集群质心。

四、K-means优化目标

1、欧几里得距离平方和(误差平方和)

        k-means的优化目标是最小化所有数据点与其所属聚类中心之间的欧几里得距离平方和,也被称为误差平方和(SSE)或畸变(distortion)。

        欧几里得距离是两个向量之间的距离,可以使用以下公式进行计算:

d = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}

其中,xy是两个n维向量,x_iy_i分别是向量xy的第i个元素,d为欧几里得距离。

        k-means的误差平方和(SSE,Sum of Squared Errors)或称为畸变值(distortion),是指所有数据点到其所属簇中心点的距离平方和,用公式表示为:

SSE = \sum_{i=1}^{k} \sum_{x \in C_i} ||x - \mu_i||^2

其中,k为聚类中心的数量,x为数据点,C_i为第i个聚类,\mu_i为第i个聚类的中心点。

        SSE衡量的是聚类结果的紧密度或聚类的效果,SSE越小,表示聚类效果越好。因此,在k-means算法中,我们的目的是使SSE最小化,即将每个数据点分配到与其最接近的聚类中心,以使得聚类中心越接近其所属数据点,SSE就越小。

        在k-means算法中,迭代过程就是通过不断调整聚类中心位置和重新分配数据点来最小化SSE的过程。一般情况下,k-means算法通过设置迭代次数、聚类中心的初始化方法、距离度量等参数来调整算法的性能和结果。

2、代价函数

        k-means的代价函数(Cost Function)也称为畸变函数(Distortion Function)、失真函数(Distortion Function),是指在给定聚类数量k和聚类中心集合{\mu_1, \ldots, \mu_k}的情况下,对所有数据点x计算其到最近聚类中心的距离平方和,公式表示为:

J(c^{(1)},\ldots,c^{(m)},\mu_1,\ldots,\mu_k) = \frac{1}{m}\sum_{i=1}^{m}||x^{(i)}-\mu_{c^{(i)}}||^2

其中,m为数据点数量,x^{(i)}为第i个数据点,c^{(i)}为数据点x^{(i)}所属簇的索引,\mu _{c^{(i)}}为样本x所属簇的簇中心。

        代价函数用于评估聚类质量的好坏,我们希望通过调整聚类数量和聚类中心点的位置,使代价函数值最小化。在k-means算法中,通过多次迭代更新聚类中心点位置直到代价函数收敛的过程来得到最终的聚类结果。因此,代价函数和失真函数是等价的,只是常数倍数不同。

五、初始化K-means

1、定义

        K-Means是一种聚类算法,其中最重要的参数是聚类数k和数据点的初始中心点。合适的初始中心点能够加快算法的收敛,减少运算次数,提高算法的准确性。而不合适的中心点往往会使算法陷入局部最优解,收敛速度慢,准确性差。

下面是几种常见的初始化K-Means的方法:

  1. 随机初始化法(Random Initialization):是一种最简单的初始化方法。随机从初始数据点中选取k个点作为初始中心。但是这种方法有可能选到相同的数据点作为初始中心点,因此引入了其他的随机方法。

  2. K-Means++算法:K-Means++是在随机初始中心点的基础上,通过对初始中心点的选择加权,使得每个数据点被选为初始中心点的概率与其与最近中心点的距离成反比。该方法可以有效防止选中离群点,提高算法的准确性。

  3. 均匀分布随机初始化法(Uniform Distribution):在数据范围内均匀分布随机选取k个点作为初始中心点。

  4. K-Medoids算法:与K-Means++类似,但是K-Medoids算法选取中心点时只考虑选取初始数据点集合中的点作为中心。

        总之,初始化K-Means的方法很多,并且不同的方法可能会对聚类结果产生很大的影响。因此,选择合适的初始化方法是进行K-Means聚类时需要考虑的重要问题之一。

2、随机选择初始化法(Random Initialization)

        k-means聚类算法第一步就是选择随机位置作为聚类质心{\mu_1, \ldots, \mu_k}的初始猜测。

        应该选择的集群数量k要小于训练示例数m,k若大于m没有意义。为了选择簇质心,最常见的方法就是随机选取k个训练样例,然后将{\mu_1, \ldots, \mu_k}设置为k个训练示例。

        前面上文一开始的集群质心是随机选取的,这里是放在特定的训练示例上,事实证明,这种方法是初始化集群质心的常用方法。

        但是随机选取训练样例作为初始的簇质心可能会出现局部最优解的情况。为了解决这种情况,就需要运行多次,然后找到最佳的局部最优解,根据提供的代价函数最低标准来选择初始簇质心。

如果对k-means使用100次随机初始化:

  • 选择k个训练样例,并让最初的簇质心位于这k个训练样例,使用随机初始化。
  • 运行k-means算法以收敛,这提供了集群分配和簇质心的选择。
  • 计算代价函数。

        这样重复100次之后,最终会选择成本最低的一组集群。事实证明,这样得到的集群通常会比只运行一次的k-means代价函数低很多。

notes:

        通常运行次数在50到1000次之间。运行次数过多通常会耗费很多的时间成本。 

六、选择聚类数量

1、定义

        K-Means是一种非监督的学习算法,其中聚类数k是需要手动指定的。选择合适的聚类数是很困难的,因为没有一个通用的方法,可行的方法通常是基于经验的。下面是几种常用的选择聚类数方法:

  1. 手肘法(Elbow Method): 手肘法是一种直观的方法,通过绘制损失函数值与聚类数k的关系图,找到损失函数值出现拐点的k值。拐点通常是指曲线开始变平滑的位置,即增加聚类数不再显著降低损失函数值。但是这种方法并不总是可靠的,特别是数据集非常复杂时。

  2. Silhouette分析法: Silhouette指数是一种聚类的效果评价指标,它反映了聚类结果的紧密度和分离度。通过计算不同聚类数k对应的Silhouette指数来选择最优聚类数。当Silhouette指数接近1时,表示聚类效果好;当Silhouette指数接近-1时,表示样本更适合归为其他聚类;当Silhouette指数接近0时,表示样本在两个聚类之间没有明显的差异。

  3. Gap统计学方法: Gap统计学方法是通过比较聚类结果与随机数据集的聚类结果来选择最优聚类数。通过计算随机数据集和实际数据集的距离之间的差异,来比较不同聚类数k的效果。当实际数据集的距离与随机数据集的距离之间的差值达到一个最大值时,对应的聚类数k就是最优的聚类数。

  4. 最大化平均轮廓系数法: 该方法类似于Silhouette分析法,但是采用了平均轮廓系数作为指标来评价聚类效果。最大化平均轮廓系数的聚类数就是最优聚类数。

这些方法都有其优缺点,选择最合适的聚类数方法需要根据具体的问题和数据进行选择。

2、选择聚类数量的方法

        尝试选择k值得一种方法称为手肘法,作用是使用各种k值运行k-means,并且将代价函数绘制成依据k的值变化的图像。

        左图中,当集群数量很少的时候,代价函数会很高,随着集群数量的增加会下降,在k=3的时候下降变慢了,被称为肘部。所以将代价函数绘制成图像有可能会对选择集群数量有帮助。

        但是在很多情况下,很多代价函数是平滑地减少,如右图所示,并且没有明显的肘部点可以选择。注意的是,不可用k来最小化代价函数。

        通常建议的是根据k-means算法为后来的下游目的的执行性能来评估使用什么k值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IAz-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值