MFC对话框实现模糊c均值聚类算法

       程序非常简单,作为当初我的第一个MFC程序,有纪念意义。程序最终界面:

          

一、问题:在MFC对话框界面输入任意类别和任意数目的样本进行C分类,并进行显示。

二、c均值聚类算法

1、c—平均算法

         对一批没有标明类别及类数的模式样本集,根据模式间的相似程度,按照物以类聚、人以群分的思想,将相似的模式分为一类,不相似的分为另一类。c均值聚类算法根据欧式距离把最短距离的样本分为1类。

     

                                                                                          

                            动态聚类框图

  ①  先选定某种距离作为样本间的相似性的度量;

  ②  确定评价聚类结果的准则函数;

  ③  给出某种初始分类,用迭代法找出使准则函数取极值的最好的聚类结果。

2、算法步骤

    ① 根据输入的分类数和样本总数,生成坐标范围内的随机数

    ② 初始聚类中心

    ③ 根据欧式距离进行一次分类

   ④ 根据新分成的两建立新的聚类中心

   ⑤ 新旧聚类中心不等则转回③,相等结束计算

   ⑥ 绘图显示结果

三、动态存储点坐标的数据结构

       由于要求输入任意类别和任意数目样本,所以存放数据不能放在一般的数组(因为必须进行初始化,不然编译不过)。而每个样本数据有几个特征,所以它实际是一个第一维未知、第二维已知(如这里的xy坐标)的动态数组。有几种方法:

① 用new[]定义一个一维动态数组指针(结构体对象指针),在程序运行时按界面输入样本多少分配内存。第二维的样本特征可以用个结构体,如:

struct mypoint

{

       int x;

       int y;

       int myclass;//类别

 };

mypoint*  ptr=new mypoint[num];

②用自带的cpoint类自己定义一个坐标对象,用new[]定义一个相应对象的一维数组指针

③容器。我另一个程序的一部分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值