【阿旭机器学习实战】【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时,轮廓系数最大,分类效果最好。


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


相关文章
|
20天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
13天前
|
机器学习/深度学习 自然语言处理 算法
|
16天前
|
机器学习/深度学习 数据采集 算法
机器学习实战第3天:手写数字识别
机器学习实战第3天:手写数字识别
22 0
|
29天前
|
机器学习/深度学习 分布式计算 算法
大模型开发:你如何确定使用哪种机器学习算法?
在大型机器学习模型开发中,选择算法是关键。首先,明确问题类型(如回归、分类、聚类等)。其次,考虑数据规模、特征数量和类型、分布和结构,以判断适合的算法。再者,评估性能要求(准确性、速度、可解释性)和资源限制(计算资源、内存)。同时,利用领域知识和正则化来选择模型。最后,通过实验验证和模型比较进行优化。此过程涉及迭代和业务需求的技术权衡。
|
1月前
|
机器学习/深度学习 数据采集 算法
构建高效机器学习模型:从数据处理到算法优化
【2月更文挑战第30天】 在数据驱动的时代,构建一个高效的机器学习模型是实现智能决策和预测的关键。本文将深入探讨如何通过有效的数据处理策略、合理的特征工程、选择适宜的学习算法以及进行细致的参数调优来提升模型性能。我们将剖析标准化与归一化的差异,探索主成分分析(PCA)的降维魔力,讨论支持向量机(SVM)和随机森林等算法的适用场景,并最终通过网格搜索(GridSearchCV)来实现参数的最优化。本文旨在为读者提供一条清晰的路径,以应对机器学习项目中的挑战,从而在实际应用中取得更精准的预测结果和更强的泛化能力。
|
1月前
|
机器学习/深度学习 自然语言处理 算法
【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法
【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法
55 0
|
30天前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2
|
1月前
|
算法
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:一维信号NLM非局部均值滤波算法去噪及谱相减算法呈现频谱
39 1

热门文章

最新文章