【Python】深入了解聚类:从原理到实践


听说你 为她做的

件件是我 曾经求而不得

我够不着的烟火

偏偏降落 在别人窗口

那晚的风

吹到今天都还未凉透

才松开手

你却已握紧别的温柔

🎵 杨宗纬/于文文《听说你》


在数据科学和机器学习领域,聚类(Clustering)是一种重要的无监督学习方法。它通过将数据集划分为若干组(簇),使得同一组内的数据点具有较高的相似性,而不同组之间的数据点相似性较低。聚类广泛应用于图像处理、市场营销、社交网络分析等领域。本文将介绍聚类的基本原理、常见算法、评估方法以及应用实例。

什么是聚类?

聚类是一种将数据点分组的技术,其目标是最大化组内数据点的相似性,最小化组间数据点的相似性。与监督学习不同,聚类不依赖于已标记的数据,而是根据数据本身的特征进行分组。

聚类的基本原理

聚类的基本原理可以简单概括为:

距离度量:聚类依赖于某种距离度量(如欧氏距离、曼哈顿距离)来衡量数据点之间的相似性。

中心点:一些聚类算法(如 K-Means)通过反复计算簇的中心点和重新分配数据点来迭代收敛。

簇:一个簇是一组相似的数据点。在聚类过程中,数据点根据距离度量被分配到最相似的簇中。

常见的聚类算法

  1. K-Means 聚类:
  • 原理:将数据点分为 K 个簇,每个簇由一个中心点(质心)代表。通过迭代优化,使得每个数据点到其簇中心的距离之和最小。
  • 步骤:
    • 随机初始化 K 个中心点。
    • 分配每个数据点到最近的中心点形成簇。
    • 重新计算每个簇的中心点。
    • 重复步骤 2 和 3,直到中心点不再变化。
    • 优点:简单易实现,计算效率高。
    • 缺点:需要预先指定 K 值,对初始值敏感。
  1. 层次聚类:

    • 原理:通过构建层次结构的聚类树(树状图)来进行聚类,可分为自下而上(凝聚层次聚类)和自上而下(分裂层次聚类)。
    • 步骤:
    • 将每个数据点视为一个独立的簇。
    • 找到最近的两个簇并合并成一个新簇。
    • 重复步骤 2,直到所有数据点都在一个簇中。
    • 优点:不需要预先指定簇数,适合小数据集。
    • 缺点:计算复杂度高,不适合大数据集。
  2. DBSCAN(Density-Based Spatial Clustering of Applications with Noise):

    • 原理:基于密度的聚类方法,通过在数据空间中找到密度较高的区域形成簇。
    • 步骤:
    • 找到密度足够高的数据点作为核心点。
    • 将与核心点相邻的数据点归入同一个簇。
    • 重复步骤 2,直到所有核心点处理完毕。
    • 优点:可以发现任意形状的簇,能够自动处理噪声数据。
    • 缺点:需要设置两个参数(密度阈值和最小样本数),对参数敏感。

聚类结果的评估方法

  1. 轮廓系数(Silhouette Coefficient):

    衡量数据点在其簇中的紧密程度以及与其他簇的分离程度。

    范围:-1, 1,值越大表示聚类效果越好。

  2. 聚类内距离(Within-Cluster Sum of Squares, WCSS):

    衡量簇内数据点到簇中心的距离之和。

    值越小表示聚类效果越好。

  3. 轮廓分析(Silhouette Analysis):

    可视化每个簇的轮廓系数分布,帮助选择最佳簇数。

    聚类的应用实例

  4. 客户细分:

    聚类可以用于市场营销中的客户细分,根据客户的购买行为、偏好等数据将客户分为不同的群体,以便进行针对性的营销策略。

  5. 图像分割:

    在图像处理领域,聚类可以用于图像分割,将图像中的像素点根据颜色、纹理等特征分为不同的区域。

    社交网络分析:

聚类可以用于社交网络中的社区发现,通过分析用户之间的互动数据,将用户分为不同的社区。

实践:使用 Python 进行聚类分析

下面是一个使用 Python 进行 K-Means 聚类的示例:

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# 加载数据集
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

# 选择特征进行聚类
X = df[['sepal length (cm)', 'sepal width (cm)']]

# 使用 K-Means 进行聚类
kmeans = KMeans(n_clusters=3, random_state=42)
df['cluster'] = kmeans.fit_predict(X)

# 计算轮廓系数
score = silhouette_score(X, df['cluster'])
print(f'Silhouette Score: {score:.2f}')

# 可视化聚类结果
plt.scatter(X['sepal length (cm)'], X['sepal width (cm)'], c=df['cluster'], cmap='viridis')
plt.xlabel('Sepal Length (cm)')
plt.ylabel('Sepal Width (cm)')
plt.title('K-Means Clustering')
plt.show()

结论

聚类是数据科学中的一种重要工具,通过将数据点分组,可以帮助我们发现数据中的隐藏模式和结构。本文介绍了聚类的基本原理、常见算法、评估方法以及应用实例。希望通过这篇文章,读者能够更好地理解聚类,并在实际项目中应用这一强大的技术。

相关推荐
小江的记录本6 小时前
【JVM虚拟机】垃圾回收GC:四种引用类型:强引用、软引用、弱引用、虚引用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
墨神谕6 小时前
人工智能(三)— 神经网络的训练
人工智能·神经网络·机器学习
APIshop6 小时前
Python 获取 1688 商品采集 API 接口 | 工厂货源自动化对接商品信息 | 无需选品
运维·python·自动化
deepin_sir6 小时前
10 - 函数
开发语言·python
charlee447 小时前
《GIS基础原理与技术实践》配套案例(Python版)
python·conda·numpy·gis·环境配置
枫叶林FYL7 小时前
项目十:事件溯源仓储管理系统(WMS)仿真实现
开发语言·python
忆~遂愿8 小时前
《大模型驱动软件测试》| 软件工程3.0时代,大模型驱动测试实战指南
人工智能·深度学习·神经网络·机器学习·自然语言处理·软件工程·知识图谱
渣渣xiong9 小时前
从零开始:前端转型AI agent直到就业第五十七天-第五十八天
前端·人工智能·python
小L~~~10 小时前
基于贪心策略的混合遗传算法求解01背包问题
python·算法