K-medodis聚类算法MATLAB
国内博客,上介绍实现的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结果为:

K-medodis聚类算法MATLAB的更多相关文章
- 密度峰值聚类算法MATLAB程序
密度峰值聚类算法MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 密度峰值聚类算法简介见:[转] 密度峰值聚类算法(DPC) 数据见:MATL ...
- k均值聚类算法原理和(TensorFlow)实现
顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...
- K均值聚类算法
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- K均值聚类算法的MATLAB实现
1.K-均值聚类法的概述 之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为在学模式识别,又重新接触了这 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- K-modes聚类算法MATLAB
K-modes算法主要用于分类数据,如 国籍,性别等特征. 距离使用汉明距离,即有多少对应特征不同则距离为几. 中心点计算为,选择众数作为中心点. 主要功能: 随机初始化聚类中心,计算聚类. 选择每次 ...
- K-means聚类算法MATLAB
以K-means算法为例,实现了如下功能 自动生成符合高斯分布的数据,函数名为gaussianSample.m 实现多次随机初始化聚类中心,以找到指定聚类数目的最优聚类.函数名myKmeans.m 自 ...
- 谱聚类算法—Matlab代码
% ========================================================================= % 算 法 名 称: Spectral Clus ...
随机推荐
- [gpio]Linux GPIO简单使用方式2-sysfs
转自:http://blog.csdn.net/cjyusha/article/details/50418862 在Linux嵌入式设备开发中,对GPIO的操作是最常用的,在一般的情况下,一般都有对应 ...
- Android——android weight 属性(百度)
LinearLayout 在androidUI布局中使用非常多,它其中有个很方便又很有意思的属性 weight ,这个属性理解起来不是那么简单的,而真正理解了又觉得非常简单! 下面就通过一个例子来说明 ...
- PHP——小尾巴之流程处理
说明:首先新建一个流程,把处理流程的节点人员添加进去,最后点确定提交至数据库 处理流程:不同用户登录进去处理自己的节点部分对其审核通过 新建两个流程: 第一个为借款流程:处理顺序为:李四发起=> ...
- ssh配置authorized_keys后仍然需要输入密码的问题
前阵子搭建Hadoop时,配置了本机(localhost)的ssh的公钥到authorized_keys文件中,但是在ssh连接localhost时仍然提示需要输入密码,后来发现是$HOME/.ssh ...
- Linux curl 模拟form表单提交信息和文件
Linux curl 模拟form表单提交信息和文件 curl是一个命令行方式下传输数据的开源传输工具,支持多种协议:FTP.HTTP.HTTPS.IMAP.POP3.TELNET等,功能超级强大 ...
- mac 安装软件提示权限不足的解决的方法
假设直接输入命令提示没权限的时候 1.sudo 安装命令 2.sudo su - 这时候切换到root用户下了 ,能够随心所欲了
- 书籍:Building Secure PHP Apps
Building Secure PHP Apps https://leanpub.com/buildingsecurephpapps
- Autofac IoC容器基本使用步骤【1】
原文:http://www.bkjia.com/Asp_Netjc/888119.html [原文中有一个地方报错,下面已修改] 一.基本步骤: 1.设计适合控制反转(IoC)的应用程序 2.给应用 ...
- Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
在ASP.NET中有两个类都提供缓存支持, 一个是HttpRuntime类的Cache属性, 另一个是HttpContext类的Cache属性. 通过查看这两个属性的类型可以发现其实这两个属性都是Sy ...
- PHP正则表达式 /i, /s, /x,/u, /U, /A, /D, /S等模式修饰符
i (PCRE_CASELESS) 如果设置了这个修饰符, 模式中的字母会进行大小写不敏感匹配. m (PCRE_MULTILINE) 默认情况下, PCRE认为目标字符串是由单行字符组成的(然而实际 ...