- 机器学习基础
- 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 参数的选择敏感,该参数控制收敛速度。
它可能产生许多小的聚类或只有一个或几个成员的聚类,这些聚类可能没有意义。
可能难以解释生成的聚类,因为该算法没有提供关于聚类含义或特征的明确信息。