K-means之C++及OpenCV实现

K-means算法算是个著名的聚类算法了,不仅容易实现,并且效果也不错,训练过程不需人工干预,实乃模式识别等领域的居家必备良品啊,今天就拿这个算法练练手。


总结来说,这个算法的步骤如下:

1.随机选取样本中的K个点作为聚类中心
2.计算所有样本到各个聚类中心的距离,将每个样本规划在最近的聚类中
3.计算每个聚类中所有样本的中心,并将新的中心代替原来的中心
4.检查新老聚类中心的距离,如果距离超过规定的阈值,则重复2-4,直到小于阈值


那么,现在,我实现的程序的步骤也是按照上面一步一步来的,

为了方便,我直接在平面上随机产生n个点,选取前K个点作为聚类中心,

距离就定义为平面上的欧式距离,

然后为了形象化地观察过程和结果,我将过程以图像的方式显示。


代码如下:


首先是主体:

int iter_times = 0;//迭代次数
    while(!good_result())//检查是否是需要的聚类中心
    {
        for(int i = 0;i < POINT_NUM;i++)
 
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值