K-Means聚类算法

6.1 K-Means聚类算法

6.1.1 聚类

聚类(Clustering)是指将不同的对象划分成由多个对象组成的多个类的过程。由聚类产生的数据分组,同一组内的对象具有相似性,不同组的对象具有相异性。聚类待划分的类别未知,即训练数据没有标签。聚类属于非监督学习。

簇(cluster)是由距离邻近的对象组合而成的集合。聚类的最终目标是获得紧凑、独立的簇集合。一般采用相似度作为聚类的依据,两个对象的距离越近,其相似度就越大。

按照簇的定义和聚类的方式,聚类大致分为以下几种:K-Means为代表的簇中心聚类、基于连通性的层次聚类、以EM算法为代表的概率分布聚类、以DBSCAN为代表的基于网格密度的聚类,以及高斯混合聚类等。

6.1.2 K-Means聚类

K-Means聚类算法也称为K均值聚类算法,是典型的聚类算法。对于给定的数据集和需要划分的类数k,算法根据距离函数进行迭代处理,动态地把数据划分成k个簇(即类别),直到收敛为止。簇中心(cluster center)也称为聚类中心。

K-Means聚类的优点是算法简单、运算速度快,即便数据集很大计算起来也便捷。不足之处是如果数据集较大,容易获得局部最优的分类结果。而且所产生的类的大小相近,对噪声数据也比较敏感。

聚类的运算流程:

python 复制代码
随机选择 k个数据点 -> 起始簇中心

While数据点的分配结果发生改变:

     for数据集中的每个数据点p:

           for 循环访问每个簇中心c:

                 computer_distance(p,c)

                 将数据点p分配到最近的簇

     for 每一个簇:

           簇中心更新为簇内数据点的均值

聚类是一个反复迭代的过程,理想的终止条件是簇的分配和个簇中心不再改变。此外,也可以设置循环次数、变化误差作为终止条件。

聚类的运算流程可以简单示意为下图:

上图中在第三次迭代之后,分配方案和簇中心保持不变,算法结束

6.1.3聚类算法的性能评估

1.常见的聚类评价方法

大致3类:外部有效性评价、内部有效性评价和相对评价法。

  • 外部评价反映聚类结果的整体效果,常用的指标有F-measure指数,Rand指数和Jaccard系数等。
  • 内部评价是利用数据集的内部特征来评价,包括Dunn指数、轮廓系数等指标。
  • 相对评价法选定某个评价指标,然后为聚类算法设置不同的参数进行测试。根据测试结果选取最优的算法参数和聚类模式等,例如改进的Dunn指数等。
2.K-Means目标函数

假设数据集X包含n个数据点,需要划分到k个类。类中心为用集合U表示。聚类后所有数据点到各自聚类中心的差的平方和为聚类平方和用J表示,J值为:

聚类的目标就是使J值最小化。 如果在某次迭代前后,J值没有収生变化,则说明 簇的分配丌再収生变化,算法已经收敛。

6.2.4 代码示例(Python)

以下是一个使用 Python 实现 K-Means 聚类算法的简单示例:

python 复制代码
import numpy as np

def kmeans(data, k, max_iterations=100):
    n_samples, n_features = data.shape
    centroids = data[np.random.choice(n_samples, k, replace=False)]
    for _ in range(max_iterations):
        distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=2)
        labels = np.argmin(distances, axis=1)
        new_centroids = np.array([data[labels == i].mean(axis=0) for i in range(k)])
        if np.allclose(centroids, new_centroids):
            break
        centroids = new_centroids
    return labels, centroids

你可以使用以下方式调用这个函数:

python 复制代码
data = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
labels, centroids = kmeans(data, k=2)
print("Labels:", labels)
print("Centroids:", centroids)

在这个示例中,我们首先定义了一个kmeans函数,它接受数据集data、聚类数k和最大迭代次数作为参数。函数首先随机选择初始聚类中心,然后通过不断迭代分配样本和更新聚类中心的过程,直到聚类中心不再发生变化或达到最大迭代次数为止。最后,函数返回每个样本的聚类标签和最终的聚类中心。这只是一个简单的示例,实际应用中可能需要根据具体问题进行调整和优化。

相关推荐
Jasmine_llq17 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
ALINX技术博客17 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
易营宝17 小时前
多语言网站建设避坑指南:既要“数据同步”,又能“按市场个性化”,别踩这 5 个坑
大数据·人工智能
春日见17 小时前
vscode代码无法跳转
大数据·人工智能·深度学习·elasticsearch·搜索引擎
爱吃rabbit的mq17 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
Drgfd18 小时前
真智能 vs 伪智能:天选 WE H7 Lite 用 AI 人脸识别 + 呼吸灯带,重新定义智能化充电桩
人工智能·智能充电桩·家用充电桩·充电桩推荐
萤丰信息18 小时前
AI 筑基・生态共荣:智慧园区的价值重构与未来新途
大数据·运维·人工智能·科技·智慧城市·智慧园区
(❁´◡`❁)Jimmy(❁´◡`❁)18 小时前
Exgcd 学习笔记
笔记·学习·算法
盖雅工场18 小时前
排班+成本双管控,餐饮零售精细化运营破局
人工智能·零售餐饮·ai智能排班
神策数据18 小时前
打造 AI Growth Team: 以 Data + AI 重塑品牌零售增长范式
人工智能·零售