基于凸集上投影(POCS)的聚类算法

POCS:Projections  onto Convex Sets。在数学中,凸集是指其中任意两点间的线段均在该集合内的集合。而投影则是将某个点映射到另一个空间中的某个子空间上的操作。给定一个凸集合和一个点,可以通过找到该点在该凸集合上的投影来进行操作。该投影是离该点最近的凸集内的点,可以通过最小化该点和凸集内任何其他点之间的距离来计算。既然是投影,那么我们就可以将特征映射到另一个空间中的凸集合上,这样就可以进行聚类或降维等操作。

本文综述了一种基于凸集投影法的聚类算法,即基于POCS的聚类算法。原始论文发布在IWIS2022上。

凸集

凸集定义为一个数据点集合,其中连接集合中任意两点x1和x2的线段完全包含在这个集合中。根据凸集的定义,认为空集∅、单集、线段、超平面、欧氏球都被认为是凸集。数据点也被认为是凸集,因为它是单例集(只有一个元素的集合)。这为 POCS 的概念应用于聚类数据点开辟了一条新路径。

凸集投影(POCS)

POCS方法大致可分为交替式和并行式两种。

1、交替式poc

从数据空间中的任意一点开始,从该点到两个(或多个)相交凸集的交替投影将收敛到集合交点内的一点,例如下图:

基于凸集上投影(POCS)的聚类算法

当凸集不相交时,交替投影将收敛到依赖于投影阶数的greedy limit cycles。

基于凸集上投影(POCS)的聚类算法

2、并行式 POCS

与交替形式不同,并行的POCS 是从数据点到所有凸集同时进行投影,并且每个投影都有一个重要性权重。对于两个非空相交凸集,类似于交替式版本,平行投影会收敛到集相交处的一个点。

基于凸集上投影(POCS)的聚类算法

在凸集不相交的情况下,投影将收敛到一个最小解。基于pocs的聚类算法的主要思想来源于这一特性。

基于凸集上投影(POCS)的聚类算法

有关POCS的更多细节,可以查看原论文

基于pocs的聚类算法

利用并行POCS方法的收敛性,论文作者提出了一种非常简单但在一定程度上有效的聚类算法。该算法的工作原理与经典的K-Means算法类似,但在处理每个数据点的方式上存在差异:K-Means算法对每个数据点的重要性加权相同,但是基于pocs的聚类算法对每个数据点的重要性加权不同,这与数据点到聚类原型的距离成正比。

算法的伪代码如下所示:

基于凸集上投影(POCS)的聚类算法

实验结果

作者在一些公共基准数据集上测试了基于pocs的聚类算法的性能。下表总结了这些数据集的描述。

基于凸集上投影(POCS)的聚类算法

作者比较了基于pocs的聚类算法与其他传统聚类方法的性能,包括k均值和模糊c均值算法。下表总结了执行时间和聚类错误方面的评估。

基于凸集上投影(POCS)的聚类算法

基于凸集上投影(POCS)的聚类算法

聚类结果如下图所示:

基于凸集上投影(POCS)的聚类算法

示例代码

我们在一个非常简单的数据集上使用这个算法。作者已经发布了直接使用的包,对于应用我们可以直接使用:

pip install pocs-based-clustering

登录后复制

创建一个以10个簇为中心的5000个数据点的简单数据集:

# Import packages import time import matplotlib.pyplot as plt  from sklearn.datasets import make_blobs from pocs_based_clustering.tools import clustering   # Generate a simple dataset num_clusters = 10 X, y = make_blobs(n_samples=5000, centers=num_clusters,  cluster_std=0.5, random_state=0)  plt.figure(figsize=(8,8)) plt.scatter(X[:, 0], X[:, 1], s=50) plt.show()

登录后复制

基于凸集上投影(POCS)的聚类算法

执行聚类并显示结果:

# POSC-based Clustering Algorithm centroids, labels = clustering(X, num_clusters, 100)  # Display results plt.figure(figsize=(8,8)) plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis') plt.scatter(centroids[:, 0], centroids[:, 1], s=100, c='red') plt.show()

登录后复制

基于凸集上投影(POCS)的聚类算法

总结

我们简要回顾了一种简单而有效的基于投影到凸集(POCS)方法的聚类技术,称为基于POCS的聚类算法。该算法利用POCS的收敛特性应用于聚类任务,并在一定程度上实现了可行的改进。在一些基准数据集上验证了该算法的有效性。

论文的地址如下:https://arxiv.org/abs/2208.08888

作者发布的源代码在这里:https://github.com/tranleanh/pocs-based-clustering

以上就是基于凸集上投影(POCS)的聚类算法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2238357.html

(0)
上一篇 2025年2月26日 19:22:44
下一篇 2025年2月21日 03:34:40

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python中的朴素贝叶斯算法是什么?

    python中的朴素贝叶斯算法是指一种基于贝叶斯定理的分类算法,它利用所谓的“朴素”的假设,即各个特征之间是独立的,从而对文本进行分类。在机器学习领域,朴素贝叶斯算法已经成为一种广泛应用的算法,并且被用于众多领域,如垃圾邮件过滤、情感分析等…

    编程技术 2025年2月26日
    200
  • Python中的LDA算法是什么?

    lda(latent dirichlet allocation,潜在狄利克雷分配)是一种主题模型,用于将文档集合分解成多个主题,并为每个主题分配单词概率分布。它是一种非监督学习算法,在文本挖掘、信息检索和自然语言处理等领域有着广泛的应用。 …

    编程技术 2025年2月26日
    200
  • Python中的PCA算法是什么?

    pca(principal component analysis)即主成分分析,在机器学习和数据分析中是一种用于降维处理的算法,常被用于对高维数据压缩和可视化。在python中,我们可以使用scikit-learn库来实现pca算法。 一、…

    编程技术 2025年2月26日
    200
  • Python中的强化学习算法有哪些?

    随着人工智能技术的发展,强化学习作为一种重要的人工智能技术,已经被广泛应用于许多领域,例如控制系统、游戏等。python作为一种流行的编程语言,也提供了许多强化学习算法的实现。本文将介绍python中常用的强化学习算法及其特点。 Q-lea…

    编程技术 2025年2月26日
    200
  • Python中的梯度下降算法是什么?

    python中的梯度下降算法是什么? 梯度下降算法是一种常用的数学优化技术,用于找到一个函数的最小值。该算法以迭代的方式逐步更新函数的参数值,使其朝着局部最小值的方向移动。在Python中,梯度下降算法被广泛应用于机器学习、深度学习、数据科…

    编程技术 2025年2月26日
    200
  • Python中的集合和frozenset是如何实现的?

    Python中的集合(set)和不可变集合(frozenset)是两种用于存储唯一元素的数据结构。它们分别属于可变和不可变对象,因此它们具有不同的性质和用法。本文将详细介绍集合和frozenset在Python中的实现方式,并提供具体代码示…

    2025年2月26日
    200
  • Python 字典与其他数据结构的比较:优缺点大揭秘

    python 字典是一种非常强大的数据结构,它允许用户存储键值对,并可以通过键来快速访问值。这使得字典非常适合存储和检索数据,特别是当数据是无序的或者需要快速查找某个特定元素时。 与其他数据结构相比,字典具有以下优点: 快速查找和访问:字典…

    2025年2月26日
    200
  • PHP如何在MongoDB中创建集合

    php如何在mongodb中创建集合 概述:MongoDB是一种非关系型数据库,其灵活的架构使得它能够存储大量的非结构化数据。在使用MongoDB时,创建集合是必不可少的一步。本文将介绍如何使用PHP在MongoDB中创建集合,并提供相应的…

    编程技术 2025年2月23日
    200
  • mongodb固定集合(Capped Collection)和大文件管理(GridFS)

    CappedCollection 查看集合的状态信息db.cot1.stats(); // 查看集合cot1的状态信息 删掉指定集合db.collection1.drop(); // 删除collection1集合 mongoDB中集合创建…

    2025年2月21日
    200
  • 用SQL进行集合运算

    这篇文章主要介绍了关于用SQL进行集合运算 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 1、比较表和表 drop table if exists tbl_a;create table tbl_a(key1 varchar…

    数据库 2025年2月20日
    200

发表回复

登录后才能评论