晨阳715 2023-11-19 01:10 采纳率: 72.7%
浏览 14
已结题

如何在约束条件”每个簇内的西瓜样本数量是一样多的“(每个簇有10个西瓜数据)前提下,把这30个西瓜数据聚类分成3个簇?

博主您好,拜读了您《Python实现聚类K-means算法》这篇文章(https://blog.csdn.net/wyn1564464568/article/details/125782286?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170032756216800226592639%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170032756216800226592639&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~baidu_landing_v2~default-4-125782286-null-null.nonecase&utm_term=Python%E5%AE%9E%E7%8E%B0%E8%81%9A%E7%B1%BBK-means%E7%AE%97%E6%B3%95&spm=1018.2226.3001.4450)
个人在想改造一下这部分代码,有个想法请教:

img

在约束条件”每个簇内的西瓜样本数量是一样多的“(每个簇有10个西瓜数据)前提下,把这30个西瓜数据聚类分成3个簇,:

img

但是运行程序后,聚类分布示意图里总有两个数据点出现异常,不能实现”每个簇有10个西瓜数据“。麻烦博主帮忙分析一下如何改进代码(自己修改过的代码片段如下)。

    # 清空对簇的划分,对应上面算法的第3行
    clusters = []
    c = []
    for i in range(k):
        clusters.append([])
        c.append([])

    # 这个for对应上面算法的4-8行
    for melon in melons:
        '''
        argmin 函数找出容器中最小的下标,在这里这个目标容器是:
        list(map(lambda vec: np.linalg.norm(melon - vec, ord = 1), mean_vectors)),
        它表示melon与mean_vectors中所有向量的距离列表。
        (numpy.linalg.norm计算向量的范数,ord = 1即曼哈顿范数,ord = 2即欧几里得范数或模长)
        '''
        L = list(map(lambda vec: np.linalg.norm(melon - vec, ord=1), mean_vectors))
        # 表示melon与mean_vectors中所有向量的曼哈顿距离列表
        for i in range(k):
            c[i] = np.argmin(L)  # 取最小距离对应的下标值,存入c
            if len(clusters[c[i]]) < 10:  
                clusters[c[i]].append(melon)
                break  # 如果最小距离值下标对应的样本簇,簇内样本数量少于10,则将该样本加入该簇
            else:
                L[c[i]] = 999999
                # 否则,将最小距离c[i]定义无穷大,并继续重复上述步骤


  • 写回答

11条回答 默认 最新

  • threenewbee 2023-11-19 07:31
    关注
        if rnd > ROUND_LIMIT or change < THRESHOLD:
            break
    
    

    这里的阈值你调整下看看
    我感觉博主的程序有点凑出来的感觉。本身这些数据你就是肉眼看也看不出来明显的聚类(如果都是黑色的点),强行划分了3类而已。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月24日
  • 已采纳回答 11月20日
  • 修改了问题 11月19日
  • 修改了问题 11月19日
  • 展开全部

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图