sklearn之基於凝聚層次算法的聚類


'''
    凝聚層次算法:首先假定每個樣本都是一個獨立的聚類,如果統計出來的聚類數大於期望的聚類數,則從每個樣本出發尋找離自己最近的另一個樣本,
                與之聚集,形成更大的聚類,同時令總聚類數減少,不斷重復以上過程,直到統計出來的聚類數達到期望值為止。

            凝聚層次算法的特點:
                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]

  


免責聲明!

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



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