
- 機器學習基礎
- 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 - 監督學習與無監督學習
- 機器學習資料視覺化
- 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 - 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 - 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 - 討論
機器學習 - 親和傳播
親和傳播是一種聚類演算法,它識別資料集中的“示例”,並將每個資料點分配給這些示例中的一個。這是一種不需要預先指定聚類數量的聚類演算法,使其成為探索性資料分析的有用工具。親和傳播由 Frey 和 Dueck 於 2007 年提出,此後已廣泛應用於生物學、計算機視覺和社交網路分析等許多領域。
親和傳播背後的思想是迭代更新兩個矩陣:責任矩陣和可用性矩陣。責任矩陣包含有關每個資料點作為另一個數據點的示例的合適程度的資訊,而可用性矩陣包含有關每個資料點希望選擇另一個數據點作為示例的程度的資訊。該演算法在更新這兩個矩陣之間交替進行,直到達到收斂為止。最終的示例是根據責任矩陣中的最大值選擇的。
Python 實現
在 Python 中,Scikit-learn 庫提供了 AffinityPropagation 類來實現親和傳播演算法。該類採用多個引數,包括 preference 引數(控制選擇的示例數量)和 damping 引數(控制演算法的收斂速度)。
以下是如何使用 Python 中的 Scikit-learn 庫實現親和傳播的示例:
示例
from sklearn.cluster import AffinityPropagation from sklearn.datasets import make_blobs import matplotlib.pyplot as plt # generate a dataset X, _ = make_blobs(n_samples=100, centers=4, random_state=0) # create an instance of the AffinityPropagation class af = AffinityPropagation(preference=-50) # fit the model to the dataset af.fit(X) # print the cluster labels and the exemplars print("Cluster labels:", af.labels_) print("Exemplars:", af.cluster_centers_indices_) #Plot the result plt.figure(figsize=(7.5, 3.5)) plt.scatter(X[:, 0], X[:, 1], c=af.labels_, cmap='viridis') plt.scatter(af.cluster_centers_[:, 0], af.cluster_centers_[:, 1], marker='x', color='red') plt.show()
在這個示例中,我們首先使用 Scikit-learn 的 make_blobs() 函式生成一個合成數據集。然後,我們建立一個 preference 值為 -50 的 AffinityPropagation 類的例項,並使用 fit() 方法將模型擬合到資料集。最後,我們列印聚類標籤和演算法識別的示例。
輸出
執行此程式碼時,它將生成以下圖表作為輸出:

此外,它將在終端列印以下輸出:
Cluster labels: [3 0 3 3 3 3 1 0 0 0 0 0 0 0 0 2 3 3 1 2 2 0 1 2 3 1 3 3 2 2 2 0 2 2 1 3 0 2 0 1 3 1 0 1 1 0 2 1 3 1 3 2 1 1 1 0 0 2 2 0 0 2 2 3 2 0 1 1 2 3 0 2 3 0 3 3 3 1 2 2 2 0 1 1 2 1 2 2 3 3 3 1 1 1 1 0 0 1 0 1] Exemplars: [9 41 51 74]
親和傳播中的 preference 引數控制選擇的示例數量。較高的 preference 值會導致更多示例,而較低的 preference 值會導致更少示例。damping 引數控制演算法的收斂速度,較大的 damping 值會導致較慢的收斂。
總的來說,親和傳播是一種強大的聚類演算法,可以自動識別聚類數量,並且不需要預先指定聚類數量。但是,它可能計算成本很高,並且可能不適用於非常大的資料集。
親和傳播的優點
以下是使用親和傳播的優點:
親和傳播可以自動識別聚類數量,而無需預先指定聚類數量。
它可以處理任意形狀和大小的聚類。
它可以處理具有噪聲或不完整資料的資料集。
它對初始引數的選擇相對不敏感。
它已被證明在某些型別的資料集上優於其他聚類演算法。
親和傳播的缺點
以下是使用親和傳播的一些缺點:
對於大型資料集或具有許多特徵的資料集,它可能計算成本很高。
它可能收斂到次優解,尤其是在資料具有高度可變性或噪聲的情況下。
它可能對 damping 引數的選擇敏感,該引數控制收斂速度。
它可能產生許多小的聚類或只有一個或幾個成員的聚類,這些聚類可能沒有意義。
可能難以解釋生成的聚類,因為該演算法沒有提供關於聚類含義或特徵的明確資訊。