K-modes算法 matlab实现

更新时间:2023-12-01 12:29:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

function [ resultLabel ] = Kmodes( k,dataSet) %KMODES Summary of this function goes here % Detailed explanation goes here % ----输入参数介绍---- % k 聚类簇数

% dataSet 输入数据矩阵(最后一列为类标签) % ----输出参数介绍----

% resultLabel 聚类后的类标签

dataS=dataSet(:,1:(size(dataSet,2)-1)); [row column]=size(dataS); %存放每次迭代的目标函数 objValueVector=[]; %循环次数

iteratorNum=0;

%随机选取k个数 r=randperm(row); ran=r(1:k) t1=clock; IC=ran

%进行第一次划分

resultLabel=zeros(row,1); for i=1:row

data1=dataS(i,:);

selectCluster=zeros(1,k); for j=1:k

data2=dataS(IC(j),:);

selectCluster(1,j)=calculateDis(data1,data2);

end

[minx tlabel]=min(selectCluster);

resultLabel(i,1)=tlabel end

%更新中心点,进行下一次划分,直到目标函数收敛 while(true)

iteratorNum=iteratorNum+1;

newcenter=updataCenters(k,resultLabel,dataS);

for i=1:row

data1=dataS(i,:);

selectCluster=zeros(1,k); for j=1:k

data2=newcenter(j,:);

selectCluster(1,j)=calculateDis(data1,data2);

end

[minx tlabel]=min(selectCluster); resultLabel(i,1)=tlabel; end

objValue=calculateObjectFunction(k,resultLabel,dataS,newcenter);

if((size(objValueVector,2)>0)&&(objValue==objValueVector(1,size(objValueVector,2)))); break; end

objValueVector=[objValueVector objValue]; end

t2=clock;

time=etime(t2,t1)

iterNum=iteratorNum

%计算两个数据之间的相异度

function [dis]=calculateDis(p1,p2) dis=0;

for ii=1:size(p1,2)

if(p1(1,ii)~=p2(1,ii)) dis=dis+1; end end end

%更新中心点 function

[newCenters]=updataCenters(k,resultLabel,data)

newCenters=zeros(k,size(data,2)); for ii=1:k

tempData=[];

for jj=1:size(resultLabel,1) if(resultLabel(jj,1)==ii)

tempData=[tempData;data(jj,:)]; end end

newCenters(ii,:)=mode(tempData); end end

%计算K-modes目标函数值 function

[functionValue]=calculateObjectFunction(k,resultLabel,data,center) functionValue=0; for ii=1:k

centerData=center(ii,:); for jj=1:size(data,1)

if(resultLabel(jj,1)==ii) originalData=data(jj,:); functionValue=functionValue+calculateDis(centerData,originalData); end end end end end

本文来源:https://www.bwwdw.com/article/7z2t.html

Top