聚類分析之層次划分(Hierarchical、Birch)


       層次聚類算法使用數據的聯結規則,對數據集合進行層次似的聚類。層次聚類可以分為兩大類,自頂向下的分裂聚類和自頂而上的合並聚類。分裂聚類是將所有的對象看成一個聚類,然后將其不斷分解直至滿足終止條件。后者與前者相反,它先將每個對象各自作為一個原子聚類,然后對這些原子聚類逐層進行聚類,直至滿足終止條件。代表算法有:CURE、CHAMELEON、ROCK、Hierarchical等

      對於層次聚類常用的距離度量方法主要有最大距離、最小距離、平均距離等。一個算法使用最大距離度量距離的時候,稱為最遠鄰聚類算法。一個算法使用最小距離度量距離的時候,稱為鄰聚類算法。使用最小距離度量的聚合增長算法也稱為最小生成樹算法。當最近族的距離超過某個閥值時算法停止,稱為全連接算法。平均距離是對最大最小距離度量的折中,可以有效克服噪音和奇異點的影響。

算法:(以合並算法為例)

 setp1:每個樣本作為單獨一類(c1,c2,...cn)

setp2:計算每2類的距離d

setp3:找出最小的d,合並這2類

setp4:判斷剩余類數是否是達到預類數(可以自己設置),沒有達到,返回setp2,達到,跳出循環,輸出每層類別

優點:1,距離和規則的相似度容易定義,限制少;2,不需要預先制定聚類數;3,可以發現類的層次關系;4,可以聚類成其它形狀5.適用於任意形狀和任意屬性的數據集;靈活控制不同層次的聚類粒度,強聚類能力

缺點:1,計算復雜度太高;2,奇異值也能產生很大影響;3,算法很可能聚類成鏈狀4.大大延長了算法的執行時間,不能回溯處理;4.需要預設類別數

代碼:hierarchical為例

from sklearn.cluster import AgglomerativeClustering
from sklearn import datasets
from dask.array.learn import predict
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(y)
clf=AgglomerativeClustering(n_clusters=3)
predicted=clf.fit_predict(X)
print(predicted)
k2y = np.array([1,0,2])
print(k2y[predicted])
print((k2y[predicted] == y).astype(int).mean())

這樣的聚類精度為0.893

Biech算法

from sklearn.cluster import Birch
from sklearn import datasets
from dask.array.learn import predict
import numpy as np
iris = datasets.load_iris()
X = iris.data
y = iris.target
print(y)
clf=Birch(n_clusters=3)
predicted=clf.fit_predict(X)
print(predicted)
k2y = np.array([2,1,0])
print(k2y[predicted])
print((k2y[predicted] == y).astype(int).mean())

聚類精度為0.813


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM