''' 凝聚層次算法:首先假定每個樣本都是一個獨立的聚類,如果統計出來的聚類數大於期望的聚類數,則從每個樣本出發尋找離自己最近的另一個樣本, 與之聚集,形成更大的聚類,同時令總聚類數減少,不斷重復以上過程,直到統計出來的聚類數達到期望值為止。 凝聚層次算法的特點: 1.聚類數k必須事先已知。借助某些評估指標,優選最好的聚類數。 2.沒有聚類中心的概念,因此只能在訓練集中划分聚類,但不能對訓練集以外的未知樣本確定其聚類歸屬。不能預測。 3.在確定被凝聚的樣本時,除了以距離作為條件以外,還可以根據連續性來確定被聚集的樣本。 凝聚層次算法相關API: # 凝聚層次聚類器 model = sc.AgglomerativeClustering(n_clusters=4) pred_y = model.fit_predict(x) # 返回值為當前樣本所屬類別 案例:重新加載multiple3.txt,使用凝聚層次算法進行聚類划分。 ''' import numpy as np import matplotlib.pyplot as mp import sklearn.cluster as sc # 讀取數據,繪制圖像 x = np.loadtxt('./ml_data/multiple3.txt', unpack=False, dtype='f8', delimiter=',') print(x.shape) # 基於Agglomerativeclustering完成聚類 model = sc.AgglomerativeClustering(n_clusters=4) pred_y = model.fit_predict(x) print(pred_y) # 畫圖顯示樣本數據 mp.figure('Agglomerativeclustering', facecolor='lightgray') mp.title('Agglomerativeclustering', fontsize=16) mp.xlabel('X', fontsize=14) mp.ylabel('Y', fontsize=14) mp.tick_params(labelsize=10) mp.scatter(x[:, 0], x[:, 1], s=80, c=pred_y, cmap='brg', label='Samples') mp.legend() mp.show() 輸出結果: (200, 2) [1 1 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 0 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 1 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 0 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 1 0 2 1 1 0 2 1 3 0 2 1 3 0 3 1 3 0 2 1 3 0 2 1 1 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2]