• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

K-modes聚类算法MATLAB

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
delphi编程里的bool跟boolean类型有什么区别发布时间:2022-07-18
下一篇:
Delphi主窗体实现透明发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap