美文网首页机器学习实战
【阿旭机器学习实战】【17】KMeans聚类算法中如何选择合适的

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

作者: 阿旭123 | 来源:发表于2022-11-23 15:18 被阅读0次

    【阿旭机器学习实战】系列文章主要介绍机器学习的各种算法模型及其实战案例,欢迎点赞,关注共同学习交流。

    目录

    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)
    
    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)
    
    在这里插入图片描述

    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]
    
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvjvXNek-1667459348007)(output_51_1.png)]

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

    # 画一个折线图,体现聚类个数和轮廓系数之间的关系
    plt.plot(clusters,sil_scores)
    
    [<matplotlib.lines.Line2D at 0x26d99d4a5f8>]
    
    在这里插入图片描述

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

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

    更多干货内容持续更新中…

    相关文章

      网友评论

        本文标题:【阿旭机器学习实战】【17】KMeans聚类算法中如何选择合适的

        本文链接:https://www.haomeiwen.com/subject/ygpzxdtx.html