拓冰建站拓冰建站
首页 / 资讯中心 / 正文

在不同空间中展示数据(欧式、球面、庞加莱圆盘)

文章目录欧式空间超球面双曲空间本文参照了Geomstats的官方教程对不同流形上的数据进行了展示。欧式空间我们平时接触最多的就是欧式空间在geomstats中可创建一个Euclidean对其实现。下面创建一个欧氏空间并计算其上两个随机点的平均值效果如下没什么好说的初中几何。importgeomstats.backendasgs gs.random.seed(2020)fromgeomstats.geometry.euclideanimportEuclidean euclideanEuclidean(dim2,equipFalse)ptsLSeuclidean.random_point(n_samples2)avggs.sum(ptsLS,axis0)/2importmatplotlib.pyplotasplt plt.rcParams[font.sans-serif]Times New Romanaxplt.subplot()ax.scatter(ptsLS[:,0],ptsLS[:,1],labelPoints)ax.plot(ptsLS[:,0],ptsLS[:,1],linestyledashed)ax.scatter(gs.to_numpy(avg[0]),gs.to_numpy(avg[1]),labelMean,s80,alpha0.5)ax.set_title(Mean of points in a linear space)ax.legend()plt.show()超球面同样是求平均值的问题如果挪用到超球面上那么问题可能会发生变化。按照欧式空间的做法球面上任意两点其平均值一定不在球面上为了让平均值操作在球面上仍然有意义就需要在测地线上取平均值。在geomstats中通过实现【Hypersphere】对象即可创建一个超球面最终求得平均值如下fromgeomstats.geometry.hypersphereimportHypersphere sphereHypersphere(dim2,equipFalse)ptsHypersphere.random_point(n_samples2)avggs.sum(ptsHyper,axis0)/2importgeomstats.visualizationasvisualization axplt.subplot(projection3d)visualization.plot(ptsHyper,axax,spaceS2,labelPoint,s80)ax.plot(ptsHyper[:,0],ptsHyper[:,1],ptsHyper[:,2],linestyledashed,alpha0.5)ax.scatter(avg[0],avg[1],avg[2],labelMean,s80,alpha0.5)ax.set_title(Mean of points on a manifold)ax.legend()plt.show()绘图代码中S2表示三维球面。双曲空间karate_graph数据集是一组关于社交关系的网络常被用于图上聚类的研究。下面调用这组数据集并在庞加莱圆盘上展示这组数据效果如下在庞加莱圆盘中圆盘中心处图形的大小看起来是正常的但越靠近圆盘的边缘图形在视觉上就变得越小而圆盘的圆周则直接表示无穷远。如果将上图画在欧式空间中外围的点间距离会迅速变大影响读图。代码如下importgeomstats.datasets.utilsasdata_utils karate_graphdata_utils.load_karate_graph()fromgeomstats.datasets.prepare_graph_dataimportHyperbolicEmbedding hyperbolic_embeddingHyperbolicEmbedding(max_epochs20)embeddingshyperbolic_embedding.embed(karate_graph)diskvisualization.PoincareDisk(coords_typeball)axplt.subplot()disk.set_ax(ax)disk.draw(axax)ax.scatter(embeddings[:,0],embeddings[:,1])plt.show()【HyperbolicEmbedding】是用于计算庞加莱嵌入的类随后调用【embed】方法将karate_graph数据嵌入到双曲空间中经过20轮迭代即可将其绘制在庞加莱圆盘上。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门