为了账号安全,请及时绑定邮箱和手机立即绑定

将数据点分成多个群集,并取每个群集的平均值

将数据点分成多个群集,并取每个群集的平均值

慕哥6287543 2021-04-05 17:23:27
假设我在2x4矩阵中有一些数据(4个数据点,2个特征)X = np.array([[4,3,5,6], = [x1 x2 x3 x4]              [7,4,6,5]]) “最接近的” 3x4矩阵,它指示最接近每个数据点x的群集k。(3个集群,4个数据点)C = [[1 0 1 0]     [0 0 0 1]     [0 1 0 0]]我想找到一种有效的方法,使用numpy计算每个群集中数据点的平均值。我的想法是构造一个看起来像这样的矩阵:idea = [[x1 0  x3 0 ]        [0  0  0  x4]        [0  x2 0  0 ]]将其元素汇总到各列中,然后除以中的相应元素np.sum(c,axis=1),因为均值应仅考虑属于该类的数据点(即不包括零)。此示例的最终预期输出应为3x2矩阵:output = [(x1+x3)/2  = [ [4.5 6.5]           x4            [6   5  ]           x2       ]    [3   4  ]]我什至无法构建看起来像我的idea矩阵的矩阵。我不知道这是否是解决这个问题最有效的方法我想避免使用任何for循环。
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

这是您策略的向量化实施:


X = np.array([[4, 3, 5, 6],[7, 4, 6, 5]])

C = np.array([[1, 0, 1, 0], [0, 0, 0, 1], [0, 1, 0, 0]])

output = X @ C.T / np.sum(C, axis=1)


print(output)

# => [[4.5 6.  3. ]

#    [[6.5 5.  4. ]]

由于您的输入点X是列,因此我认为将输出的列作为聚类的质心更为自然。如果您愿意,可以转置结果。


查看完整回答
反对 回复 2021-04-20
  • 1 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号