資源簡介
這是k-means的MATLAB程序,主要用于各種數據的聚類等情況
代碼片段和文件信息
function?[?resXresY?resZrecord]?=?FunK_mean3D(?xyzk?)
%?功能:
%?????實現三維空間k-mean聚類算法
%?輸入:
%?????三維數據,分別用xyz兩個一維向量代表兩個維度
%?????k?是分成的類別的數量
%?輸出:
%?????k行的兩個矩陣
%?????對應同樣的第n行,存放著第n類的所有元素
%?????record:?記錄著每一行的有效元素的個數
wine=xlsread(‘C:\Users\Administrator\Desktop\11.xls‘‘A1:C20‘)
%wine=mapminmax(wine);?%訓練數據標準化
%wine=zscore(wine);?%測試數據標準化
%amax?=?max(max(A));?%求矩陣中最大數
%amin?=?min(min(A));?%求矩陣中最小數
%wine?=?(A-amin)/(amax-amin);
x=wine(:1);
y=wine(:2);
z=wine(:3);
k=4;
????j?=?1;
????%?下面是預分配一些空間
????%?seedX?和?seedY?中存放著所有種子
????seedX?=?zeros(1k);
????seedY?=?zeros(1k);
????seedZ?=?zeros(1k);
????oldSeedX?=?zeros(1k);
????oldSeedY?=?zeros(1k);
????oldSeedZ?=?zeros(1k);
????resX?=?zeros(klength(x));
????resY?=?zeros(klength(x));
????resZ?=?zeros(klength(x));
????%?用來記錄resX中每一行有效元素的個數
????record?=?zeros(1k);?
????for?i?=?1:k?%?產生k個隨機種子?注意:?隨機種子是來自元素集合
????????seedX(i)?=?x(round(rand()*length(resX)));
????????seedY(i)?=?y(round(rand()*length(resX)));
????????seedZ(i)?=?z(round(rand()*length(resX)));
????????%?為保證種子不重疊
????????if?(i?>?1?&&?seedX(i)?==?seedX(i-1)?&&?seedY(i)?==?seedY(i-1)?&&?seedZ(i)?==?seedZ(i-1))
????????????i?=?i?-1;?%?重新產生一個種子
????????end
????end
????while?1
????????disp([‘jack?is?here‘])
????????record(:)?=?0;?%?重置為零
????????resX(:)?=?0;
????????resY(:)?=?0;
????????resZ(:)?=?0;
????????for?i?=?1:length(x)?%?對所有元素遍歷
????????????%?下面是判斷本次元素應該歸為哪一類,這里我們是根據歐幾里得距離進行類別判定
????????????%?k-mean算法認為元素應該歸為距離最近的種子代表的類
????????????distanceMin?=?1;
????????????for?j?=?2:k
??????????????
- 上一篇:隨機森林程序
- 下一篇:免疫遺傳算法matlab工具箱.rar
評論
共有 條評論