🍠Python(C++)植入团图嵌入降维算法

🏈指点迷津 | Brief

🎯要点

🎯图嵌入算法使用欧几里得和双曲嵌入 | 🎯对矢量空间网络节点迭代嵌入和加权 | 🎯对比嵌入算法:拉普拉斯特征映射、指数最短路径长度到双曲度量的变换 、等距映射和生成图上向量表示算法 | 🎯网络节点角度关系余弦距离和余弦接近度计算方式 | 🎯植入分区生成合成图,基准测试生成合成图

📜图节点和边算法用例

📜Python鲁汶意外莱顿复杂图拓扑分解算法

📜Python(C++)大尺度分层边值时变图统计推理并行算法

📜Python层内层外多图布局图基分析

📜Python群体趋向性潜关联有向无向多图层算法

📜Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

📜Python竞技比赛流体动力学艺术品和药物质量图学习

📜Python元胞自动机沙堆糖景堵塞模型图学习

🍪语言内容分比

🍇Python等距映射降维算法

等距映射是一种突破线性方法局限性的降维算法。其主要目标是将高维数据中的复杂模式展开到低维空间,同时精心保留数据点之间的基本关系。与假设变量之间存在线性关系的主成分分析等线性方法不同,此算法擅长捕捉底层非线性结构,使其成为各种应用的首选。

算法的核心是一系列步骤,这些步骤共同形成了它揭示复杂数据集内在几何形状的独特能力。该算法首先构建一个邻域图,其中节点代表数据点,边连接彼此距离在一定范围内的节点。邻域图是一种节点代表数据点、边连接彼此距离在一定范围内的节点的图。这个邻域图是算法后续计算的基础结构。为了构建邻域图,我们首先计算所有数据点对之间的欧几里得距离。然后,我们为每个数据点选择 k 个最近邻居,并在图中创建连接这些邻居的边。k 的值是算法的一个参数,可以根据数据进行调整。

所有数据点对之间的欧氏距离:

dij=xixj2d_{i j}=\left\|x_i-x_j\right\|^2

其中,dijd_{i j} 是数据点之间的欧几里得距离,xixj2\left\|x_i-x_j\right\|^2 是向量 xi,xjx_i, x_j 的欧几里得范数。

邻域图

在图论中,图中顶点v的相邻顶点是通过边连接到v的顶点。图G中顶点v的邻域是由与v相邻的所有顶点导出的G的子图,即由与v相邻的顶点和连接相邻顶点的所有边组成的图到v。

示图:

在该图中,与 5 相邻的顶点是 1、2 和 4。5 的邻域是由顶点 1、2、4 以及连接 1 和 2 的边组成的图。

然后,算法深入研究了测地线距离领域,这一概念对于理解非线性流形的真实结构至关重要。邻域图中两点之间的测地线距离定义为沿图边缘的最短路径,用于测量流形曲面上的距离。与代表直线测量的欧几里得距离不同,测地线距离对底层结构很敏感,可以捕捉数据的真实复杂性。为了通过计算邻域图边缘两点之间的最短路径来近似测地线距离,可以使用多种算法。

算法的最后一步是应用多维缩放,这是一种降维技术,旨在找到数据的低维表示,以保留数据点之间的成对距离。一旦计算出测地线距离,算法就会将数据嵌入到低维空间中。此嵌入使用称为谱嵌入的技术执行。谱嵌入是一种降维技术,其工作原理是查找图拉普拉斯的主成分。图拉普拉斯是一个表示邻域图连通性的矩阵。算法的神奇之处在于应用谱嵌入。图拉普拉斯是一个表示邻域图连通性的矩阵,它封装了数据点之间的关系和接近度。通过揭示主成分,算法成功地将数据嵌入到低维空间中,同时精心保留了必要的几何关系。

降维算法识别手写数字

 import numpy as np
 import matplotlib.pyplot as plt
 from sklearn.datasets import load_digits
 from sklearn.manifold import Isomap
 from sklearn.preprocessing import StandardScaler
 from sklearn.pipeline import Pipeline
 digits = load_digits()
 X, y = digits.data, digits.target
 scaler = StandardScaler()
 X_standardized = scaler.fit_transform(X)

以下代码创建一个具有 30 个邻居和 2 个输出维度的算法模型,然后将该模型拟合到标准化输入数据并将其转换到低维空间。

 isomap = Isomap(n_neighbors=30, n_components=2)
 X_transformed = isomap.fit_transform(X_standardized)

以下代码创建数据点的散点图,可视化 MNIST 数据集中手写数字的二维表示,每个数字类别用不同的颜色表示。该图包含一个供参考的颜色条。

 plt.figure(figsize=(10, 8))
 scatter = plt.scatter(X_transformed[:, 0], X_transformed[:, 1], c=y, cmap='viridis', edgecolors='k', s=20)
 plt.title('2D Representation of Handwritten Digits (MNIST)')
 plt.xlabel('Component 1')
 plt.ylabel('Component 2')
 plt.colorbar(scatter, ticks=np.arange(10), label='Digit Class')
 ​
 plt.show()

这里,每个数字类别都用不同的颜色表示,从而显示出与不同数字相对应的不同聚类。此可视化展示了 算法在降低数据维度的同时保留数据底层结构的有效性。

Last updated