楼主: shoushidacheng
13290 4

[问答] R语言中kmeans聚类函数的初始点是如何选取的? [推广有奖]

  • 2关注
  • 0粉丝

已卖:3份资源

初中生

14%

还不是VIP/贵宾

-

威望
0
论坛币
4926 个
通用积分
2.1500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
840 点
帖子
3
精华
0
在线时间
15 小时
注册时间
2015-1-9
最后登录
2022-1-6

楼主
shoushidacheng 发表于 2015-3-15 10:45:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
自己写了个kmeans函数,运行很多次,发现分类结果都各不相同,有的时候结果跟R语言中的kmeans函数运行结果一样,说明算法没有问题,关键是初始点是如何选择的?这个问题困扰着我,自己写的是用平均分布函数runif(num)随机生成一堆数,然后乘以数据的均值来确定初始值的。求大神赐教~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:kmeans means mean R语言 ans 如何

回帖推荐

DM小菜鸟 发表于3楼  查看完整内容

最简单的确定初始类簇中心点的方法是随机选择K个点作为初始的类簇中心点,但是该方法在有些情况下的效果较差,如下(下图中的数据是用五个二元正态高斯分布生成的,颜色代表聚类效果): K个初始类簇点的选取还有两种方法:1)选择彼此距离尽可能远的K个点 2)先对数据用层次聚类算法或者Canopy算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。 1) ...

沙发
DM小菜鸟 发表于 2015-3-30 17:41:36
最简单的确定初始类簇中心点的方法是随机选择K个点作为初始的类簇中心点,但是该方法在有些情况下的效果较差,如下(下图中的数据是用五个二元正态高斯分布生成的,颜色代表聚类效果):

  
K个初始类簇点的选取还有两种方法:1)选择彼此距离尽可能远的K个点 2)先对数据用层次聚类算法或者Canopy算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。
  
  1) 选择批次距离尽可能远的K个点
  
首先随机选择一个点作为第一个初始类簇中心点,然后选择距离该点最远的那个点作为第二个初始类簇中心点,然后再选择距离前两个点的最近距离最大的点作为第三个初始类簇的中心点,以此类推,直至选出K个初始类簇中心点。
  
该方法经过我测试效果很好,用该方法确定初始类簇点之后运行KMeans得到的结果全部都能完美区分五个类簇:


  
  
  2) 选用层次聚类或者Canopy算法进行初始聚类,然后利用这些类簇的中心点作为KMeans算法初始类簇中心点。
  
常用的层次聚类算法有BIRCH和ROCK,在此不作介绍,下面简单介绍一下Canopy算法,主要摘自Mahout的Wiki:
  
首先定义两个距离T1和T2,T1>T2.从初始的点的集合S中随机移除一个点P,然后对于还在S中的每个点I,计算该点I与点P的距离,如果距离小于T1,则将点I加入到点P所代表的Canopy中,如果距离小于T2,则将点I从集合S中移除,并将点I加入到点P所代表的Canopy中。迭代完一次之后,重新从集合S中随机选择一个点作为新的点P,然后重复执行以上步骤。
  
Canopy算法执行完毕后会得到很多Canopy,可以认为每个Canopy都是一个Cluster,与KMeans等硬划分算法不同,Canopy的聚类结果中每个点有可能属于多个Canopy。我们可以选择距离每个Canopy的中心点最近的那个数据点,或者直接选择每个Canopy的中心点作为KMeans的初始K个类簇中心点。

已有 1 人评分学术水平 热心指数 收起 理由
求证1加1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

藤椅
56584 发表于 2016-5-19 13:02:42
R怎么把中心点标记出来

板凳
xq3521978 发表于 2017-5-3 14:32:57
DM小菜鸟 发表于 2015-3-30 17:41
最简单的确定初始类簇中心点的方法是随机选择K个点作为初始的类簇中心点,但是该方法在有些情况下的效果较差 ...
R语言怎么实现canopy算法啊,求大神告知

报纸
makai2016 学生认证  发表于 2019-6-18 16:41:06
使用nstar=n这个参数可以多次运行kmeans从而消除初始点随机选择的影响,例如你可以选择nstar=30

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-21 02:10