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

K-medodis聚类算法MATLAB

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

国内博客,上介绍实现的K-medodis方法为:

与K-means算法类似。只是距离选择与聚类中心选择不同。

距离为曼哈顿距离

聚类中心选择为:依次把一个聚类中的每一个点当作当前类的聚类中心,求出代价值最小的点当作当前聚类中心。

维基百科上,实现的方法为PAM算法。

分成K类,把每个点都尝试当作聚类中心,并求出当前组合聚类中心点组合的代价值。找到总最小代价值的中心点。

国内实现:

kMedoids.m代码:

function [cx,cost] = kMedoids(K,data,num)
%   生成将data聚成K类的最佳聚类
%   K为聚类数目,data为数据集,num为随机初始化次数
    [cx,cost] = kMedoids1(K,data);
    for i = 2:num
        [cx1,min] = kMedoids1(K,data);
        if min<cost
            cost = min;
            cx = cx1;
        end
    end
end

function [cx,cost] = kMedoids1(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(abs((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
%       寻找代价值最小的当前聚类中心
        temp = data((cx==i),:);
        [~,I] = min(sum(squareform(pdist(temp))));
        centroids(i,:) = temp(I,:);
    end
end

Main.m

% 主函数

% 生成符合高斯分布的数据
mu = [5,5];
sigma = [16,0;0,16];
sigma1 = [0.5,0;0,0.5];
data =  gaussianSample(8,50,mu,sigma,sigma1);

% 聚类
K = 6;
[cx,cost] = kMedoids(K,data,10);
plotMedoids(data,cx,K);

执行Main.m结果为:

 


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
delphiadoquery的post和UpdateBatch发布时间: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