柚子快報(bào)激活碼778899分享:MATLAB層次聚類分析
柚子快報(bào)激活碼778899分享:MATLAB層次聚類分析
實(shí)驗(yàn)題目
給出六個(gè)民族的出生死亡率,和他們的平均壽命,如下表所示
出生死亡率(%)平均壽命15.8070.5927.4467.1438.1165.48410.2158.8859.5159.8869.8160.47
MATLAB代碼
%聚類分析
%步驟
%1.樣本標(biāo)準(zhǔn)化
%2.計(jì)算各個(gè)樣本之間的距離
%3.選擇合適的方式聚類
clc
clear all
close all
X = [5.80 70.59
7.44 67.14
8.11 65.48
10.21 58.88
9.51 59.24
9.81 60.47
];
figure;
plot (X(:,1),X(:,2),'ro','MarkerSize',8,'LineWidth',1);
xlabel('x(1)')
ylabel('x(2)')
title('原始數(shù)據(jù)')
grid on
figure
Xn = zscore(X);%標(biāo)準(zhǔn)化
Y = pdist(Xn,'euclidean');%求距離
squareform(Y)%方便查看
Z = linkage(Y,'single');%類
dendrogram(Z);%畫(huà)圖
xlabel('樣本')
ylabel('類間距離')
title('層次聚類分析')
代碼分析
zscore ():這是一個(gè)歸一化的函數(shù),是用原始數(shù)據(jù)的均值和方差來(lái)進(jìn)行歸一化的,可把原始數(shù)據(jù)歸一化為均值為0、方差1的數(shù)據(jù),稱為z—score 標(biāo)準(zhǔn)化。這是進(jìn)行聚類的重要一步,我對(duì)其的理解就是不同特征之間的量綱可能相差很大,在進(jìn)行不同數(shù)據(jù)之間的距離計(jì)算時(shí),量綱大的權(quán)重較大,一些量綱較小的可能會(huì)被忽略掉,為了避免這種情況,所以要進(jìn)行歸一化。其它的歸一化函數(shù)還有最大最小標(biāo)準(zhǔn)化等。
pdist(): 這個(gè)函數(shù)是為了進(jìn)行數(shù)據(jù)之間求距離的,輸入為數(shù)組及以何種方式求距離,方式主要有歐式距離、馬氏距離、曼哈頓距離、切比雪夫距離、絕對(duì)值距離,輸出為每?jī)蓚€(gè)數(shù)據(jù)之間的距離。這一步是為了聚類做準(zhǔn)備。本文選擇的輸入方式為Y = pdist(X,Distance)。
method有以下幾種:
'euclidean':歐幾里德距離(默認(rèn))。
'squaredeuclidean':平方歐氏距離
'seuclidean':標(biāo)準(zhǔn)化歐氏距離
'mahalanobis':Mahalanobis
'cityblock':城市街區(qū)距離。
'minkowski':明考斯基距離
'chebychev':切比切夫距離
'hamming':Hamming距離
squareform():為了方便展示個(gè)個(gè)數(shù)據(jù)之間的距離,輸出為一個(gè)矩陣,例如矩陣中的位置(1,2)為第1個(gè)數(shù)據(jù)和第二個(gè)數(shù)據(jù)之間的距離。
linkage():是用指定的方法來(lái)進(jìn)行層次聚類,pdist()是計(jì)算兩個(gè)樣本之間的距離,linkage()是用指定的方法來(lái)算類與類之間的距離,然后把距離最近的化為一個(gè)新類,在計(jì)算新類與其它類的距離,再把距離最近的化為一個(gè)新類,重復(fù)以上操作直至只有一個(gè)類。本文選擇的輸入方式為 Z = linkage(X,method) 。
method有以下幾種:
Single:最短距離
Complete:最大距離
Average:平均距離
Centroid:重心距離
Ward:離差平方和
dendrogram():是把linkage()生成的數(shù)據(jù)畫(huà)成樹(shù)狀圖。
cluster():是根據(jù)linkage()創(chuàng)建分類。
不同層次聚類方法得到的實(shí)驗(yàn)結(jié)果圖
(1)重心法
得到的樹(shù)狀圖如圖1所示
圖1重心法
(2)最短距離法
圖2最短距離法
(3)最長(zhǎng)距離法
圖3.最長(zhǎng)距離法
(4)類平均法
圖4.類平均法
(5)離差平方和法
圖5.離差平方和法
?以上5組實(shí)驗(yàn)樣本之間求距離的方式均為歐式距離,于是我有做了一組絕對(duì)值距離的實(shí)驗(yàn),層次聚類的方法為最大距離法。實(shí)驗(yàn)結(jié)果如圖6所示
圖6.絕對(duì)值距離
實(shí)驗(yàn)總結(jié)
通過(guò)本次課程及實(shí)驗(yàn),我對(duì)層次聚類的概念的理解不再是迷茫模糊了,而是能夠?qū)σ恍┖?jiǎn)單的數(shù)據(jù)進(jìn)行層次聚類了,下面我以實(shí)驗(yàn)中的最短距離法實(shí)驗(yàn)為基礎(chǔ)來(lái)闡述如何進(jìn)行層次聚類。
(1)首先,得到數(shù)據(jù)后應(yīng)進(jìn)行數(shù)據(jù)的歸一化。這是為了消除由與不同特征之間數(shù)量級(jí)相差過(guò)大的影響。就如同本實(shí)驗(yàn)的數(shù)據(jù)一樣,出生率基本都在10以內(nèi),平均壽命基本都大于50,當(dāng)去除歸一化函數(shù)后得到的結(jié)果如圖7所示,4和5被劃為了一類,而不是其他實(shí)驗(yàn)的5和6為一類。這是應(yīng)為4與5平均壽命的差值小于5和6的差值,平均壽命的數(shù)量級(jí)大,其在計(jì)算距離時(shí)的權(quán)重也大。這才相差一個(gè)數(shù)量級(jí),如果數(shù)量級(jí)相差過(guò)大,那么小數(shù)量級(jí)的特征將會(huì)不起作用,分出類的可靠性也會(huì)降低。
圖7.沒(méi)有進(jìn)行歸一化的分類結(jié)果
(2)算出不同數(shù)據(jù)之間的距離。樣本之間距離的計(jì)算方法有好幾種,應(yīng)該根據(jù)樣本的特征選擇合適的方法。最短距離法實(shí)驗(yàn)中各樣本的距離如下圖8所示(數(shù)組表示,(1,5)表示1和5之間的距離。)
圖8.各個(gè)樣本之間的距離
(3)先把每個(gè)數(shù)據(jù)當(dāng)成一個(gè)類,把距離最近的兩個(gè)類化為一個(gè)新類,計(jì)算該新類由其他類之間的距離。根據(jù)圖8可以看出樣本5和6之間的距離最近所以把5,6歸為一新類7。由于層次聚類方法為最小距離法,所以類1,2,3,4和新類7之間的距離取它們各自內(nèi)部的樣本與5,6距離的最近值,即它們與7之間的距離分別為3.1728,1.9728,1.4484,0.4065。
(4)再把距離最近的兩類歸為一個(gè)新類,再計(jì)算新類與其他類之間的距離。再加入新類7后,類1,2,3,4,7之間最近的距離為4,7之間的距離,所以4,7化為新類8。根據(jù)最小距離法,類1,2,3與8之間的距離分別為3.1728,1.9728,1.4484。
(5)重復(fù)步驟(4),直至所有樣本歸為一個(gè)類。類1,2,3,8,之間距離最近的為2,3之間的距離0.5259,所以2,3劃為新類9。根據(jù)最小距離法,類1,8與9之間的距離分別為1.2077,1.4484。而1,8之間的距離為3.1728,所以1,9劃為新類10。8和10之間的距離為1.4484,它們?cè)贇w為新類11,至此,所有樣本歸為一類,聚類結(jié)束。MATLAB中聚類過(guò)程如下圖9所示,與我說(shuō)的過(guò)程一致。
圖9. MATLAB中聚類過(guò)程
柚子快報(bào)激活碼778899分享:MATLAB層次聚類分析
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。