zoukankan      html  css  js  c++  java
  • K-modes聚类算法MATLAB

    K-modes算法主要用于分类数据,如 国籍,性别等特征。

    距离使用汉明距离,即有多少对应特征不同则距离为几。

    中心点计算为,选择众数作为中心点。

    主要功能:

    随机初始化聚类中心,计算聚类。

    选择每次聚类次数,选择最佳聚类初始化。

    kmodes.m代码

    function [cx,cost] = kmodes(K,data,num)
    % 生成将data聚成K类的最佳聚类
    %   K为聚类数目,data为数据集,num为随机初始化次数
        [cx,cost] = kmodes1(K,data);
        for i = 2:num
            [cx1,min] = kmodes1(K,data);
            if min<cost
                cost = min;
                cx = cx1;
            end
        end
    end
    
    function [cx,cost] = kmodes1(K,data)
    %   把分类数据集data聚成K类
    %   [cx,cost] = kmeans(K,data)
    %   K为聚类数目,data为数据集
    %   cx为样本所属聚类,cost为此聚类的代价值
    % 选择需要聚类的数目
    
    % 随机选择聚类中心
        centroids = data(randperm(size(data,1),K),:);
    % 迭代聚类 
        centroids_temp = zeros(size(centroids));
        num = 0;
        while (~isequal(centroids_temp,centroids)&&num<20) 
            centroids_temp = centroids;
            [cx,cost] = findClosest(data,centroids,K);
            centroids = compueCentroids(data,cx,K);
            num = num+1;
        end
    %     cost = cost/size(data,1);
    
    end
    
    
    function [cx,cost] = findClosest(data,centroids,K)
    % 将样本划分到最近的聚类中心
        cost = 0;
        n = size(data,1);
        cx = zeros(n,1);
        for i = 1:n
    %        汉明距离
            [M,I] = min(sum((data(i,:)~=centroids)'));
            cx(i) = I;
            cost = cost+M;
        end
    end
    
    
    function centroids = compueCentroids(data,cx,K)
    % 计算新的聚类中心
        centroids = zeros(K,size(data,2));
        for i = 1:K
    %       众数为聚类中心
            centroids(i,:) = mode(data(cx==i,:));
        end
    end

    Main.m

    % 生成分类数据集
    data = randi(3,40,2);
    % 生成最佳聚类
    K = 3;
    [cx,cost] = kmodes(K,data,10);

    执行Main.m,返回聚类的代价值。与聚类结果。cx存了每个样本点属于第几类。

  • 相关阅读:
    【转】Asp.net页面的生命周期
    指定.net的httprequest http协议版本为1.0
    查看oracle中被锁的对象(表...)
    网友整理的Flex开源项目
    oracle中用profile限定用户资源
    (转)让你受益终身的10个Word实用技巧
    磁盘阵列卡
    Nmap扫描器的使用
    最简单的数据库连接,asp连接access数据库
    网络经典命令行
  • 原文地址:https://www.cnblogs.com/lolybj/p/10163666.html
Copyright © 2011-2022 走看看