(MATLAB)層次聚類

2021-10-02 12:08:54 字數 1430 閱讀 2821

齊敏《模式識別導論》

參考:論壇

close all;

clear all;

clc;

m=4;

n=2;

x=randn(m,n); %產生乙個m*n的隨機項矩陣,這裡用4*2矩陣,資料量較小

y=pdist(x); % 計算 x 中各對行向量的相互距離,得到的y為行向量

%y %進行檢視

y=squareform(y) %轉換為方陣更易於觀察

% z=linkage(y)

%dendrogram(z)

z=linkage(y); %產生層次聚類樹

dendrogram(z) %視覺化層次聚類樹

z %z是乙個(m-1)*3的矩陣,z陣列的前兩列是索引下標列,最後一列是距離列

效果圖如下:

其中,橫座標為index,縱座標為距離。比如,圖中2號和4號的距離為1.0228。

列印出來的:

分析:

對於上面圖中的y,其元素表示的是距離。比如第一行中,第一行第一列的0表示1號到1號的距離,第一行第二列的2.7916可以表示1號到2號的距離,第一行第三列的1.5193是1號到3號的距離,以此類推。

根據層次聚類的原理,按照輸出資料y算一下。先要找出y中非0的最小值。在矩陣y中是1.0228,位於第四行第二列,表示2號和4號的距離。因此先要將2號和4號合併起來歸為一類,標記為(m+1)號,即5號。之後更新1、3、5號之間的距離,1、3號之間的距離不變,在更新和5號之間的距離時,取最小的數值。這裡在算1、5號之間的距離時,5號裡面有2號和4號,1號和2、4號的距離分別是2.7916、2.3258,因此取較小的2.3258;同理,3和5號的距離取1.2027。得到以下幾個數值:1.5193(1、3的距離),2.3258(1、5的距離),1.2027(3、5的距離),之後再找這幾個數值中的最小值,min=1.2027,因此將3、5號聚為一類,即為6號。之後再更新距離,此時只剩下1和6號,算出二者的距離即可,為1.5193。

正如前面**中所提到的,z是乙個(m-1) x 3的矩陣,由於設定的m為4,故這裡z是乙個3 x 3的矩陣,z陣列的前兩列是索引下標列,最後一列是距離列。從矩陣z或者圖可以得知,第一次是將2號和4號進行合併,二者的距離是1.0228。第二次是將3號和5號進行聚類,距離1.2027。第三次是剩下的1號和6號進行聚類,距離1.5193,符合推斷。

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

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

層次聚類(1)

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

層次聚類簡介

層次聚類分為凝聚式層次聚類和 式層次聚類。凝聚式層次聚類,就是在初始階段將每乙個點都視為乙個簇,之後每一次合併兩個最接近的簇,當然對於接近程度的定義則需要指定簇的鄰近準則。式層次聚類,就是在初始階段將所有的點視為乙個簇,之後每次 出乙個簇,直到最後剩下單個點的簇為止。本文中我們將詳細介紹凝聚式層次聚...