K-均值聚类算法

 K-均值聚类算法

K-均值聚类是机器学习中常用的无监督学习算法之一,主要应用于数据分类、数据分析和数据挖掘等领域。

K-均值聚类算法的基本思想是将样本集合划分为 K 个不同的簇,使得簇内的样本相似度高,簇间的相似度低。具体实现过程如下:

1. 选择 K 个初始的聚类中心点。
2. 对于每个样本点,计算其与各个聚类中心的距离,将其划分到距离最近的簇中。
3. 对于每个簇,重新计算其中样本的中心点。
4. 重复步骤 2 和步骤 3 直到聚类中心点不再变化或达到预设的最大迭代次数。

在算法的执行过程中,可以采用多种距离度量方法,如欧氏距离、曼哈顿距离等。还可以使用不同的初始化方法,例如随机选取初始簇中心、基于数据分布的初始簇中心等。

欧氏距离计算

K-均值聚类算法的优点:

1. 简单、易于实现:K-均值聚类算法不需要预先知道样本的类别标签,只需要选择 K 值,即可以在未知标签的情况下对数据进行分类。
2. 易于扩展:K-均值聚类算法可以处理大规模数据,并且可以方便地添加新的聚类中心点和样本数据。
3. 易于理解:K-均值聚类算法的可视化结果直观,可以直观地观察到簇与簇之间的区别。

K-均值聚类算法也存在一些缺点:

1. 对初始点的敏感性:初始点的选择会影响最终的聚类结果。不同的初始点可能导致不同的结果。
2. 只能处理凸形数据:K-均值聚类算法只能处理凸形的数据簇,对于非凸形数据簇的聚类效果可能不尽人意。
3. K 值的选择问题:K 值的选择需要根据实际情况进行权衡,如果选择不当,可能导致聚类结果不理想。。

为了改进K-均值聚类算法的局限性,还可以尝试使用其他聚类算法,如层次聚类、密度聚类等,或结合其他特征选择和降维方法,以提高聚类结果的质量和准确性。

K-均值聚类算法代码 

import numpy as np

def kmeans(X, K, max_iters=100):
    # 初始化随机选择的簇中心
    centers = X[np.random.choice(range(len(X)), K, replace=False)]

    for _ in range(max_iters):
        # 分配数据点到最近的簇中心
        labels = np.argmin(np.linalg.norm(X[:, np.newaxis] - centers, axis=-1), axis=-1)

        # 更新簇中心为簇内数据点的均值
        new_centers = np.array([X[labels == k].mean(axis=0) for k in range(K)])

        # 如果簇中心不再发生变化,停止迭代
        if np.all(centers == new_centers):
            break

        centers = new_centers

    return labels, centers

# 示例用法
X = np.array([[1, 3], [1, 4], [2, 4], [5, 1], [5, 2], [6, 1]])
K = 2

labels, centers = kmeans(X, K)
print("Cluster labels:", labels)
print("Cluster centers:", centers)

参考

【1】机器学习核心算法编程实例.丁伟雄著

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子虚先生√

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值