一元概率層次聚類

2021-08-14 20:17:43 字數 1544 閱讀 5345

本文依據《資料探勘概念與技術》中的概率層次聚類演算法而來,但與其略有不同。概率層次聚類是利用概率模型來度量簇之間的距離,本質是實現簇之間的合併。本演算法需要乙個前提條件,資料集被事先分為一些簇,並且沒有單個點簇的情況,同時,資料是符合正太分布的。另外,與原書不同的是,本文增加了乙個引數:簇合併門限。

演算法的偽**如下:

設定簇合併門限th

計算所有簇的最大似然值pc

while 1 尋找可以合併的簇,直到沒有為止

for i 遍歷現有的簇c

計算第i個簇與其他簇之間的距離temp

endif temp中的最小距離小於門限th

合併第i與最小距離的簇

重新計算i的最大似然pc(i),並做開方

endend

本演算法的matlab實現程式為:

clc;

clear;

%載入測試資料檔案

fileid = fopen('d:\matlabfile\phc\phc.txt');

ds=textscan(fileid,'%f %f ');

fclose(fileid);

%元組型別,為每乙個物件建立乙個簇

c=cell(length(ds),1);

for i=1:length(ds)

c=[ds(i),ds(i)];

end%設定簇合併門限

th=1;

%計算每乙個簇的最大似然值

pc=zeros(1,1);

for i=1:size(c,1)

pc(i)=calcmle(c);

end%合併滿足條件的簇

while 1

%遍歷尋找兩個簇,如滿足條件就合併

row=size(c,1);

if row==1

break;

endfor i=1:row-1

temp=zeros(row-i,1);

for j=i+1:row

%合併第i和第j個簇,形成臨時簇

c_temp=cat(2,c,c);

%計算合併後的臨時簇的最大似然值

pcij=calcmle(c_temp);

temp(j-i)=abs(log(pcij/(pc(i)*pc(j))));

endif min(temp)calcmle函式的實現如下:

function p=calcmle(x)

%利用系統函式計算均值和方差

phat=mle(x);

%計算最大似然值

p=1;

for i=1:length(x)

p=p*exp(-(x(i)-phat(1))^2/(2*phat(2)^2))/sqrt(2*pi*phat(2)^2);

endend

實驗資料檔案為,請複製後儲存為txt格式:

-2.01 -1.9

-1.8 -1.93

5.01 4.9

5.4 5.32

5.44 5.35

層次聚類演算法(一)

層次聚類 hierarchical clustering 試圖在不同層次上對資料集進行劃分,從而形成樹形的聚類結構,資料集的劃分可採用 自底向上 的聚合策略,也可以採用 自頂向下 的分拆策略。即層次聚類可以是凝聚的也可以是 的。凝聚的層次聚類方法使用自底向上的策略。即剛開始每個點都認為是乙個簇,然後...

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

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

層次聚類(1)

層次聚類演算法不同於其它演算法,主要體現在它不是只生成乙個分類結果,而是產生一系列原模式集合的分類結果,每個分類結果滿足一些限制。x 是n個l維特徵向量組成的集合,我們就是要對這個集合中的特徵向量分類。clustering r 是某個聚類結果,就叫他類簇吧,我想這樣叫,也許別人已經定義了類簇,但是我...