
- 機器學習基礎
- ML - 首頁
- ML - 簡介
- ML - 開始
- ML - 基本概念
- ML - 生態系統
- ML - Python 庫
- ML - 應用
- ML - 生命週期
- ML - 所需技能
- ML - 實現
- ML - 挑戰與常見問題
- ML - 限制
- ML - 真實案例
- ML - 資料結構
- ML - 數學基礎
- ML - 人工智慧
- ML - 神經網路
- ML - 深度學習
- ML - 獲取資料集
- ML - 分類資料
- ML - 資料載入
- ML - 資料理解
- ML - 資料準備
- ML - 模型
- ML - 監督學習
- ML - 無監督學習
- ML - 半監督學習
- ML - 強化學習
- ML - 監督學習 vs. 無監督學習
- 機器學習資料視覺化
- ML - 資料視覺化
- ML - 直方圖
- ML - 密度圖
- ML - 箱線圖
- ML - 相關矩陣圖
- ML - 散點矩陣圖
- 機器學習統計學
- ML - 統計學
- ML - 均值、中位數、眾數
- ML - 標準差
- ML - 百分位數
- ML - 資料分佈
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假設
- ML中的迴歸分析
- ML - 迴歸分析
- ML - 線性迴歸
- ML - 簡單線性迴歸
- ML - 多元線性迴歸
- ML - 多項式迴歸
- ML中的分類演算法
- ML - 分類演算法
- ML - 邏輯迴歸
- ML - K近鄰演算法 (KNN)
- ML - 樸素貝葉斯演算法
- ML - 決策樹演算法
- ML - 支援向量機
- ML - 隨機森林
- ML - 混淆矩陣
- ML - 隨機梯度下降
- ML中的聚類演算法
- ML - 聚類演算法
- ML - 基於質心的聚類
- ML - K均值聚類
- ML - K中心點聚類
- ML - 均值漂移聚類
- ML - 層次聚類
- ML - 基於密度的聚類
- ML - DBSCAN 聚類
- ML - OPTICS 聚類
- ML - HDBSCAN 聚類
- ML - BIRCH 聚類
- ML - 親和傳播
- ML - 基於分佈的聚類
- ML - 凝聚聚類
- ML中的降維
- ML - 降維
- ML - 特徵選擇
- ML - 特徵提取
- ML - 向後剔除法
- ML - 向前特徵構造
- ML - 高相關性過濾器
- ML - 低方差過濾器
- ML - 缺失值比率
- ML - 主成分分析
- 強化學習
- ML - 強化學習演算法
- ML - 利用與探索
- ML - Q學習
- ML - REINFORCE 演算法
- ML - SARSA 強化學習
- ML - 演員-評論家方法
- 深度強化學習
- ML - 深度強化學習
- 量子機器學習
- ML - 量子機器學習
- ML - 使用 Python 的量子機器學習
- 機器學習雜項
- ML - 效能指標
- ML - 自動工作流
- ML - 提升模型效能
- ML - 梯度提升
- ML - 自舉匯聚 (Bagging)
- ML - 交叉驗證
- ML - AUC-ROC 曲線
- ML - 網格搜尋
- ML - 資料縮放
- ML - 訓練和測試
- ML - 關聯規則
- ML - Apriori 演算法
- ML - 高斯判別分析
- ML - 成本函式
- ML - 貝葉斯定理
- ML - 精確率和召回率
- ML - 對抗性
- ML - 堆疊
- ML - 紀元
- ML - 感知器
- ML - 正則化
- ML - 過擬合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 資料洩露
- ML - 機器學習的商業化
- ML - 資料型別
- 機器學習 - 資源
- ML - 快速指南
- ML - 速查表
- ML - 面試問題
- ML - 有用資源
- ML - 討論
機器學習 - 層次聚類
層次聚類是另一種無監督學習演算法,用於將具有相似特徵的未標記資料點分組在一起。層次聚類演算法分為以下兩類:
凝聚層次演算法 - 在凝聚層次演算法中,每個資料點都被視為單個叢集,然後依次合併或凝聚(自下而上方法)成對的叢集。叢集的層次結構表示為樹狀圖或樹結構。
分裂層次演算法 - 另一方面,在分裂層次演算法中,所有資料點都被視為一個大的叢集,聚類過程涉及將一個大的叢集劃分為各種小的叢集(自上而下方法)。
執行凝聚層次聚類的步驟
我們將解釋最常用和最重要的層次聚類,即凝聚聚類。執行此操作的步驟如下:
步驟 1 - 將每個資料點視為單個叢集。因此,我們開始時將有 K 個叢集。資料點的數量開始時也為 K。
步驟 2 - 在此步驟中,我們需要透過連線兩個最接近的資料點來形成一個大的叢集。這將導致總共 K-1 個叢集。
步驟 3 - 現在,為了形成更多叢集,我們需要連線兩個最接近的叢集。這將導致總共 K-2 個叢集。
步驟 4 - 現在,為了形成一個大的叢集,重複上述三個步驟,直到 K 變為 0,即沒有更多的資料點可以連線。
步驟 5 - 最後,在形成一個大的集群后,將使用樹狀圖根據問題將其劃分為多個叢集。
樹狀圖在凝聚層次聚類中的作用
正如我們在最後一步中討論的那樣,一旦形成大的叢集,樹狀圖的作用就開始了。樹狀圖將用於根據我們的問題將叢集分割成多個相關資料點的叢集。這可以透過以下示例來理解:
示例 1
為了理解,讓我們從匯入所需的庫開始:
%matplotlib inline import matplotlib.pyplot as plt import numpy as np
接下來,我們將繪製本例中使用的數點:
X = np.array([[7,8],[12,20],[17,19],[26,15],[32,37],[87,75],[73,85], [62,80],[73,60],[87,96],]) labels = range(1, 11) plt.figure(figsize=(10, 7)) plt.subplots_adjust(bottom=0.1) plt.scatter(X[:,0],X[:,1], label='True Position') for label, x, y in zip(labels, X[:, 0], X[:, 1]): plt.annotate(label,xy=(x, y), xytext=(-3, 3),textcoords='offset points', ha='right', va='bottom') plt.show()
輸出
執行此程式碼時,它將生成以下繪圖作為輸出:

從上圖可以很容易地看出,我們的資料點中有兩個叢集,但在現實世界的資料中,可能有數千個叢集。
接下來,我們將使用 Scipy 庫繪製資料點的樹狀圖:
from scipy.cluster.hierarchy import dendrogram, linkage from matplotlib import pyplot as plt linked = linkage(X, 'single') labelList = range(1, 11) plt.figure(figsize=(10, 7)) dendrogram(linked, orientation='top',labels=labelList, distance_sort='descending',show_leaf_counts=True) plt.show()
它將生成以下繪圖:

現在,一旦形成大的叢集,就選擇最長的垂直距離。然後繪製一條垂直線穿過它,如下圖所示。由於水平線在兩點與藍線相交,因此叢集數量將為兩個。

接下來,我們需要匯入用於聚類的類並呼叫其fit_predict方法來預測叢集。我們正在匯入sklearn.cluster庫的AgglomerativeClustering類:
from sklearn.cluster import AgglomerativeClustering cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward') cluster.fit_predict(X)
接下來,使用以下程式碼繪製叢集:
plt.scatter(X[:,0],X[:,1], c=cluster.labels_, cmap='rainbow')
下圖顯示了我們資料點中的兩個叢集。

示例 2
正如我們在上面的簡單示例中理解了樹狀圖的概念一樣,讓我們轉向另一個示例,在該示例中,我們使用層次聚類建立 Pima 印第安人糖尿病資料集中的資料點的叢集:
import matplotlib.pyplot as plt import pandas as pd %matplotlib inline import numpy as np from pandas import read_csv path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8] patient_data = data.iloc[:, 3:5].values import scipy.cluster.hierarchy as shc plt.figure(figsize=(10, 7)) plt.title("Patient Dendograms") dend = shc.dendrogram(shc.linkage(data, method='ward')) from sklearn.cluster import AgglomerativeClustering cluster = AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward') cluster.fit_predict(patient_data) plt.figure(figsize=(7.2, 5.5)) plt.scatter(patient_data[:,0], patient_data[:,1], c=cluster.labels_, cmap='rainbow')
輸出
執行此程式碼時,它將生成以下兩個繪圖作為輸出:

