• 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存了每个样本点属于第几类。

  • 相关阅读:
    mysql 数据库 II(数据类型)
    mysql 数据库 I
    网络协议
    Python 类IV(类成员,异常处理等)
    Python 类III(三大特性,约束,super)
    Python 类II
    类加载机制
    Java新篇章之集合
    Java 类类型之 String 类型
    java 多态
  • 原文地址:https://www.cnblogs.com/lolybj/p/10163666.html
Copyright © 2020-2023  润新知