-
大小: 2KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-07
- 語言: Matlab
- 標(biāo)簽: 數(shù)據(jù)挖掘??K-means??聚類??
資源簡介
K-means算法的Matlab實(shí)現(xiàn),內(nèi)含經(jīng)典Iris數(shù)據(jù)集,需要下載者將其轉(zhuǎn)化為矩陣,作為算法的參數(shù)輸入。

代碼片段和文件信息
function?result=K_means(datakinitset)
????[rowscolumns]=size(data);%獲取數(shù)據(jù)的行列
????for?i=1:k
????data(initset(i)columns+1)=i;%初始聚簇代表確定
????oldClusetCenter(i:)=data(initset(i)1:columns);
????oldClusterRows{i}=initset(i);%初始第i簇的行號
????end
????%結(jié)束標(biāo)記
????flag=1;
????%迭代次數(shù)
????iteratenum=0;
????
????while(flag==1)
????????iteratenum=iteratenum+1;
????????fprintf(‘-第%d次迭代:\n‘iteratenum);
????????flag=0;
???????%計(jì)算歐幾里得距離,劃分簇
???????for?ii=1:rows
???????????for?jj=1:k
????????????????res=(data(ii1:columns)-oldClusetCenter(jj:)).*(data(ii1:columns)-oldClusetCenter(jj:));
????????????????dist(jj)=sqrt(sum(res));%dist矩陣存放歐幾里得距離
???????????end
???????????data(iicolumns+1)=find(dist==min(dist));%最小歐幾里得距離,劃分簇
???????????dist(1:k)=0;%距離置零
???????end
???????%計(jì)算新的聚簇代表
???????for?cluster=1:k
???????????newClusterRows{cluster}=find(data(:columns+1)==cluster);%用cell來存儲第k簇的行號,不能用數(shù)組
???????????newClusetCenter(cluster:)=mean(data(newClusterRows{cluster}1:columns));
???????????if?(all(ismember(newClusterRows{cluster}oldClusterRows{cluster}))&&all(ismember(oldClusterRows{cluster}newClusterRows{cluster})))~=1%判斷每一簇的行號是否發(fā)生變化
???????????????oldClusterRows{cluster}=newClusterRows{cluster};
???????????????oldClusetCenter(cluster:)=newClusetCenter(cluster:);
???????????????flag=1;
???????????end
???????????fprintf(‘-----第%d簇的聚簇代表坐標(biāo)為:\n‘cluster);
???????????disp(newClusetCenter(cluster:));
???????????fprintf(‘--------在本簇的元組行號為:\n‘);
???????????disp(newClusterRows{cluster}‘);
???????end
????end
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1679??2018-03-12?15:10??K_means.m
?????文件???????4700??2018-03-12?16:05??Iris數(shù)據(jù)集.txt
-----------?---------??----------?-----??----
?????????????????6379????????????????????2
評論
共有 條評論