資源簡介
k-means數據 機器學習 加油
代碼片段和文件信息
function?result=K_means(datakinitset)
????[rowscolumns]=size(data);%獲取數據的行列
????for?i=1:k
????data(initset(i)columns+1)=i;%初始聚簇代表確定
????oldClusetCenter(i:)=data(initset(i)1:columns);
????oldClusterRows{i}=initset(i);%初始第i簇的行號
????end
????%結束標記
????flag=1;
????%迭代次數
????iteratenum=0;
????
????while(flag==1)
????????iteratenum=iteratenum+1;
????????fprintf(‘-第%d次迭代:\n‘iteratenum);
????????flag=0;
???????%計算歐幾里得距離,劃分簇
???????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
???????%計算新的聚簇代表
???????for?cluster=1:k
???????????newClusterRows{cluster}=find(data(:columns+1)==cluster);%用cell來存儲第k簇的行號,不能用數組
???????????newClusetCenter(cluster:)=mean(data(newClusterRows{cluster}1:columns));
???????????if?(all(ismember(newClusterRows{cluster}oldClusterRows{cluster}))&&all(ismember(oldClusterRows{cluster}newClusterRows{cluster})))~=1%判斷每一簇的行號是否發生變化
???????????????oldClusterRows{cluster}=newClusterRows{cluster};
???????????????oldClusetCenter(cluster:)=newClusetCenter(cluster:);
???????????????flag=1;
???????????end
???????????fprintf(‘-----第%d簇的聚簇代表坐標為:\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數據集.txt
-----------?---------??----------?-----??----
?????????????????6379????????????????????2
- 上一篇:直線端點檢測程序
- 下一篇:fr
amebuffer播放攝像頭
評論
共有 條評論