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

结论

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

相关推荐
Wen.py.java15 分钟前
Python商务数据分析知识专栏(六)——Python数据分析的应用④Python数据分析实训
人工智能·python·数据分析
不死鸟.亚历山大.狼崽子17 分钟前
python库(2):Passlib库
开发语言·python
Zucker n33 分钟前
学会python——用python制作一个登录和注册窗口(python实例十八)
开发语言·python
pictoexcel42 分钟前
名片批量转换为结构化Excel注意的事项
人工智能·深度学习·神经网络·机器学习·ocr·excel
Eiceblue1 小时前
Python 插入、替换、提取、或删除Excel中的图片
开发语言·vscode·python·pycharm·excel
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(003)
开发语言·ide·python·pandas·基础知识·学习和成长·标准库及第三方库
Leon哉1 小时前
PyCharm中如何将某个文件设置为默认运行文件
ide·python·pycharm
wenpingyang2 小时前
python学习2-数据结构与算法-链表
python·学习·链表
孤寒者2 小时前
(三十一)Flask之wtforms库【剖析源码下篇】
后端·python·flask·源码剖析·wtforms
milong5212 小时前
Flask自定义命令
后端·python·flask