【模式识别原理】matlab中K均值算法进行男女分类示例

C均值聚类(更常用的叫法是K均值算法,K-means clustering)是经典的非监督数据处理方法。实验目的在于加深学生对C均值聚类原理的理解、掌握的算法的实现过程,体会其在模式识别中的作用。

1实验原理

 设定 C个类别并选取 C个初始聚类中心,按最小距离原则将各样本分配到 C类中的某一类;之后不断地计算各类中心并调整各样本的类别,最终使各样本到其所属类别中心的距离平方之和最小。

2实验内容

处理男生和女生的身高、体重数据,分别保存在文件FEMALE.TXT、MALE.TXT中,利用C均值方法进行聚类分析。

3实验要求

  1. 同时采用身高和体重数据作为特征,类别数设为2,利用C均值聚类方法对数据进行聚类,并将聚类结果表示在二维平面上;尝试不同的初始值,观察聚类结果是否发生变化。

clc;clear;close all

F = importdata('FEMALE.TXT')'

M = importdata('MALE.TXT')'

%

figure(2); hold on;

plot(F(1,:),F(2,:),'bo',M(1,:),M(2,:),'r*');

data = [F M];

% data = importdata('cmeans_data.txt');

% data = data';

figure(1);

plot(data(1,:),data(2,:),'b+');

[d,N] = size(data);

P = randperm(N,2);

m1 = data(:,P(1));

m2 = data(:,P(2));

for k = 1:100      

    S1=[];

    S2=[];

    for i=1:N

        cur = data(:,i);

        d1 = (cur - m1)'*(cur - m1);

        d2 = (cur - m2)'*(cur - m2);

       

        if d1<d2

            S1 = [S1, cur];

        else

            S2 = [S2, cur];

        end

    end

          

    plot(S1(1,:),S1(2,:),'bo',S2(1,:),S2(2,:),'r*');

   

    m1_new = mean(S1,2);

    m2_new = mean(S2,2);

   

    if (m1_new == m1) & (m2_new == m2)

        s=sprintf('迭代%d次,聚类收敛;两类样本数量分别是%d、%d',k-1,size(S1,2),size(S2,2));

        uiwait(msgbox(s,'提示','modal'));

        break;

    else

        m1 = m1_new;

        m2 = m2_new;

    end

end

结果:迭代6次,聚类收敛,两类样本数目分别是59,41.

图表

  1. 改变类别数,分别进行两类、三类、四类、五类聚类,画出聚类指标与类别数之间的关系曲线,探讨是否可以确定出合理的类别数目。

我的其他专栏:

单片机原理

模式识别原理

数字电子技术实验

自动控制原理

模拟电子技术

数据结构

关注我了解更多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值