層次聚類試圖在不同層次對資料集進行劃分,從而形成樹形的聚類結構。 資料集的劃分可採用"自底向上"的聚合策略,也可採用"自頂向下" 的分拆策略。層次聚類可以分為凝聚層次聚類和**層次聚類。**層次聚類採用的就是"自頂而下"的思想,先將所有的樣本都看作是同乙個簇,然後通過迭代將簇劃分為更小的簇,直到每個簇中只有乙個樣本為止。凝聚層次聚類採用的是"自底向上"的思想,先將每乙個樣本都看成是乙個不同的簇,通過重複將最近的一對簇進行合併,直到最後所有的樣本都屬於同乙個簇為止。目前,比較常用的層次聚類演算法是"自底向上"的凝聚層次聚類,比較流行的演算法有 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了。那如何把這個流程做的智慧型化些呢?我們可以引入機器學習中的聚類,它可以將商家相關...