【阿旭机器学习实战】【17】KMeans聚类算法中如何选择合适的聚类个数K

简介: 【阿旭机器学习实战】【17】KMeans聚类算法中如何选择合适的聚类个数K

KMeans聚类算法中如何选择合适的聚类个数?


问题描述


我们随机生成一些二维点的数据,然后通过不同的K值对其进行分类评估。

具体步骤:


  1. 随机生成一些二维点
  2. 选取不同的K值进行模型训练,并计算轮廓系数
  3. 画出K值与轮廓关系的折线图,看取哪一个K值合适


1. 随机生成二维数据点


import numpy as np
x1 = np.random.randint(1,10,size=14)
x2 = np.random.randint(1,10,size=14)
• 1
• 2
x = np.c_[x1,x2]
x


array([[6, 5],
       [3, 6],
       [4, 4],
       [2, 9],
       [1, 8],
       [1, 5],
       [1, 7],
       [7, 4],
       [3, 7],
       [2, 2],
       [2, 8],
       [6, 5],
       [3, 2],
       [6, 4]])
# 画出这些点的散点图
plt.scatter(x1,x2)

d5389c3a8f124f8c835beacf8cc2810b.png


2. 定义不同聚类中心个数对点进行分类


# 定义出若干种聚类的个数
clusters = [2,3,4,5,8]


plt.figure(figsize=(8*2,3*3))
# 定义一个列表用于存储轮廓系数
sil_scores = []
# 定义一个变量,用于记录当前是第几个图
sub_center = 1
axes = plt.subplot(231)
axes.scatter(x1,x2)
axes.set_title("Instances")
for cluster in clusters:
    km = KMeans(n_clusters=cluster).fit(x)
    # 打印每种聚类划分的标签
    print(km.labels_)
    # 求每一次划分的轮廓系数
    sil_score = metrics.silhouette_score(x,km.labels_)
    sil_scores.append(sil_score)
    # 画图
    sub_center += 1
    axes = plt.subplot(2,3,sub_center)
    axes.scatter(x1,x2,c=km.labels_)
    # 把当前的K值和轮廓系数作为标题
    axes.set_title("K=%s,Sil_score=%s"%(cluster,sil_score))
[0 1 0 1 1 1 1 0 1 0 1 0 0 0]
[0 1 0 1 1 1 1 0 1 2 1 0 2 0]
[2 3 1 0 0 3 0 2 3 1 0 2 1 2]
[2 1 0 3 3 4 3 2 1 0 3 2 0 2]
[2 3 6 7 1 4 1 5 3 0 7 2 0 5]

7d9e3ccaa9ad469baef7d44414da7fe4.png


3. 画图选取最合适的K值


# 画一个折线图,体现聚类个数和轮廓系数之间的关系
plt.plot(clusters,sil_scores)
• 1
• 2
[<matplotlib.lines.Line2D at 0x26d99d4a5f8>]

70960cee90c14308a18616684b538179.png


通过上面折线图我们可以看到,当K=3时,轮廓系数最大,分类效果最好。


如果内容对你有帮助,感谢记得点赞+关注哦!


相关文章
|
1月前
|
机器学习/深度学习 算法 网络安全
CCS 2024:如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
在2024年CCS会议上,苏黎世联邦理工学院的研究人员提出,当前对机器学习隐私保护措施的评估可能存在严重误导。研究通过LiRA攻击评估了五种经验性隐私保护措施(HAMP、RelaxLoss、SELENA、DFKD和SSL),发现现有方法忽视最脆弱数据点、使用较弱攻击且未与实际差分隐私基线比较。结果表明这些措施在更强攻击下表现不佳,而强大的差分隐私基线则提供了更好的隐私-效用权衡。
53 14
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
274 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
3月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
77 1
|
3月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
193 6
|
3月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
3月前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
59 0
|
3月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
56 0
|
3月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
179 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
3月前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
4月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)