黎曼流形上的K-Means聚类
文章目录黎曼流形上的K-Means聚类数据生成聚类黎曼流形上的K-Means聚类KMeans最非常简单的一种聚类方法其目的是将样本分割为k个簇其基本流程是选择k个点作为k个簇的初始质心计算样本到这k个质心(簇)的距离并将其划入距离最近的簇中计算每个簇的均值并使用该均值更新簇的质心重复上述2-3的操作直到质心区域稳定或者达到最大迭代次数。常规的KMeans算法默认在欧式空间中进行也就是说在计算距离的时候采取平直的欧式距离。但在某些特殊情况下比如下面这种球面上的点从直觉来说更应该采取测地线作为计算距离的依据。Python的【geomstats】库可以轻松做到这一点。本文是geomstats的官方教程。数据生成我们要做的是在球面上随机生成两簇数据并且将这两簇数据随机旋转一个角度代码如下。importnumpyasnpimportgeomstats.backendasgs np.random.seed(1)gs.random.seed(1000)fromgeomstats.geometry.hypersphereimportHyperspherefromgeomstats.geometry.special_orthogonalimportSpecialOrthogonal sphereHypersphere(dim2,equipFalse)clustersphere.random_von_mises_fisher(kappa20,n_samples140)SO3SpecialOrthogonal(3,equipFalse)rotation1SO3.random_uniform()rotation2SO3.random_uniform()c1cluster rotation1 c2cluster rotation2 datags.concatenate((c1,c2),axis0)【Hypersphere】用于生成一个嵌入到n 1 n1n1维空间中的n nn维单位超球面。在上述代码中生成了一个三维空间中的二维球面。【random_von_mises_fisher】可在超球面上生成符合von Mises-Fisher (vMF) 分布的随机样本vMF可以理解为超球面上的高斯分布其kappa为浓度参数对标高斯分布中的1 σ 2 \frac{1}{\sigma^2}σ21​n_samples为点数。【SpecialOrthogonal】生成一个特殊正交群S O ( n ) SO(n)SO(n)表示n nn维空间中的旋转群。上述代码中用random_uniform方法生成了两个随机的三维旋转矩阵。在生成数据之后可通过visualization函数对数据进行可视化代码如下。importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif]Times New Romanimportgeomstats.visualizationasvisualization figplt.figure(figsize(15,15))axvisualization.plot(c1,spaceS2,colorred,alpha0.7,labelData points 1 )axvisualization.plot(c2,spaceS2,axax,colorblue,alpha0.7,labelData points 2)ax.auto_scale_xyz([-1,1],[-1,1],[-1,1])ax.legend()plt.show()聚类【RiemannianKMeans】是geomstats中用于在黎曼流形上执行 K-Means 聚类的算法类。其不可缺省的参数有而分别是【metric】定义流形几何结构的度量对象算法依赖它来计算测地线距离和Fréchet均值。【n_clusters】: 聚类的簇数简单来说我们需要在生成数据的超球面中定义一个黎曼K-Means算法类。然后调用其中的fit方法对前面创建的数据集data进行分类。代码如下fromgeomstats.learning.kmeansimportRiemannianKMeans manifoldHypersphere(dim2)kmeansRiemannianKMeans(manifold,2,tol1e-3)kmeans.fit(data)labelskmeans.labels_ censkmeans.cluster_centers_ figplt.figure(figsize(15,15))colors[red,blue]axvisualization.plot(data,spaceS2,marker.,colorgrey)foriinrange(2):axvisualization.plot(pointsdata[labelsi],axax,spaceS2,marker.,colorcolors[i])fori,cinenumerate(cens):axvisualization.plot(c,axax,spaceS2,marker*,s2000,colorcolors[i])ax.auto_scale_xyz([-1,1],[-1,1],[-1,1])plt.show()聚类效果如下

相关新闻

企业微信外部群智能自动回复:基于RPA接口的关键词匹配方案

企业微信外部群智能自动回复:基于RPA接口的关键词匹配方案

在私域流量运营和客户服务场景中,社群的及时响应速度直接影响到客户的留存率与满意度。企业微信官方虽然提供了部分基础的自动回复功能,但在外部群(包含外部客户的群聊)中,往往无法灵活对接自定义的知识库或关键词触发…

2026/11/2 10:00:05 阅读更多 →
【java项目分享】springboot阅读推荐平台10600

【java项目分享】springboot阅读推荐平台10600

源码获取 私信联系我即可~ 大家点赞、收藏、关注、评论啦 精彩专栏推荐订阅:在下方专栏👇🏻 👇🏻 精彩专栏 推荐订阅👇🏻 Java精品项目案例【2000套】 Java精品项目案例【2000套】https://blog…

2026/11/2 10:44:16 阅读更多 →
14 篇:PCIe 常见问题排查清单(经验篇)

14 篇:PCIe 常见问题排查清单(经验篇)

目录 第 14 篇:PCIe 常见问题排查清单(经验篇) 一、设备不识别怎么办?(从“完全看不见”到“看得见”) 一、先给一句“保命结论”

2026/11/3 1:41:05 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/3 10:57:27 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/3 10:47:27 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/3 10:57:33 阅读更多 →

日新闻

周新闻

月新闻