K modes聚類演算法MATLAB

2022-08-20 23:09:11 字數 1776 閱讀 2547

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 mincost =min;

cx =cx1;

endend

endfunction [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;

endendfunction centroids =compuecentroids(data,cx,k)

%計算新的聚類中心

centroids = zeros(k,size(data,2

));

for i = 1

:k%眾數為聚類中心

centroids(i,:) = mode(data(cx==i,:));

endend

main.m

%生成分類資料集

data = randi(3,40,2

);%生成最佳聚類

k = 3

;[cx,cost] = kmodes(k,data,10);

執行main.m,返回聚類的代價值。與聚類結果。cx存了每個樣本點屬於第幾類。

聚類演算法 近鄰聚類演算法

time is always too short for those who need it,but for those who love,it lasts forever.dracula untold 近鄰聚類法同樣是一種基於距離閾值的聚類演算法。coding utf 8 近鄰聚類演算法的pyth...

聚類演算法 層次聚類演算法

層次聚類演算法 hierarchical clustering method 又稱為系統聚類法 分級聚類法。層次聚類演算法又分為兩種形式 凝聚層次聚類 首先將每個物件作為乙個簇,然後合併這些原子簇為越來越大的簇,直到某個終結條件被滿足。層次聚類 首先將所有物件置於乙個簇中,然後逐漸細分為越來越小的簇...

聚類演算法 什麼是聚類

聚類分析或聚類演算法就是通過一些方法或手段使資料集集聚成不同的類別,或者叫 簇。簇內部每乙個單位都是相似的。簇與簇之間都是不相似的。但是聚類其實是一種思想,它不是一種具體的方法。這裡千萬不要搞混。但是可以實現聚類的演算法有很多種。我們通常就使用這些演算法來實現聚類的。比如 k means就是最為經典...