層次聚類 R

2021-08-07 23:44:09 字數 1603 閱讀 1116

層次聚類,又稱為系統聚類。聚類首先要清晰地定義樣本之間的距離關係,距離較近的為一類,較遠的則屬於不同的一類。層次聚類的計算步驟是首先將每個樣本單獨作為一類,然後將不同類之間最近的進行合併,合併後重新計算類間距。這個過程一直持續到將所有樣本歸為一類為之。

在計算類間距時有6中不同的常用方法:

最短距離、最長距離、類平均、重心、中間距離、離差平方和法。

r中實現的函式是stats包中的hclust。該函式重要的引數包括:

樣本間的距離矩陣、以及計算類間距離的方法

看乙個例子:

首先提取iris資料中的4個資料變數,標準化後計算其歐式距離矩陣。

data

means

datascale

dist

根據矩陣繪製熱圖,從圖中可以看出顏色越深表示樣本間距離越近,大致上可以區分出三到四個區塊,其樣本之間距離比較近。

heatmap(as.matrix(dist),labrow = f,labcol = f)  ###繪製熱圖

最後使用hclust函式建立聚類模型,將結果存在clustemodel變數中,其中ward引數是將類間距離計算方法設定為離差平方和法。

cutree函式可以提取每個樣本所屬的類別,如果設定類別為3類

clustemodel 

result

(clustemodel,k=3)

table

(iris[,5],result)

觀察真實的類別與聚類之間的差別,virginica類錯分了23個樣本

result12

3 setosa 4910

versicolor 0500

virginica 0

2327

畫出聚類樹圖

層次聚類對於資料規模小的資料比較適合

聚類前無需確定聚類個數,之後切分組可根據業務知識/聚類樹圖特徵

若樣本量很大,嘗試使用fastcluster包進行快速層次聚類

library(fastcluster)

clustemodel

聚類需要將距離矩陣作為輸入,所以聚類的關鍵是距離計算方法的選擇,這種選擇很大程度地影響聚類的效果,而這種選擇往往依賴具體的引用場景。

r中一些常規的距離可以通過dist得到,其他一些比較特殊的距離需要載入proxy包。

若遇到二分類變數,可採用傑卡德(jaccard)方法計算他們之間的距離。(method=「jaccard」)

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

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

層次聚類(1)

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

層次聚類簡介

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