24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1494  |  回复: 5

xdolphin

新虫 (初入文坛)

[交流] 【求助】k-medoids聚类算法关于中心替换的问题

想用经典的PAM算法来做,看了几个介绍,看了一些文献,基本都是提到这么实现:

算法如下:
  输入:包含n个对象的数据库和簇数目k;
  输出:k个簇
  (1)随机选择k个代表对象作为初始的中心点
  (2)指派每个剩余对象给离它最近的中心点所代表的簇
  (3)随机地选择一个非中心点对象y
  (4)计算用y代替中心点x的总代价s
  (5)如果s为负,则用可用y代替x,形成新的中心点
  (6) 重复(2)(3)(4)(5),直到k个中心点不再发生变化.

想请问大家:
这里第3步,是随机选一个非中心对象y, 来替换一个随机选的一个中心点吗?之后第4步,是不是对所有对象重新分配,然后计算总代价?
谢谢大家。
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mze04532

金虫 (著名写手)

第3步通常来说是计算每个簇新的中心对象(代价最少),这里随机选择一个代价更少的就可以进行循环。
第4步是用第3步得到的新的中心对象对各个簇计算代价,重新分配对象到各个簇。
2楼2010-09-24 19:14:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xdolphin

新虫 (初入文坛)

恩。
但我没明白的是,怎么来替换?

比如我们有3个类,对应三个中心 a, b, c,假设我随机取一个非中心对象x, 那么x是随机替换 a, b, c其中之一吗? 这样替换之后,计算各个类的代价,然后决定x 是否 我们选择的 中心?
引用回帖:
Originally posted by mze04532 at 2010-09-24 19:14:17:
第3步通常来说是计算每个簇新的中心对象(代价最少),这里随机选择一个代价更少的就可以进行循环。
第4步是用第3步得到的新的中心对象对各个簇计算代价,重新分配对象到各个簇。

3楼2010-09-25 01:59:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

absoluty

金虫 (正式写手)

medoid其实类似于mean,从类内找到一个对象,使得类内其他对象到它的距离总和是最小的,用它来替代原先的类中心
4楼2010-09-28 14:22:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xdolphin

新虫 (初入文坛)

恩,不过看到一些外国文献这么写

Swap each medoid with every non-medoid as
long as the objective function improves.

所以没明白这种方式又是怎么做呢?
引用回帖:
Originally posted by absoluty at 2010-09-28 14:22:24:
medoid其实类似于mean,从类内找到一个对象,使得类内其他对象到它的距离总和是最小的,用它来替代原先的类中心

5楼2010-09-29 01:56:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

难写啊

新虫 (正式写手)

★ ★
conanwj(金币+2): 鼓励研讨 2011-05-12 07:35:03
这个算法貌似计算开销很大,而且如果这个就是原算法描述的话,显得细节不够,你无法照此作出程序,只能猜测一些处理过程

从合理性方面看,那一步可能是应该随机选一个y去挨个代替每个现有中心来计算总代价,因为这样对每个现有中心来讲才显得公平
但是该算法描述缺少一些细节,比如到底是用总代价负得最多的代替,还是代替第一次使总代价为负的中心

另外,按照你给的这个名为PAM的算法来做聚类的话,我觉得不确定性远远超过经典K均值,这个算法中随机操作太多而且费时,远不及广泛普及的k均值简单实用,而且他的操作极其类似于k均值,但比k均值繁琐得多

因此,我个人觉得这个算法没有去改进他的必要

[ Last edited by 难写啊 on 2011-5-12 at 04:55 ]
email:myronsaga1@sohu.com.qq:89260998
6楼2011-05-12 04:53:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 xdolphin 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见