K-均值聚类算法:机器学习的“小白鼠“

K-均值聚类(K-Means Clustering)。作为一种无监督学习算法,K-均值聚类可以自动将相似的数据点归为一类,而无需事先标注数据,在数据挖掘、客户细分、图像分割等领域有广泛应用。下面就让我们一起来了解K-均值算法的基本原理、优缺点以及Python实现吧。

一、K-均值聚类的基本原理

K-均值聚类的核心思想很简单:将 n 个数据点划分到 k 个聚类中,使得每个聚类内数据点到聚类中心的距离平方和最小。其中,k 需要预先设定。算法流程如下:

  1. 随机选择 k 个数据点作为初始聚类中心
  2. 重复下面步骤,直到聚类结果不再变化:
    a. 对每个数据点,计算到 k 个聚类中心的距离,并将其分配到距离最近的聚类
    b. 更新每个聚类的中心为该聚类内所有点的均值

在这里插入图片描述

二、Python实现K-均值聚类

利用sklearn库,我们可以很容易实现K-均值聚类:

from sklearn.cluster import KMeans
import numpy as np

# 随机生成样本数据
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])

# 设置聚类数为2,进行聚类
kmeans = KMeans(n_clusters=2) 
kmeans.fit(X)

# 聚类结果
print(kmeans.labels_)    
print(kmeans.cluster_centers_)

输出:

[0 0 1 1 0 1]
[[1.16666667 1.46666667]
 [7.33333333 9.        ]]

可以看到,算法将6个点聚成2类,每一类的中心点坐标也被计算出来了。我们还可以用matplotlib将结果可视化:

import matplotlib.pyplot as plt

plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='rainbow')  
plt.scatter(kmeans.cluster_centers_[:,0], kmeans.cluster_centers_[:,1], color='black')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

三、K-均值优缺点分析

优点:

  1. 原理简单,实现容易,收敛速度快
  2. 当聚类数k较小,样本分布均匀时,聚类效果不错
  3. 适合发现近似圆形的紧凑聚类

缺点:

  1. 需要预先确定聚类数k,实际应用中k难以估计
  2. 对噪声和异常点敏感,少量的异常点可能显著影响聚类结果
  3. 容易收敛到局部最优,聚类结果依赖于初始聚类中心的选择
  4. 只适合发现球形聚类,对于其他形状分布的数据聚类效果较差

四、改进方法

针对K-均值的缺点,学者们提出了多种改进算法,例如:

  1. K-Means++算法,优化初始聚类中心的选择,提高聚类质量
  2. Mini Batch K-Means,通过小批量梯度下降优化,提高聚类效率
  3. Bisecting K-Means算法,先对所有点做2-均值聚类,再递归地对每个聚类进行2-均值,直到达到k个聚类,克服陷入局部最优的问题

此外,为了寻找最优聚类数k,常用的方法有手肘法和轮廓系数法等。由于K-均值难以发现非凸形状聚类,人们又发展了密度聚类、谱聚类等算法。

K-均值聚类是一种简单实用的无监督学习利器。尽管存在一些局限性,但通过合理的改进和调优,依然可以很好地服务于各类聚类任务。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

芝士AI吃鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值