K-modes聚類演算法MATLAB
阿新 • • 發佈:2018-12-23
K-modes演算法主要用於分類資料,如 國籍,性別等特徵。
距離使用漢明距離,即有多少對應特徵不同則距離為幾。
中心點計算為,選擇眾數作為中心點。
主要功能:
隨機初始化聚類中心,計算聚類。
選擇每次聚類次數,選擇最佳聚類初始化。
kmodes.m程式碼
function [cx,cost] = kmodes(K,data,num) % 生成將data聚成K類的最佳聚類 % K為聚類數目,data為資料集,num為隨機初始化次數 [cx,cost] = kmodes1(K,data); for i = 2:num [cx1,min] = kmodes1(K,data);if min<cost cost = min; cx = cx1; end end end function [cx,cost] = kmodes1(K,data) % 把分類資料集data聚成K類 % [cx,cost] = kmeans(K,data) % K為聚類數目,data為資料集 % cx為樣本所屬聚類,cost為此聚類的代價值 % 選擇需要聚類的數目 % 隨機選擇聚類中心 centroids = data(randperm(size(data,1),K),:); % 迭代聚類 centroids_temp= zeros(size(centroids)); num = 0; while (~isequal(centroids_temp,centroids)&&num<20) centroids_temp = centroids; [cx,cost] = findClosest(data,centroids,K); centroids = compueCentroids(data,cx,K); num = num+1; end % cost = cost/size(data,1); end function [cx,cost]= findClosest(data,centroids,K) % 將樣本劃分到最近的聚類中心 cost = 0; n = size(data,1); cx = zeros(n,1); for i = 1:n % 漢明距離 [M,I] = min(sum((data(i,:)~=centroids)')); cx(i) = I; cost = cost+M; end end function centroids = compueCentroids(data,cx,K) % 計算新的聚類中心 centroids = zeros(K,size(data,2)); for i = 1:K % 眾數為聚類中心 centroids(i,:) = mode(data(cx==i,:)); end end
Main.m
% 生成分類資料集 data = randi(3,40,2); % 生成最佳聚類 K = 3; [cx,cost] = kmodes(K,data,10);
執行Main.m,返回聚類的代價值。與聚類結果。cx存了每個樣本點屬於第幾類。