当前位置: 代码网 > it编程>前端脚本>Python > 【Python】深入了解聚类:从原理到实践

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

2024年08月05日 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 聚类的示例:

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

结论

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com