关于K-Means聚类法的解释

223 阅读23分钟

K-Means聚类法的解释

聚类是由H.E.Driver和A.L.Kroeber于1932年在他们的论文《文化关系的定量表达》中提出的。从那时起,这项技术有了很大的飞跃,并被用于发现许多应用领域中的未知因素,例如,医疗保健。

聚类是一种无监督学习的类型,其中的参照物需要从无标签的数据集中提取。一般来说,它被用来捕捉有意义的结构、基本过程和数据集中固有的分组。在聚类中,任务是将人群分成若干组,使同一组中的数据点比其他组中的数据点更相似。简而言之,它是基于对象的相似性和不相似性的集合。

通过聚类,数据科学家可以在未标记的数据中发现内在的分组。虽然一个好的聚类没有具体的标准,完全取决于用户,他们想如何使用它来满足他们的具体需求。它可以用来寻找数据中不寻常的数据点/离群点,也可以用来识别未知的属性,以便在数据集中找到一个合适的分组。

让我们举个例子,想象一下你在沃尔玛商店担任经理,想更好地了解你的客户,通过使用新的和改进的营销策略来扩大你的业务规模。手动对你的客户进行分类是很困难的。你有一些包含他们的年龄和购买历史的数据,这里聚类可以帮助你根据他们的消费情况对客户进行分组。一旦客户细分完成,你可以根据目标受众为每个群体定义不同的营销策略。

What does clustering mean?

聚类是什么意思?|来源。作者

有许多聚类算法被归入不同的聚类模型。在为一个用例选择任何算法之前,重要的是要熟悉聚类模型,以及它是否适用于该用例。在选择任何聚类算法时,还应该考虑一件事,就是你的数据集的大小。

数据集可能包含数以百万计的记录,而不是所有的算法都能有效扩展。K-Means是最流行的算法之一,它的复杂度为O(n),因此也是规模有效的。在这篇文章中,我们将深入讨论K-Means,以及是什么让它流行起来。

K-means聚类法

K-means是一种基于中心点的聚类算法,我们计算每个数据点与中心点之间的距离,将其分配到一个聚类中。其目的是确定数据集中的K数组。

"K-means聚类是一种矢量量化的方法,最初来自信号处理,目的是将n个观测值划分为k个聚类,其中每个观测值都属于平均值最近的聚类,作为聚类的原型。"-

这是一个将每个数据点分配到群组的迭代过程,慢慢地,数据点就会根据相似的特征进行聚类。其目的是最小化数据点和聚类中心点之间的距离之和,以确定每个数据点应该属于的正确组别。

在这里,我们将一个数据空间划分为K个集群,并为每个集群分配一个平均值。数据点被放置在最接近该簇的平均值的簇中。有几个距离指标可以用来计算距离。

K-means是如何工作的?

让我们举个例子来了解K-means是如何一步步工作的。该算法可以分解为4-5个步骤。

  1. 选择聚类的数量

第一步是定义K数的聚类,我们将在其中对数据进行分组。让我们选择K=3。

  1. 初始化中心点

中心点是一个集群的中心,但最初,数据点的确切中心是未知的,所以,我们选择随机的数据点,并将它们定义为每个集群的中心点。我们将在数据集中初始化3个中心点。

K-means clustering - centroid

K-均值聚类--中心点|来源:中国社会科学网。作者

  1. 将数据点分配给最近的聚类

现在, 中心点已被初始化,下一步是将数据点Xn分配给其最近的聚类中心点Ck

K-means clustering - assign data points

K-means聚类--分配数据点|来源:作者。作者

在这一步,我们将首先使用欧氏距离指标计算数据点X和中心点C之间的距离。

Euclidean Distance metric

然后为数据点选择数据点与中心点之间距离最小的聚类。

K-means clustering

K-means聚类法|来源:中国社会科学网。作者

  1. 重新初始化中心点

接下来,我们将通过计算该簇所有数据点的平均值来重新初始化中心点。

Re-initialize centroids

K-means clustering

K-means聚类|来源:作者。作者

  1. 重复步骤3和4

我们将不断重复第3和第4步,直到我们有了最佳的中心点,并且数据点分配到正确的聚类中不再改变。

K-means clustering

K-means聚类|来源:作者。作者

这个迭代过程听起来是不是很熟悉?好吧,K-means遵循与Expectation-Maximization(EM)相同的方法。EM是一种迭代方法,用于寻找机器学习模型取决于未观察到的特征的参数的最大似然。这种方法包括两个步骤:期望(E)和最大化(M),并在这两个步骤之间进行迭代。

对于K-means来说,Expectation(E)步骤是将每个数据点分配到最有可能的集群中,Maximization(M)步骤是使用最小平方优化技术重新计算中心点。

中心点初始化方法

初始中心点的定位可能具有挑战性,目的是使中心点的初始化尽可能地接近实际中心点的最优值。建议使用一些策略来定义初始中心点,因为它直接影响整个运行时间。传统的方法是随机选择中心点,但也有其他方法,我们将在本节中介绍。

  • 随机数据点

这是初始化中心点的传统方法,随机选择K个数据点并定义为中心点。正如我们在上面的例子中所看到的,在这种方法中,数据集中的每个数据实例都必须被枚举出来,并且必须保持每个属性的最小/最大值的记录。这是一个耗时的过程;随着数据集复杂性的增加,实现正确中心点或正确聚类的步骤也会增加。

  • 天真分片

分片中心点初始化算法主要取决于数据集中某个特定实例或行的所有属性的复合和值。这个想法是计算综合值,然后用它来对数据的实例进行排序。一旦数据集被排序,它就会被水平地划分为k个分片。

Sorting by composite value and sharding

通过综合值和分片进行排序 |来源

最后,每个分片的所有属性将被加总,并计算其平均值。分片属性均值集合将被确定为可用于初始化的中心点集合。

Centroid attribute values

中心点属性值|来源

使用分片的中心点初始化发生在线性时间内,结果执行时间比随机中心点初始化要好很多。

  • K-means++

K-means++是K-mean算法的一种智能中心点初始化方法。其目的是通过随机分配第一个中心点,然后根据最大平方距离选择其余的中心点来分散初始中心点。这个想法是将中心点尽可能地推远。

以下是使用K-means++初始化中心点的简单步骤。

  1. 随机挑选第一个中心点(C1)。
  2. 计算所有数据点与所选中心点之间的距离

The distance between all data points and the selected centroid.

这表示一个数据点xi与最远的中心点Cj的距离。

  1. 将数据点xi初始化为新的中心点
  2. 重复第3和第4步,直到找到所有定义的K个聚类。

在Python中实现K-Means聚类法

现在你已经熟悉了聚类和K-means算法,是时候用Python实现K-means了,看看它是如何在真实数据上工作的。

我们将在Mall Visitors数据集上工作,创建客户细分,以确定营销策略。商场游客的样本数据集可以在Kaggle上找到,它总结了大约2000名商场游客的消费情况。

让我们清理、探索和准备数据,以便在下一阶段对客户进行细分。

加载数据并检查是否有遗漏值。

import

Implementing K-Means clustering in Python.

购物中心访客数据集|来源

Implementing K-Means clustering in Python.

购物中心访客数据集作者

我们将使用年收入消费分数来寻找数据中的聚类。消费得分从1到100,是根据客户行为和消费性质分配的。

从头开始实施K-Means

有一些开源库为不同类型的聚类算法提供了函数,但在使用这些开源代码只是调用一个函数之前,必须了解这些函数是如何工作的。在本节中,我们将使用随机中心点初始化方法从头开始构建一个K-means聚类算法。

让我们看一下数据,看看它是如何分布的。

plt.scatter(customer_data[

Implementing K-Means from scratch

从头开始实现K-Means |来源:中国新闻网。作者

从上面的散点图中,我们很难说出数据集中是否有任何模式。这就是聚类的帮助所在。

首先,我们将随机地初始化中心点。

K=

Implementing K-Means from scratch

*从头开始实施K-Means

接下来,我们将遍历每个中心点和数据点,计算它们之间的距离,找到K个聚类,并将数据点分配给一个重要的聚类。这个过程将持续到以前定义的中心点和当前中心点之间的差异为零。

diff = 
-27.971469513699734

现在,如果我们将查看数据集,所有的数据点都应该被相应地聚类。

color=[

Implementing K-Means from scratch

从头开始实施K-Means | 来源:中国新闻网作者

使用Scikit-Learn实现K-means

这是相当多的代码,该算法可能还需要一些优化来提高其运行时间。为了避免增强算法并重新编写,我们可以使用开源的库函数。Scikit Learn有一个聚类包,其中包括一个K-means函数,它经过了优化,在研究人员中非常流行。

可能是有用的

看看在使用Scikit-Learn时,你如何能[跟踪你的分类器、回归器和K-means聚类的结果]

首先,我们将导入K-Means函数,然后通过传递聚类的数量作为参数来调用该函数。

from

就这样,你的聚类数据已经准备好了。让我们再看看这些数据。

labels_sample = km_sample.labels_
customer_data[

Implementation using Scikit-Learn

*使用Scikit-Learn实现|来源。作者
*

我们能够创建客户细分,只需使用Scikit-Learn的几行代码就可以了。虽然对于这个特定的数据集,你可以看到最终的聚类数据在两种实现方式中都是一样的。但是,通过这个细分,我们对商场的顾客了解到了什么:

标签0:储蓄者,收入一般到高,但消费明智

标签1 :无忧无虑,收入低,但消费能力强

标签2 :花钱的人,收入一般到高,花钱的人

当我们第一次绘制数据时,这很难理解,但现在我们知道我们有这3个类别,商场管理层可以相应地应用营销策略,例如,他们可能为标签0:储蓄者群体提供更多的储蓄优惠,并为标签2:大额消费者开设更有利可图的商店。

如何选择K?

有些因素会对K-means聚类算法的最终输出效果提出挑战,其中之一就是最终确定聚类的数量(K)。选择较少的聚类数量会导致欠拟合,而指定较多的聚类数量则会导致过拟合。不幸的是,没有明确的方法来找到最佳数量。

最佳的聚类数量取决于相似度量和用于聚类的参数。所以,为了找到数据中的聚类数量,我们需要对一系列的值运行k-means聚类,并比较结果。目前,我们没有任何方法来确定准确的集群K值,但我们可以用一些技术来估计这个值,包括交叉验证法、肘部法、信息准则、剪影法和G-means算法。

肘部法

距离指标是常用的指标之一,用于比较不同K值的结果。当聚类的数量K增加时,从中心点到数据点的距离将减少,并将达到K与数据点数量相同的程度。这就是我们一直在使用中心点距离平均值的原因。在肘部方法中,我们绘制平均距离,并寻找下降率发生变化的肘部点 。这个肘点可以用来确定K。

"该 弯头法 是一种启发式方法,用于确定数据集中的聚类数量。该方法包括将解释的变化作为聚类数量的函数来绘制,并选择曲线的弯头作为使用的聚类数量。"-

肘点在数学优化中被用作一个分界点,以决定在哪一点上收益递减不再值得增加成本。同样,在聚类中,当增加一个聚类不能改善建模的结果时,这被用来选择一个聚类的数量。这是一个迭代的过程,K-均值聚类将在数据集上进行,K的取值范围如下。

  1. 用所有的K值进行K-均值聚类。对于每个K值,我们计算所有数据点到中心点的平均距离。
from
  1. 绘制每一个点,并找到平均距离突然下降的那一点(肘部)。
# Plot the elbow

Elbow method

肘部方法|来源 "作者

这可能是确定最优集群数量的最流行的方法。虽然找到肘部点是一个挑战,因为在实践中可能不会有一个尖锐的肘部。

剪影法

寻找肘点在实践中很有挑战性,但还有其他技术来确定K的最佳值,其中之一就是剪影得分法。

"Silhouette指的是一种解释和验证数据群组内一致性的方法。该技术提供了一个简洁的图形表示,说明每个对象的分类情况如何"。-

廓形系数是通过检查一个数据点在一个簇内与其他簇的相似程度来衡量簇的质量。[廓形分析]可以用来研究所产生的聚类之间的距离。这个离散的衡量标准在-1和1之间:

+1表示数据点离邻近的聚类很远,因此是最佳位置。

0表示它在两个相邻聚类之间的决策边界上或非常接近。

-1表示该数据点被分配到了错误的聚类。

为了找到聚类数目K的最佳值,我们使用剪影图来显示一个聚类中的每个点与相邻聚类中的一个点的接近程度,从而提供一种直观地评估聚类数目等参数的方法。让我们来看看它是如何工作的。

  1. 计算K-均值聚类算法的数值范围。
  2. 对于每个K值,找出数据点的平均剪影分数。
from
  1. 绘制每个K值的剪影分数的集合图
  2. 当剪影分数最大时,选择聚类的数量。
plt.plot(range_n_clusters,sil_avg,

Elbow method

肘部方法|来源 "作者

利用上述剪影分析,我们可以选择K的最佳值为3,因为平均剪影分数较高,说明数据点的位置是最合适的。

聚类评价指标

在聚类中,我们没有任何标记的数据,只有一组特征,目的是为了获得这些特征的高群内相似度和低群间相似度。评估任何聚类算法的性能都不像在监督学习中那样容易计算错误数或找到精度或召回率。这里我们根据数据点之间的相似性或不相似性来评估结果。

在上一节中,我们看到了距离度量和剪影分数是如何帮助找到K的最佳值的。因此,对于参数聚类算法来说,许多这样的评价指标也可以用来找到最佳的聚类点。聚类算法只有在你的相似性度量中才是最好的。因此,我们需要确保使用适当的相似性度量。一种方法是对你的措施进行实验,确定哪种算法可以提供更准确的相似性。

"在理论上,聚类研究者已经获得了聚类评价的直觉,但在实践中,一方面是大量的数据,另一方面是数据表示和聚类算法的微妙细节,使得直觉判断成为不可能。"-

目前有几个聚类评价指标,并不断发展,以帮助研究人员进行聚类。在本节中,我们将讨论一些最常见和最流行的指标。

邓恩指数

邓恩指数是用来识别密集和分离良好的群体的。它是最小群组间距离和最大群组内距离之间的比率。邓恩指数的计算方法如下。

Dunn index

这里d(i,j)是群组ij之间的距离,是所有群组间距离的最小值,d(k)是群组k的群组内距离,是所有群组内距离的最大值。创建邓恩指数高的聚类的算法是比较理想的,因为那样的话,聚类会更加紧凑,彼此之间的差异也会更大。

剪影得分

平均剪影分数也被用来作为聚类的一个评价指标。最好的剪影分数是1,最差的是-1。接近零的数值表示数据点在边界上,即与聚类重叠。

F-度量

F-measure适用于配对的精确度和召回率,并通过权衡召回率来平衡假阴性。

F-Measure

在聚类中,常见的方法是将F-Measure应用于配对的精确度和召回率,这被称为配对计数F-Measure。我们可以用下面的公式来计算F-measure。

F-Measure

这里𝜷的选择是,召回率被认为是精度的𝜷倍。当我们把𝜷设置为1时,它将是精度和召回率的谐波平均值。我们为每个给定的类别计算集群的召回率和精确度,即应该为对象提供一组类别。

Rand指数

Rand指数可以用来计算聚类与基准的相似程度。Rand指数的值可以用以下公式计算出来。

Rand index

这里TP是真阳性的数量,TN是真阴性的数量,FP是假阳性的数量,FN是假阴性的数量。通过这个评价指标,我们可以计算正确的成对分配的数量。

TP是在预测分区中和在地面真实分区中聚在一起的数据点对的数量,FP是在预测分区中聚在一起但在地面真实分区中没有聚在一起的数据点对的数量。

要了解更多的评估指标,你可以查看scikit learn聚类性能评估指标页面。

GMM(高斯混合模型)与K-means聚类算法的对比

识别整体人群中拥有聚类的概率的概率模型被认为是混合模型。K-means是快速和简单的聚类方法,但有时它不能捕捉到内在的异质性。

高斯混合模型(GMM)可以识别复杂的模式,并将它们聚集在一起,这是对数据集内真实模式的一种接近的表述。

GMM简介

实践中的无监督数据可能包含高度分散的数据点,要把这些数据点管理到不同的聚类中去可能很困难。高斯混合模型(GMM)初始化了一定数量的高斯分布,其中每一个都代表一个聚类。在GMM中,我们倾向于将类似的数据点归入一个分布。

在高斯分布中,我们试图将数据点放在钟形曲线下,所有在钟形曲线下的数据点都是高度相关的,可以一起形成一个聚类。钟形曲线的峰值表示数据点的平均值。GMM是基于K个独立的高斯分布,用于对K个聚类进行建模。

Clustering using GMM

使用GMM进行聚类|Soure

假设在一个数据集中,有三组不同的数据点遵循高斯分布,这意味着会有三条钟形曲线。GMM将确定数据点处于这些分布中任何一个的概率。GMM的概率函数可以定义为。

Introduction to GMM

𝝁是d维平均向量
𝚺是高斯的dxd协方差矩阵

d是特征的数量
X是数据点的数量

GMM模型适合一个生成模型,它为数据集提供了一个概率分布。为了避免过拟合或欠拟合,我们将不得不通过使用交叉验证法或Akaike信息准则(AIC)和贝叶斯信息准则(BIC)方法评估模型的似然性来找到最佳分布数量。

GMM与K-means聚类算法的对比以及K-means为何如此受欢迎

  • GMM使用概率分布,K-means使用距离度量来计算数据点之间的差异,将数据隔离到不同的聚类中。

  • GMM是一种软聚类算法,从某种意义上说,每个数据点被分配到一个具有一定不确定性的聚类中,例如,你可以在上面的图片中看到,一些数据点有非常高的概率属于一个特定的高斯,而一些点则处于两个高斯之间。这意味着,一个数据点可以属于一个以上的集群,即以70/30的比例分布在两个集群中。

  • 在寻找不同大小、形状和密度的聚类时,K-means可能表现不佳。例如,用K-means对椭圆分布的数据进行聚类可能会失败,因为它更适合于圆形分布。在这种情况下,使用GMM是有意义的。

然而,K-means发现数据点的分组所需的时间比GMM发现高斯成分的时间要少得多。K-均值很受欢迎,因为它很容易应用并且收敛很快。它可以在没有任何关于数据工程过程的假设下使用。由于K-means的简单性和效率,它也被用于图像分割,并且它的结果比更复杂的深度神经网络算法更有竞争力。

"K-means是一个合理的默认选择,至少在你发现聚类步骤是你在整体性能方面的瓶颈之前。"-

应用与用例

K-means可以应用于维数较少的数据集、数字和连续数据。它适用于要将随机分布的数据点分组的场景。下面是一些可以轻松使用K-means的有趣用例。

  • 客户细分

***"***客户细分是将一个公司的客户划分为反映每组客户之间相似性的群体的做法"。- [优化]

满足客户的需求是关系营销的起点,通过了解所有的客户都不一样,同样的报价可能对所有人都不适用,可以改善关系营销。根据客户的需求和行为对客户进行细分,可以帮助公司更好地将其产品推销给合适的客户。例如,电信公司有大量的用户,利用市场或客户细分,公司可以进行个性化的宣传和奖励等。

  • 欺诈检测

互联网和在线服务的不断发展,引起了人们对安全的关注。对这些安全威胁或欺诈活动的核算,例如,从一个不寻常的城市登录囚禁到Instagram账户或隐藏任何形式的金融不当行为,在目前是很普遍的。

使用K-means聚类等技术,人们可以很容易地识别任何异常活动的模式。检测到一个异常点就意味着发生了欺诈事件。

  • 文件分类

K-Means以其在大数据集情况下的高效性而闻名,这就是为什么它是对文件进行分类的最佳选择之一。根据主题、内容和标签(如果有的话)将文件聚类为多个类别。文件将被转换为矢量格式。然后,我们使用术语频率来确定共同的术语,在此基础上,我们可以确定文档组的相似性。

  • 地理空间分析

"户外环境声学环境可以通过机器学习来预测,使用地理空间特征作为输入。然而,收集足够的训练数据是一个昂贵的过程,特别是在试图提高基于监督学习方法的模型在大的、地理空间多样化区域的准确性时"。- [地理空间模型]

由于这些监督算法的限制,我们需要使用非监督算法,如K-均值聚类,我们可以通过对数据进行聚类,轻松地比较地理多样性。

  • 图像分割

使用K-means,我们可以在图像像素中找到模式,这将使处理速度更快,并以更有效的方式。在计算图像的每个像素与中心点之间的差异后,它被映射到最近的集群中。在最终的输出中,聚类将有类似的像素被分组在一起。

K-means聚类算法的优点

  • 相对容易理解和实现。
  • 可扩展到大型数据集。
  • 更好的计算成本。
  • 很容易启动中心点的分配和位置。

K-means聚类算法的缺点

  • 手动选择K并依赖于初始值
  • 对不同的K值缺乏一致的结果
  • 总是试图寻找圆形聚类
  • 由于数据集中的异常值,中心点会被拖动
  • 维数的诅咒,当维数增加时,K是无效的。

最后的思考

在这篇文章中,我们讨论了最流行的聚类算法之一。我们首先了解了k-means的概况以及它是如何工作的,后来我们按照同样的步骤从头开始并通过sklearn来实现它。我们还研究了与它相关的各种指标和挑战,以及它的替代品。

我们还看到,K-means真的很容易理解,并且可以快速提供训练结果。然而,它的性能可能会因为数据的轻微变化而受到影响。集群被假定为球形且大小均匀,这可能会降低K-means聚类的准确性。