【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()

结论

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

相关推荐
xinxiyinhe33 分钟前
如何设置Cursor中.cursorrules文件
人工智能·python
若兰幽竹1 小时前
【机器学习】多元线性回归算法和正规方程解求解
算法·机器学习·线性回归
诸神缄默不语1 小时前
如何用Python 3自动打开exe程序
python·os·subprocess·python 3
橘子师兄1 小时前
分页功能组件开发
数据库·python·django
Watermelo6172 小时前
从DeepSeek大爆发看AI革命困局:大模型如何突破算力囚笼与信任危机?
人工智能·深度学习·神经网络·机器学习·ai·语言模型·自然语言处理
Logintern092 小时前
使用VS Code进行Python编程的一些快捷方式
开发语言·python
Multiple-ji2 小时前
想学python进来看看把
开发语言·python
liuyuzhongcc2 小时前
List 接口中的 sort 和 forEach 方法
java·数据结构·python·list
北_鱼2 小时前
支持向量机(SVM):算法讲解与原理推导
算法·机器学习·支持向量机
鸟哥大大3 小时前
【Python】pypinyin-汉字拼音转换工具
python·自然语言处理