ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

matlab预习报告

2021-10-14 10:59:52  阅读:178  来源: 互联网

标签:distance 报告 样本 预习 matlab 聚类 Theta centerIndex dataNum


算法介绍

该算法以欧氏距离为基础,首先辨识最远的聚类中心,然后确定其他的聚类中心,直到无新的聚类中心产生。最后将样本按最小距离原则归入最近的类。

例:样本分布如图所示。

                                 

 

 

 
实验内容

 见图所示,为二维点集

                                          
 实验步骤

 

1、提取分类特征,确定特征值值域,确定特征空间;

2、编写聚类程序;

3、将所提取的样本的加以聚类;

4、用误差平方和准则(也可选用其他准则)加以评价,直到满意为止。
代码实现 (Matlab)

 

  clear all
    clc
    x=[0,0; 3,8; 2,2;1,1; 5,3; 4,8; 6,3; 5,4;  6,4;  7,5]
    Theta=0.5;
    [pattern,centerIndex]=MaxMinDisFun(x,0.5)
    %%%%%%%%%%%%%%%%%
    %函数名称 MaxMinDisFun(x,Theta)
    %输入参数:
    %           x  : x为n*m的特征样本矩阵,每行为一个样本,每列为样本的特征
    %         Theta:即θ,可用试探法取一固定分数,如:1/2
    %输出参数:
    %       pattern:输出聚类分析后的样本类别
    %   centerIndex:聚类中心点
    %函数功能 :利用最大最小距离算法聚类样本数据,
    %%%%%%%%%%%%%%%%%%%%%
    function [classes,centerIndex]=MaxMinDisFun(x,Theta)
    maxDistance=0;
    start=1;    %初始选一个中心点
    index=start;%相当于指针指示新中心点的位置
    k=1;        %中心点计数,也即是类别
    dataNum=size(x,1);  %输入的样本数
    centerIndex=zeros(dataNum,1); %保存中心点
    distance=zeros(dataNum,1);    %表示所有样本到当前聚类中心的距离
    minDistance=zeros(dataNum,1); %取较小距离
    classes=zeros(dataNum,1);     %表示类别
     
    centerIndex(1)=index;%保存第一个聚类中心
    classes(:)=k;        %初始类别全为k
    %%
    for i=1:dataNum
        distance(i)=sqrt((x(i,:)-x(centerIndex(1),:))*(x(i,:)-x(centerIndex(1),:))');%欧氏距离,与第1个聚类中心的距离
        classes(i)=k;%第1类
        if(maxDistance<distance(i))
            maxDistance=distance(i);%与第一个聚类中心的最大距离
            index=i;%与第一个聚类中心距离最大的样本
        end
    end
    %%
    minDistance=distance;
    % minDistance(index,1)=0;
    maxVal=maxDistance;
    while(maxVal>(maxDistance*Theta))%判断新的聚类中心是否满足条件
        k=k+1;
        centerIndex(k)=index;%判断新的聚类中心是否满足条件,若满足则新增聚类中心
        for i=1:dataNum
                distance(i)=sqrt((x(i,:)-x(centerIndex(k),:))*(x(i,:)-x(centerIndex(k),:))');%与第k个聚类中心的距离
               if(minDistance(i)>distance(i))
                   minDistance(i)=distance(i);
                   classes(i)=k;%按照当前最近临方式分类,哪个近就分哪个类别
               end
        end
        %查找minDistance中最大值
        maxVal=0;
        for i=1:dataNum
            if((maxVal<minDistance(i)))
                maxVal=minDistance(i);
                index=i;
            end
        end
    %     centerIndex(k+1)=index;%新的聚类中心
        aaa=0;
    end
    end  

标签:distance,报告,样本,预习,matlab,聚类,Theta,centerIndex,dataNum
来源: https://blog.csdn.net/weixin_48449508/article/details/120759633

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有