聚类算法及其在机器学习中的应用

聚类算法是一种无监督的机器学习技术,它将未标记的数据集分组,使得同一组内的数据点相似度高,而不同组之间的相似度低。简而言之,聚类算法旨在形成数据点的子集或组,这些数据点彼此非常相似,而形成的组或子集或聚类可以明显地区分开。

聚类算法的实际应用

假设有一个数据集,对其一无所知。聚类算法可以发现对象组,其中每个聚类成员/数据点之间的平均距离比与其他聚类成员/数据点的距离更近。以下是聚类算法在现实生活中的一些实际应用:

  • 客户细分:在大型客户数据库中找到具有相似行为的客户组。
  • 网络流量分类:将流量源的特征组合在一起,可以轻松使用聚类进行分类。
  • 电子邮件垃圾邮件过滤器:通过查看不同的部分(标题、发件人和内容)对数据进行分组,然后可以帮助分类哪些是垃圾邮件。
  • 城市规划:根据地理位置、价值和房屋类型对房屋进行分组。

不同类型的聚类算法

以下是一些常见的聚类算法:

  • K-means聚类:通过这个算法,可以通过预定数量的聚类或“k”聚类来分类给定的数据集。
  • 层次聚类:有两种方法,分裂和聚合。聚合方法将每个观测视为一个单独的聚类,然后组合相似的数据点,直到合并成一个单一的聚类;分裂方法则相反。
  • 模糊C均值聚类:FCM算法的工作方式与k-means聚类算法几乎相同,主要区别在于FCM中一个数据点可以放入多个聚类中。
  • 基于密度的空间聚类:在需要非线性聚类结构的应用领域中非常有用,完全基于密度。

K-means聚类算法详解

K-means聚类是一种无监督学习算法,用于将未标记的数据集分组成不同的聚类/子集。“k”定义了在聚类过程中需要创建的预定义聚类的数量,例如,如果k=2,将有两个聚类;对于k=3,将有三个聚类,依此类推。作为一个基于质心的算法,“均值”在k-means聚类中与数据点的质心有关,每个聚类都与一个质心相关联。

K-means聚类算法主要执行两个任务:确定K个中心点或质心的最优化值,通过重复过程;将每个数据点分配给最近的k中心。聚类是通过将数据点分配给特定的k中心来创建的。

假设有两个变量X1和X2,以下是散点图的步骤:

  1. 取k的值为预定义聚类的数量,这里分组数据为2个聚类(k=2)。随机选择k个点来形成聚类,对随机k点的选择没有限制,可以从数据内部和外部选择。
  2. 下一步是将数据集中的每个数据点分配给最近的k点,这是通过计算每个点与k点之间的欧几里得距离并绘制两个质心之间的中位线来完成的。
  3. 为了找到最近的点,重复这个过程,选择新的质心。为了选择新的质心,将计算这些质心的重心,并如下找到新的质心。
  4. 现在,需要重新将每个数据点分配给新的质心。为此,重复相同的过程,找到中位线。

将继续寻找新的质心,直到没有不相似的点在线条的两侧。现在可以移除假设的质心,最终的两个聚类将如下所示。

K-means聚类算法的性能高度依赖于它形成的聚类。选择最优的聚类数量是一项困难的任务。有多种方法可以找到最优的聚类数量,但这里讨论两种方法来找到聚类的数量或K值,即肘部法则和轮廓系数。

肘部法则是寻找最优聚类数量的最流行方法之一,该方法使用WCSS(聚类内平方和)来计算聚类内的总变化。

WCSS = ∑(Pi in Cluster1)(distance(Pi, C1))^2 + ∑(Pi in Cluster2)(distance(Pi, C2))^2 + ∑(Pi in Cluster3)(distance(Pi, C3))^2

在上述公式中,∑(Pi in Cluster1)(distance(Pi, C1))^2是每个数据点与其质心在Cluster1内的平方距离之和,其他两个项同理。

肘部法则的步骤包括:

  • 对不同的k值(从1到10)执行K-means聚类。
  • 为每个聚类计算WCSS。
  • 在WCSS值和聚类数量k之间绘制曲线。
  • 曲线的尖锐弯曲点或看起来像手臂的点被认为是K的最佳值。

例如,可以看到在k=3时有一个尖锐的弯曲,因此最优的聚类数量是3。

轮廓值是衡量一个对象与其自身聚类(凝聚力)相比其他聚类(分离度)的相似度的指标。轮廓值范围从-1到+1,高值表示对象与其自身聚类匹配良好,与邻近聚类匹配度低。如果大多数对象具有高值,则聚类配置适当。如果许多点具有低值或负值,则聚类配置可能聚类过多或过少。

  • 易于实现。
  • 与层次聚类相比,K-Means在变量数量大时可能计算速度更快(如果K值较小)。
  • K-Means可能比层次聚类产生更高的聚类。
  • 难以预测聚类数量(K值)。
  • 初始种子对最终结果影响很大。
# 导入所需的库 import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score # 读取数据并查看前5个观测值 # 此处省略了探索性数据分析(EDA)的代码,该数据已经过清洗,适合分析。 # 由于K-means仅对数值数据执行,因此选择数值列进行分析。 # 现在,为了执行K-means聚类,需要找到聚类数量K值,可以使用以下代码,这里使用多个K值进行聚类,然后使用肘部法则选择最佳K值。 # 随着聚类数量的增加,方差(聚类内平方和)会减少。在3或4个聚类时的肘部表示在最小化聚类数量和最小化每个聚类内的方差之间最节俭的平衡,因此可以选择K值为3或4。 # 使用轮廓值方法找到K值。 # 如果观察,得到在n=3时最优的聚类数量,因此最终选择k=3作为K值。 # 使用k=3的值拟合K-means算法,并为聚类绘制热图。
  • 聚类0 - 年轻客户短期低额信贷
  • 聚类1 - 中年客户长期高额信贷
  • 聚类2 - 老年客户短期中等额度信贷
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485