機器學習實戰 層次聚類演算法

2021-09-10 04:37:18 字數 2771 閱讀 6456

層次聚類試圖在不同層次對資料集進行劃分,從而形成樹形的聚類結構。 資料集的劃分可採用"自底向上"的聚合策略,也可採用"自頂向下" 的分拆策略。層次聚類可以分為凝聚層次聚類和**層次聚類。**層次聚類採用的就是"自頂而下"的思想,先將所有的樣本都看作是同乙個簇,然後通過迭代將簇劃分為更小的簇,直到每個簇中只有乙個樣本為止。凝聚層次聚類採用的是"自底向上"的思想,先將每乙個樣本都看成是乙個不同的簇,通過重複將最近的一對簇進行合併,直到最後所有的樣本都屬於同乙個簇為止。目前,比較常用的層次聚類演算法是"自底向上"的凝聚層次聚類,比較流行的演算法有 birch、agnes,birch 的演算法可以參考文章1和文章2。本文主要介紹 agnes 演算法,其演算法思想描述如下:

關於兩個簇最近距離的計算有:最短距離、最長距離、平均距離三種常見的方法。設定 ci,

cjc_i,c_j

ci​,cj

​ 為兩個聚類簇,x,z

x,zx,

z 為兩個簇中的樣本點集合。

最短距離:把兩個簇中距離最短的兩個樣本點間的距離作為簇間最近距離。數學公式如下:

最長距離:把兩個簇中距離最大的兩個樣本點間的距離作為簇間最近距離。數學公式如下:

平均距離:把兩個簇中各樣本點距離的平均值作為簇間最近距離。數學公式如下:

主要引數說明:

from sklearn.cluster import agglomerativeclustering

from sklearn.metrics import adjusted_rand_score

from sklearn.datasets import make_blobs

import matplotlib.pyplot as plt

plt.rcparams[

'font.sans-serif']=

['simhei'

]#中文顯示問題

plt.rcparams[

'axes.unicode_minus']=

false

#負數顯示問題

#獲取資料

n_samples =

1500

random_state =

170x,labels_true = make_blobs(n_samples=n_samples, random_state=random_state)

# 聚類的個數

nums =

range(1

,50)# 獲取不同聚類個數ari值的函式

deftest_agglomerativeclustering_nclusters

(x,labels_true,nums)

: aris =

for num in nums:

#定義聚類物件

clst = agglomerativeclustering(n_clusters=num)

#訓練物件並**

predicted_lables = clst.fit_predict(x)

)return

(aris)

aris = test_agglomerativeclustering_nclusters(x,labels_true,nums)

# 繪製ari值與聚類個數的圖形

plt.plot(nums,aris,marker=

"+")

# 由ari值的影象知,最適合的為三類

clf = agglomerativeclustering(n_clusters=3)

y_predict = clf.fit_predict(x)

# 原始影象

plt.subplot(1,

2,1)

plt.scatter(x[:,

0],x[:,1

],c=labels_true)

plt.title(

'原始影象'

)# 聚類之後的影象

plt.subplot(1,

2,2)

plt.scatter(x[:,

0],x[:,1

],c=y_predict)

plt.title(

'**影象'

層次聚類的樹狀熱圖可以通過 seaborn.clustermap 函式呼叫繪製。

聚類演算法 KMeans 機器學習實戰

直接上 coding utf8 time 2018 4 12 下午05 33 author yjfiejd file k means 3.py from numpy import import time import matplotlib.pyplot as plt 1 先定義3個函式,第乙個函式為...

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

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

機器學習實戰(二) 聚類

回想專案中遇到的,多商家資訊融合的場景。我們如何把多商家的資訊進行合理的匹配呢?首先想到的是人工匹配和程式匹配相結合。這樣也可以實現,但費心費力,且實際匹配效果很差,如果商家融合資訊呈指數級增長,這樣的方式就太low了。那如何把這個流程做的智慧型化些呢?我們可以引入機器學習中的聚類,它可以將商家相關...