K-modes聚類算法MATLAB

K-modes算法主要用於分類數據,如 國籍,性別等特徵。算法

距離使用漢明距離,即有多少對應特徵不一樣則距離爲幾。spa

中心點計算爲,選擇衆數做爲中心點。code

主要功能:blog

隨機初始化聚類中心,計算聚類。io

選擇每次聚類次數,選擇最佳聚類初始化。function

kmodes.m代碼class

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存了每一個樣本點屬於第幾類。di

相關文章
相關標籤/搜索