k-means聚类分析的C++实现

K-means即为 1967MacQueen首次提出的 K均值聚类算法,在许多实践应用中取得了很好的效果,下面对 k-means算法做简要介绍。
设数据集由n个对象组成,预备分成k类,初始化时,从n个数据对象   中随机选取k 作为簇的初始均值,对剩余数据对象,计算其与各个簇均值的距离,从而将其指派到最相似的簇。指派完毕后,重新计算各个簇的均值,并对各个数据对象重新进行指派。如此重复直至准则函数式(所有数据对象与所在簇的均值的差的平方相加) 收敛。
此种聚类方法的缺陷:
  1. K值的选择与问题域相关,通常用户需选择若干个 k值实验,从而得到最佳分类的数目。
  2. 由于初始化时对簇均值的选择是随机的,即使对于同一个k值,最终聚类结果一般来说也是不相同的,并且很可能导致最终结果得到的不是k个聚类。为了减少这种情况的发生,我在程序中加入了简单的处理方法:每进行一轮数据对象指派,便检查是否有空簇,随机选取一个数据对象作为空簇的新的均值。
  3. 传说对脏数据很敏感,但是我不知道如何验证。
总之,这种聚类方法比较适合对大量数据做初步聚类,一般来说聚类结果可以采用多次执行聚类分析后较稳定的结果,也就是出现次数较多的那个聚类结果。
而对于我的程序(附件里下载源码)本身,命名还是不规范(总是忧愁取啥名),代码还不够简洁,我努力改,愿下次贴代码的时候有很大的进步,也欢迎各位批判。
附件下载解压后,在VS下新建一个项目,然后在相应位置添加相应文件后编译执行。

本文出自 “小罗啦啦” 博客,请务必保留此出处http://2201034.blog.51cto.com/2191034/756431

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值