资源简介
之前总结了一篇k-中心点算法的文章后,现给出Matlab代码实现,代码含有详细的注释便于读者理解。

代码片段和文件信息
clc;
clear;
%读取数据文件生成点矩阵
fileID = fopen(‘E:\MySoftware\matlabWorks\textK_Mediods\sample.txt‘);
C=textscan(fileID‘%f %f‘); %textscan函数读取数据
fclose(fileID); %关闭一个打开的fileID的文件
%显示数组结果
%celldisp(C);
%将cell类型转换为矩阵类型这里只假设原数据为二维属性,且是二维的坐标点
CC_init=cat(2C{1}C{2});%用来保存初始加载的值
CC=CC_init; %cat函数用于连接两个矩阵或数组
%获得对象的数量
num=length(C{1});
%显示初始分布图
grid on;%显示表格
scatter(C{1}C{2}‘filled‘); %filled为实心圆,该函数可以把C中所有坐标的点都画出来。
%%设置任意k个簇
k=4;
%临时存放k个中心点的数组
C_temp=zeros(k2);
%判断所设置的k值是否小于对象的数量
if k %产生随机的k个整数
randC=randperm(num);
randC=randC(1:k);
%从原数组中提出这三个点
for i=1:k
C_temp(i:)=CC(randC(1i):);
end
%将原数组中的这三个点清空
for j=1:k
CC(randC(1j):)=zeros(12);
end
idZero=find(CC(:1)==0);
%删除为零的行
[i1j1]=find(CC==0);
row=unique(i1);
CC(row:)=[];
%分配k个二维数组,用来存放聚类点
%分配行为k的存储单元
cluster=cell(k11);
%将剔除的三个点加入到对应的三个存储单元每个单元的第一行置为0,为了存储相对应的簇中心
for m=1:k
cluster{m}=C_temp(m:);
end
%计算其他点到这k个点的距离,然后分配这些点,第一次遍历
for i=1:num-k
%分别计算到三个点的距离
minValue=1000000;%最小值,要根据实际情况设定该值
minNum=-1;%最小值序号
for j=1:k
if minValue>sqrt((CC(i1)-C_temp(j1))*(CC(i1)-C_temp(j1))+(CC(i2)-C_temp(j2))*(CC(i2)-C_temp(j2)))
minValue=sqrt((CC(i1)-C_temp(j1))*(CC(i1)-C_temp(j1))+(CC(i2)-C_temp(j2))*(CC(i2)-C_temp(j2)));
minNum=j;
end
end
cluster{minNum}=cat(1cluster{minNum}CC(i:));
end
%随机选择p点
flag=1;
count=0;
while flag==1
randC=randperm(num-k);
randC=randC(1:1);
o_random=CC(randC:);
%找出该随机点所在的簇
recordN=0;
for i=1:k
for j=1:size(cluster{i}1)
cc=cluster{i}(j:);
cc=cc-o_random;
if cc==0
recordN=i;
break;
end
end
end
%将选择的随机点从点集中删除
CC(randC:)=[];
%计算替换代价
o=cluster{recordN}(1:);
o_rand_sum=0;
o_sum=0;
for i=1:length(CC)
o_rand_sum=o_rand_sum+sqrt((CC(i1)-o_random(11))*(CC(i1)-o_random(11))+(CC(i2)-o_random(12))*(CC(i2)-o_random(12)));
o_sum=o_sum+sqrt((CC(i1)-o(11))*(CC(i1)-o(11))+(CC(i2)-o(12))*(CC(i2)-o(12)));
end
%如果随机选择的点的代价小于原始代表点的代价,则替换该代表点,然后重新聚类
if o_rand_sum cluster{recordN}(1:)=o_random;
%将代表点放入对象集
CC=cat(1CCo);
%对所有对象重新进行聚类
%将cluster除第一行之外的数据全部清空
for i=1:k
c=cluster{i}(1:);
cluster{i}=[];
cluster{i}=c;
end
%重新聚类
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4422 2018-06-14 22:00 textK_Mediods\k_medoids.m
文件 8976 2018-06-07 19:19 textK_Mediods\sample.txt
- 上一篇:分形维数MATLAB程序
- 下一篇:canny边缘检测算法的matlab实现
相关资源
- 读取txt文件内容matlab代码实现
- 细胞图像分割matlab代码
- 基于MP的时频分析MATLAB代码
- WCDMA matlab代码
- 图像降噪Matlab代码
- 圣诞树(matlab代码)
- 心音信号处理分析(附matlab代码)
- Pattern Recognition and Machine Learning(高清
- 均值滤波和FFT频谱分析Matlab代码
- 欧拉放大论文及matlab代码
- GPS信号的码捕获matlab代码.7z
- matlab读取SP3文件
- 图像的饱和度,亮度,色调的matlab代
- 肤色检测matlab代码
- sutton强化学习随书MATLAB代码
- 压缩鬼成像matlab代码
- 压缩感知(Compressed Sensing CS)matlab代
- 基于OFDMA系统的多用户资源分配算法,
- Allan方差分析MATLAB代码,含MPU6050八小
- 均匀球体剖面重力异常正演模拟Matl
- 印章识别matlab代码
- 连续潮流matlab代码
- 线性拟合仿真-最小二乘法、正交回归
- 矩阵填充MATLAB代码
- 大型飞机航拍图处理matlab代码
- LMS语音信号去噪matlab代码
- 卡尔曼滤波MATLAB代码
- Matlab代码编写的semi-supervised CCA 程序
- EOF分析matlab代码
- 尾灯识别matlab代码
评论
共有 条评论