嵌入¶
分解¶
- graspologic.embed.select_dimension(X, n_components=None, n_elbows=2, threshold=None, return_likelihoods=False)[源代码]¶
基于Zhu和Godsie方法从数组生成轮廓似然。 拐点对应于最佳嵌入维度。
- Parameters:
- X1d or 2d array-like
输入数组生成轮廓似然。如果是1维数组,应按降序排序。如果是2维数组,形状应为(n_samples, n_features)。
- n_componentsint, optional, default: None.
要嵌入的组件数量。如果为None,
n_components = floor(log2(min(n_samples, n_features)))。如果X是一维数组,则忽略此参数。- n_elbowsint, optional, default: 2.
返回的可能性拐点数量。必须为
> 1。- thresholdfloat, int, optional, default: None
如果给定,只考虑大于
> threshold的奇异值。必须 是>= 0。- return_likelihoodsbool, optional, default: False
如果为True,则返回与每个肘部相关的所有可能性。
- Returns:
- elbowslist
肘部表示后续的最佳嵌入维度。如果没有足够的奇异值,肘部的数量可能少于
n_elbows。- sing_valslist
与每个肘部相关的奇异值。
- likelihoodslist of array-like
对应于每个肘部的似然数组。仅在
return_likelihoods为True时返回。
- Parameters:
- Return type:
tuple[list[int], list[float]] | tuple[list[int], list[float], list[ndarray]]
参考文献
[1]朱, M. 和 Ghodsi, A. (2006). 从碎石图通过使用轮廓似然自动选择维度. 计算统计与数据分析, 51(2), pp.918-930.
- graspologic.embed.select_svd(X, n_components=None, n_elbows=2, algorithm='randomized', n_iter=5, svd_seed=None)[源代码]¶
使用SVD进行降维。
通过使用完整的奇异值分解(SVD)或截断的SVD来执行线性降维。完整的SVD使用SciPy的ARPACK包装器执行,而截断的SVD则使用SciPy的LAPACK包装器或Sklearn的随机SVD实现来执行。
如果未指定目标维度数,它还会使用Zhu & Godsie算法执行最佳维度选择。
- Parameters:
- Xarray-like, shape (n_samples, n_features)
用于执行svd的数据。
- n_componentsint or None, default = None
输出数据的期望维度。如果为"full",则
n_components必须<= min(X.shape)。否则,n_components必须< min(X.shape)。如果为None,则最佳维度将由select_dimension()使用n_elbows参数选择。- n_elbowsint, optional, default: 2
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- algorithm{'randomized' (default), 'full', 'truncated'}, optional
使用的SVD求解器:
- 'randomized'
使用
sklearn.utils.extmath.randomized_svd()计算随机化svd
- 'full'
使用
scipy.linalg.svd()计算完整的奇异值分解 不支持类型为scipy.sparse.csr_array的graph输入
- 'truncated'
使用
scipy.sparse.linalg.svds()计算截断的奇异值分解
- 'eigsh'
使用
scipy.sparse.linalg.eigsh()计算实对称方阵的奇异值分解。对于这类矩阵非常快速。
- n_iterint, optional (default = 5)
随机SVD求解器的迭代次数。不适用于'full'或'truncated'。默认值比randomized_svd中的默认值大,以处理可能具有缓慢衰减谱的稀疏矩阵。
- svd_seedint or None (default
None) 仅适用于
algorithm="randomized";允许您为随机化SVD求解器设置种子,以实现确定性的伪随机行为。
- Returns:
- Uarray-like, shape (n_samples, n_components)
对应于奇异值的左奇异向量。
- Darray-like, shape (n_components)
奇异值按降序排列,作为一维数组。
- Varray-like, shape (n_components, n_samples)
对应于奇异值的右奇异向量。
- Parameters:
- Return type:
tuple[ndarray, ndarray, ndarray]
参考文献
[1]朱, M. 和 Ghodsi, A. (2006). 从碎石图通过使用轮廓似然自动选择维度. 计算统计与数据分析, 51(2), pp.918-930.
单图嵌入¶
- class graspologic.embed.AdjacencySpectralEmbed[来源]¶
用于计算图的邻接谱嵌入的类。
邻接谱嵌入(ASE)是基于图的邻接矩阵的k维欧几里得表示。它依赖于SVD将维度减少到指定的k,或者如果未指定k,则可以自动找到维度数量(参见
select_svd)。了解更多内容,请参阅邻接谱嵌入教程
- Parameters:
- n_componentsint or None, default = None
输出数据的期望维度。如果为"full",则
n_components必须<= min(X.shape)。否则,n_components必须< min(X.shape)。如果为None,则最佳维度将由select_dimension()使用n_elbows参数选择。- n_elbowsint, optional, default: 2
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- algorithm{'randomized' (default), 'full', 'truncated'}, optional
使用的SVD求解器:
- 'randomized'
使用
sklearn.utils.extmath.randomized_svd()计算随机化svd
- 'full'
使用
scipy.linalg.svd()计算完整的奇异值分解 不支持类型为scipy.sparse.csr_array的graph输入
- 'truncated'
使用
scipy.sparse.linalg.svds()计算截断的奇异值分解
- n_iterint, optional (default = 5)
随机SVD求解器的迭代次数。不适用于'full'或'truncated'。默认值比randomized_svd中的默认值大,以处理可能具有缓慢衰减谱的稀疏矩阵。
- check_lccbool , optional (default = True)
是否检查输入图是否连通。如果图不连通,可能会导致非最优结果。如果为True且输入不连通,则会抛出UserWarning。不检查连通性可能会加快计算速度。
- diag_augbool, optional (default = True)
是否在嵌入之前用与度数(或加权网络的边权重和)对应的向量替换邻接矩阵的主对角线。经验表明,这会产生更接近真实情况的潜在位置估计。
- concatbool, optional (default False)
如果图是有向的,是否沿轴1连接左右(出和入)潜在位置。
- svd_seedint or None (default
None) 仅适用于
algorithm="randomized";允许您为随机化SVD求解器设置种子,以实现确定性的伪随机行为。
- Attributes:
- n_features_in_: int
传递给
fit()方法的特征数量。- latent_left_array, shape (n_samples, n_components)
图的估计潜在位置。
- latent_right_array, shape (n_samples, n_components), or None
仅在图形为有向图或邻接矩阵不对称时计算。 估计图形的右侧潜在位置。否则,为None。
- singular_values_array, shape (n_components)
与潜在位置矩阵相关的奇异值。
注释
奇异值分解:
\[A = U \Sigma V^T\]用于为矩阵找到一个正交基,在我们的例子中是图的邻接矩阵。这些基向量(在矩阵U或V中)根据它们在原始矩阵中解释的方差量进行排序。通过选择这些基向量的一个子集(通过我们的降维选择),我们可以找到一个低维空间来表示图。
参考文献
[1]Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. "随机块模型图的一致性邻接谱嵌入," 美国统计协会杂志, 卷107(499), 2012
[2]Levin, K., Roosta-Khorasani, F., Mahoney, M. W., & Priebe, C. E. (2018). 图邻接谱嵌入的样本外扩展。PMLR: 机器学习研究论文集, 80, 2975-2984.
- __init__(n_components=None, n_elbows=2, algorithm='randomized', n_iter=5, check_lcc=True, diag_aug=True, concat=False, svd_seed=None)[源代码]¶
- fit_transform(graph, y=None, *args, **kwargs)¶
使用图表拟合模型并应用转换。
n_dimension 是自动确定的或基于用户输入的。
- Parameters:
- graph: np.ndarray or networkx.Graph
输入要嵌入的图。
- Returns:
- outnp.ndarray OR length 2 tuple of np.ndarray.
如果是无向图,则返回单个np.ndarray的潜在位置,形状为(n_vertices, n_components)。如果是有向图,
concat为True,则在轴1上连接潜在矩阵,形状为(n_vertices, 2*n_components)。如果是有向图,concat为False,则返回潜在矩阵的元组。每个矩阵的形状为(n_vertices, n_components)。
- Parameters:
- Return type:
ndarray | tuple[ndarray, ndarray]
- get_metadata_routing()¶
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装了路由信息。
- get_params(deep=True)¶
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- set_fit_request(*, graph='$UNCHANGED$')¶
传递给
fit方法的请求元数据。请注意,此方法仅在
enable_metadata_routing=True时相关(参见sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。每个参数的选项是:
True: 请求元数据,并在提供时传递给fit。如果未提供元数据,则忽略该请求。False: 不请求元数据,元估计器不会将其传递给fit。None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。str: 元数据应使用此给定的别名传递给元估计器,而不是原始名称。
默认值(
sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。在版本1.3中添加。
注意
此方法仅在此估计器用作元估计器的子估计器时相关,例如在
Pipeline内部使用时。否则它没有效果。- Parameters:
- graphstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中graph参数的元数据路由。
- Returns:
- selfobject
更新后的对象。
- Parameters:
self (AdjacencySpectralEmbed)
- Return type:
- set_params(**params)¶
设置此估计器的参数。
该方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有形式为的参数,以便可以更新嵌套对象的每个组件。__ - Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)¶
从邻接矩阵或样本外顶点矩阵中获取潜在位置。有关转换样本外顶点的更多详细信息,请参阅 样本外 (OOS) 嵌入
关于数学背景,请参见[2]。
- Parameters:
- Xarray-like or tuple, original shape or (n_oos_vertices, n_vertices).
原始拟合矩阵("graph"在fit中)或新的样本外数据。 如果
X是原始拟合矩阵,则返回一个接近self.fit_transform(X)的矩阵。如果
X是一个样本外矩阵,n_oos_vertices 是新顶点的数量,n_vertices 是原始图中顶点的数量。如果是元组,图是有向的,并且X[0]包含从样本外顶点到样本内顶点的边。
- Returns:
- outnp.ndarray OR length 2 tuple of np.ndarray
潜在位置的数组,形状为 (n_oos_vertices, n_components) 或 (n_vertices, n_components)。如果传递了拟合矩阵,则对其进行转换。
如果
X是一个包含与新节点对应的邻接向量的数组或元组,则返回新样本外邻接向量的估计潜在位置。 如果是无向的,返回数组。 如果是有向的,返回(X_out, X_in),其中X_out包含与从样本外顶点到样本内顶点的边对应的潜在位置。
注释
如果矩阵是对角增强的(例如,
self.diag_aug为 True),fit后接transform将产生一个与fit_transform略有不同的矩阵。要获取原始嵌入,建议使用
fit_transform。在有向图的情况下,如果A是原始样本内邻接矩阵,如果你不想使用fit_transform,则需要将元组(A.T, A)传递给transform。参考文献
[1]Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. "随机块模型图的一致性邻接谱嵌入," 美国统计协会杂志, 卷107(499), 2012
[2]Levin, K., Roosta-Khorasani, F., Mahoney, M. W., & Priebe, C. E. (2018). 图邻接谱嵌入的样本外扩展。PMLR: 机器学习研究论文集, 80, 2975-2984
- class graspologic.embed.LaplacianSpectralEmbed[source]¶
用于计算图的拉普拉斯谱嵌入的类。
拉普拉斯谱嵌入(LSE)是基于图的拉普拉斯矩阵的k维欧几里得表示。它依赖于SVD将维度减少到指定的
n_components,或者如果未指定n_components,可以自动找到维度数量。- Parameters:
- form{'DAD' (default), 'I-DAD', 'R-DAD'}, optional
指定要使用的拉普拉斯归一化类型。有关形式的更多详细信息,请参见
to_laplacian()。- n_componentsint or None, default = None
输出数据的期望维度。如果为"full",则
n_components必须<= min(X.shape)。否则,n_components必须< min(X.shape)。如果为None,则最佳维度将由select_dimension()使用n_elbows参数选择。- n_elbowsint, optional, default: 2
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- algorithm{'randomized' (default), 'full', 'truncated'}, optional
使用的SVD求解器:
- 'randomized'
使用
sklearn.utils.extmath.randomized_svd()计算随机化svd
- 'full'
使用
scipy.linalg.svd()计算完整的奇异值分解
- 'truncated'
使用
scipy.sparse.linalg.svds()计算截断的奇异值分解
- n_iterint, optional (default = 5)
随机SVD求解器的迭代次数。不适用于'full'或'truncated'。默认值比randomized_svd中的默认值大,以处理可能具有缓慢衰减谱的稀疏矩阵。
- check_lccbool , optional (defult = True)
是否检查输入图是否连通。如果图不连通,可能会导致非最优结果。如果为True且输入不连通,则会抛出UserWarning。不检查连通性可能会加快计算速度。
- regularizer: int, float or None, optional (default=None)
要添加到度矩阵对角线上的常数。如果为None,则添加平均节点度。如果为int或float,则必须>= 0。仅在
form为'R-DAD'时使用。- concatbool, optional (default False)
如果图是有向的,是否沿轴1连接左右(出和入)潜在位置。
- Attributes:
- n_features_in_: int
传递给
fit()方法的特征数量。- latent_left_array, shape (n_samples, n_components)
图的估计潜在位置。
- latent_right_array, shape (n_samples, n_components), or None
仅在图形为有向图或邻接矩阵不对称时计算。 估计图形的右侧潜在位置。否则,为None。
- singular_values_array, shape (n_components)
与潜在位置矩阵相关的奇异值。
- svd_seedint or None (default
None) 仅适用于
algorithm="randomized";允许您为随机化SVD求解器设置种子,以实现确定性的伪随机行为。
注释
奇异值分解:
\[A = U \Sigma V^T\]用于找到矩阵的正交基,在我们的例子中是图的拉普拉斯矩阵。这些基向量(在矩阵U或V中)根据它们在原始矩阵中解释的方差量进行排序。通过选择这些基向量的一个子集(通过我们的降维选择),我们可以找到一个低维空间来表示图。
参考文献
[1]Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. "随机块模型图的一致性邻接谱嵌入," 美国统计协会杂志, 卷107(499), 2012.
[2]Von Luxburg, Ulrike. "关于谱聚类的教程," 统计与计算, 卷. 17(4), 页. 395-416, 2007.
[3]Rohe, Karl, Sourav Chatterjee, 和 Bin Yu. "谱聚类和高维随机块模型," 《统计学年鉴》, 第39卷(4), 第1878-1915页, 2011年.
- __init__(form='DAD', n_components=None, n_elbows=2, algorithm='randomized', n_iter=5, check_lcc=True, regularizer=None, concat=False, svd_seed=None)[source]¶
- fit(graph, y=None, *args, **kwargs)[来源]¶
将LSE模型拟合到输入图
默认情况下,使用以下形式的拉普拉斯归一化:
\[L = D^{-1/2} A D^{-1/2}\]
- fit_transform(graph, y=None, *args, **kwargs)¶
使用图表拟合模型并应用转换。
n_dimension 是自动确定的或基于用户输入的。
- Parameters:
- graph: np.ndarray or networkx.Graph
输入要嵌入的图。
- Returns:
- outnp.ndarray OR length 2 tuple of np.ndarray.
如果是无向图,则返回单个np.ndarray的潜在位置,形状为(n_vertices, n_components)。如果是有向图,
concat为True,则在轴1上连接潜在矩阵,形状为(n_vertices, 2*n_components)。如果是有向图,concat为False,则返回潜在矩阵的元组。每个矩阵的形状为(n_vertices, n_components)。
- Parameters:
- Return type:
ndarray | tuple[ndarray, ndarray]
- get_metadata_routing()¶
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装了路由信息。
- get_params(deep=True)¶
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- set_fit_request(*, graph='$UNCHANGED$')¶
传递给
fit方法的请求元数据。请注意,此方法仅在
enable_metadata_routing=True时相关(参见sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。每个参数的选项是:
True: 请求元数据,并在提供时传递给fit。如果未提供元数据,则忽略该请求。False: 不请求元数据,元估计器不会将其传递给fit。None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。str: 元数据应使用此给定的别名传递给元估计器,而不是原始名称。
默认值(
sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。在版本1.3中添加。
注意
此方法仅在此估计器用作元估计器的子估计器时相关,例如在
Pipeline内部使用时。否则它没有效果。- Parameters:
- graphstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中graph参数的元数据路由。
- Returns:
- selfobject
更新后的对象。
- Parameters:
self (LaplacianSpectralEmbed)
- Return type:
- set_params(**params)¶
设置此估计器的参数。
该方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有形式为的参数,以便可以更新嵌套对象的每个组件。__ - Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)¶
从邻接矩阵或样本外顶点矩阵中获取潜在位置。有关转换样本外顶点的更多详细信息,请参阅 样本外 (OOS) 嵌入
关于数学背景,请参见[2]。
- Parameters:
- Xarray-like or tuple, original shape or (n_oos_vertices, n_vertices).
原始拟合矩阵("graph"在fit中)或新的样本外数据。 如果
X是原始拟合矩阵,则返回一个接近self.fit_transform(X)的矩阵。如果
X是一个样本外矩阵,n_oos_vertices 是新顶点的数量,n_vertices 是原始图中顶点的数量。如果是元组,图是有向的,并且X[0]包含从样本外顶点到样本内顶点的边。
- Returns:
- outnp.ndarray OR length 2 tuple of np.ndarray
潜在位置的数组,形状为 (n_oos_vertices, n_components) 或 (n_vertices, n_components)。如果传递了拟合矩阵,则对其进行转换。
如果
X是一个包含与新节点对应的邻接向量的数组或元组,则返回新样本外邻接向量的估计潜在位置。 如果是无向的,返回数组。 如果是有向的,返回(X_out, X_in),其中X_out包含与从样本外顶点到样本内顶点的边对应的潜在位置。
注释
如果矩阵是对角增强的(例如,
self.diag_aug为 True),fit后接transform将产生一个与fit_transform略有不同的矩阵。要获取原始嵌入,建议使用
fit_transform。在有向图的情况下,如果A是原始样本内邻接矩阵,如果你不想使用fit_transform,则需要将元组(A.T, A)传递给transform。参考文献
[1]Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. "随机块模型图的一致性邻接谱嵌入," 美国统计协会杂志, 卷107(499), 2012
[2]Levin, K., Roosta-Khorasani, F., Mahoney, M. W., & Priebe, C. E. (2018). 图邻接谱嵌入的样本外扩展。PMLR: 机器学习研究论文集, 80, 2975-2984
- graspologic.embed.node2vec_embed(graph, num_walks=10, walk_length=40, return_hyperparameter=1.0, inout_hyperparameter=1.0, dimensions=128, window_size=2, workers=8, iterations=3, interpolate_walk_lengths_by_node_degree=True, random_seed=None)[源代码]¶
从给定的图中生成一个node2vec嵌入。将遵循word2vec算法来创建嵌入。
- Parameters:
- graph: Union[nx.Graph, nx.DiGraph]
一个networkx图或有向图。多重图应转换为非多重图,以便调用用户正确处理多重边(即聚合权重或取最后一条边的权重)。如果图是无权重的,每条边的权重将默认为1。
- num_walksint
每个源的步行次数。默认值为10。
- walk_length: int
每个源的步行长度。默认值为40。
- return_hyperparameterfloat
返回超参数 (p)。默认值为 1.0
- inout_hyperparameterfloat
输入输出超参数 (q)。默认值为 1.0
- dimensionsint
词向量的维度。默认值为128。
- window_sizeint
句子中当前词和预测词之间的最大距离。默认值为2。
- workersint
使用这些多线程来训练模型。默认值为8。
- iterationsint
随机梯度下降(SGD)中的迭代次数。默认值为3。
- interpolate_walk_lengths_by_node_degreebool
使用与每个节点度数相对应的动态行走长度。如果节点位于底部20百分位,则默认行走长度为1。如果它位于顶部10百分位,则使用
walk_length。如果它位于20-80百分位之间,则在1和walk_length之间线性插值。这将减少低度数节点对结果嵌入的偏差。如果低度数节点与高度数节点具有相同数量的行走(如果未启用此设置,则会发生这种情况),则与高度数节点相比,低度数节点将采取较小范围的随机行走。这将导致您的低度数行走主导高度数节点。- random_seedint
用于可重复结果的种子。默认值为None,将产生随机输出。请注意,为了实现完全确定性的可重复运行,您还必须限制为单个工作线程(workers=1),以消除操作系统线程调度带来的顺序抖动。此外,必须设置环境变量
PYTHONHASHSEED以控制哈希随机化。
- Returns:
- Tuple[np.array, List[Any]]
一个包含矩阵的元组,其中每行索引对应于每个节点的嵌入。该元组还包含一个向量,其中包含矩阵中每行的相应顶点标签。矩阵和向量在位置上相关。
- Parameters:
- Return type:
注释
- The original reference implementation of node2vec comes from Aditya Grover from
- Further details on the Alias Method used in this functionality can be found at
https://lips.cs.princeton.edu/the-alias-method-efficient-sampling-with-many-discrete-outcomes/
参考文献
[1]Aditya Grover 和 Jure Leskovec 的 "node2vec: 网络的可扩展特征学习。" 知识发现与数据挖掘,2016年。
多图嵌入¶
- class graspologic.embed.OmnibusEmbed[源代码]¶
任意数量输入图的综合嵌入,具有匹配的顶点集。
给定 \(A_1, A_2, ..., A_m\) 一组(可能加权的)邻接矩阵,这些矩阵对应一组具有匹配顶点的 \(m\) 个无向图。然后,\((mn \times mn)\) 的 omnibus 矩阵 \(M\) 具有子图,其中 \(M_{ij} = \frac{1}{2}(A_i + A_j)\)。然后使用邻接谱嵌入对 omnibus 矩阵进行嵌入。
了解更多内容,请访问多图嵌入的Omnibus教程
- Parameters:
- n_componentsint or None, default = None
输出数据的期望维度。如果为"full",则
n_components必须<= min(X.shape)。否则,n_components必须< min(X.shape)。如果为None,则最佳维度将由select_dimension()使用n_elbows参数选择。- n_elbowsint, optional, default: 2
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- algorithm{'randomized' (default), 'full', 'truncated'}, optional
使用的SVD求解器:
- 'randomized'
使用
sklearn.utils.extmath.randomized_svd()计算随机化svd
- 'full'
使用
scipy.linalg.svd()计算完整的奇异值分解
- 'truncated'
使用
scipy.sparse.linalg.svds()计算截断的奇异值分解
- n_iterint, optional (default = 5)
随机SVD求解器的迭代次数。不适用于'full'或'truncated'。默认值比randomized_svd中的默认值大,以处理可能具有缓慢衰减谱的稀疏矩阵。
- check_lccbool , optional (defult = True)
是否检查所有输入图的平均值是否连通。如果平均图不连通,可能会导致非最优结果。如果为True且平均图不连通,将抛出UserWarning。
- diag_augbool, optional (default = True)
是否在嵌入之前用对应于度(或加权网络的边权重和)的向量替换每个邻接矩阵的主对角线。
- concatbool, optional (default = False)
如果图是有向的,是否沿轴1连接每个图的左右(出和入)潜在位置。
- svd_seedint or None (default =
None) 仅适用于
algorithm="randomized";允许您为随机化SVD求解器设置种子,以实现确定性的伪随机行为。- lsebool, optional (default = False)
是否使用图的拉普拉斯矩阵构建Omni矩阵,并使用LSE嵌入Omni矩阵
- Attributes:
- n_graphs_int
图形数量
- n_vertices_int
每个图中的顶点数
- latent_left_array, shape (n_graphs, n_vertices, n_components)
图的估计潜在位置。
- latent_right_array, shape (n_graphs, n_vertices, n_components), or None
仅在图形为有向图或邻接矩阵不对称时计算。估计图形的右侧潜在位置。否则,为None。
- singular_values_array, shape (n_components)
与潜在位置矩阵相关的奇异值。
参考文献
[1]Levin, K., Athreya, A., Tang, M., Lyzinski, V., & Priebe, C. E. (2017年11月). 一个关于多个随机点积图的综合嵌入的中心极限定理. 在数据挖掘研讨会(ICDMW), 2017年IEEE国际会议上 (第964-967页). IEEE.
- __init__(n_components=None, n_elbows=2, algorithm='randomized', n_iter=5, check_lcc=True, diag_aug=True, concat=False, svd_seed=None, lse=False)[source]¶
- fit(graphs, y=None)[source]¶
使用图表拟合模型。
- Parameters:
- graphslist of nx.Graph or ndarray, or csr_array
如果是nx.Graph的列表,每个图必须包含相同数量的节点。 如果是ndarray的列表,每个数组必须具有形状(n_vertices, n_vertices)。 如果是ndarray,则数组必须具有形状(n_graphs, n_vertices, n_vertices)。
- Returns:
- selfobject
返回自身的实例。
- fit_transform(graphs, y=None)[source]¶
使用图拟合模型并在图上应用嵌入。 n_components 要么自动确定,要么基于用户输入。
- Parameters:
- graphslist of nx.Graph or ndarray, or ndarray
如果是nx.Graph的列表,每个图必须包含相同数量的节点。 如果是ndarray的列表,每个数组必须具有形状(n_vertices, n_vertices)。 如果是ndarray,则数组必须具有形状(n_graphs, n_vertices, n_vertices)。
- Returns:
- outnp.ndarray or length 2 tuple of np.ndarray.
如果输入的图是对称的,返回形状为 (n_graphs, n_vertices, n_components) 的 ndarray。 如果图是有向的且
concat为 False,则返回两个数组的元组(形状与上述相同)。 第一个对应于左侧的潜在位置,第二个对应于右侧的潜在位置。 如果图是有向的且concat为 True,则左侧和右侧(出和入)的潜在位置会被连接起来。 在这种情况下,返回一个形状为 (n_graphs, n_vertices, 2*n_components) 的张量。
- get_metadata_routing()¶
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装了路由信息。
- get_params(deep=True)¶
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- set_fit_request(*, graphs='$UNCHANGED$')¶
传递给
fit方法的请求元数据。请注意,此方法仅在
enable_metadata_routing=True时相关(参见sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。每个参数的选项是:
True: 请求元数据,并在提供时传递给fit。如果未提供元数据,则忽略该请求。False: 不请求元数据,元估计器不会将其传递给fit。None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。str: 元数据应使用此给定的别名传递给元估计器,而不是原始名称。
默认值(
sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。在版本1.3中添加。
注意
此方法仅在此估计器用作元估计器的子估计器时相关,例如在
Pipeline内部使用时。否则它没有效果。- Parameters:
- graphsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中graphs参数的元数据路由。
- Returns:
- selfobject
更新后的对象。
- Parameters:
self (OmnibusEmbed)
- Return type:
- set_params(**params)¶
设置此估计器的参数。
该方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有形式为的参数,以便可以更新嵌套对象的每个组件。__ - Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)¶
从邻接矩阵或样本外顶点矩阵中获取潜在位置。有关转换样本外顶点的更多详细信息,请参阅 样本外 (OOS) 嵌入
关于数学背景,请参见[2]。
- Parameters:
- Xarray-like or tuple, original shape or (n_oos_vertices, n_vertices).
原始拟合矩阵("graph"在fit中)或新的样本外数据。 如果
X是原始拟合矩阵,则返回一个接近self.fit_transform(X)的矩阵。如果
X是一个样本外矩阵,n_oos_vertices 是新顶点的数量,n_vertices 是原始图中顶点的数量。如果是元组,图是有向的,并且X[0]包含从样本外顶点到样本内顶点的边。
- Returns:
- outnp.ndarray OR length 2 tuple of np.ndarray
潜在位置的数组,形状为 (n_oos_vertices, n_components) 或 (n_vertices, n_components)。如果传递了拟合矩阵,则对其进行转换。
如果
X是一个包含与新节点对应的邻接向量的数组或元组,则返回新样本外邻接向量的估计潜在位置。 如果是无向的,返回数组。 如果是有向的,返回(X_out, X_in),其中X_out包含与从样本外顶点到样本内顶点的边对应的潜在位置。
注释
如果矩阵是对角增强的(例如,
self.diag_aug为 True),fit后接transform将产生一个与fit_transform略有不同的矩阵。要获取原始嵌入,建议使用
fit_transform。在有向图的情况下,如果A是原始样本内邻接矩阵,如果你不想使用fit_transform,则需要将元组(A.T, A)传递给transform。参考文献
[1]Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. "随机块模型图的一致性邻接谱嵌入," 美国统计协会杂志, 卷107(499), 2012
[2]Levin, K., Roosta-Khorasani, F., Mahoney, M. W., & Priebe, C. E. (2018). 图邻接谱嵌入的样本外扩展。PMLR: 机器学习研究论文集, 80, 2975-2984
- class graspologic.embed.MultipleASE[source]¶
多重邻接谱嵌入(MASE)将具有匹配顶点集的任意数量的输入图嵌入。
对于无向图的总体,MASE假设图的总体是从\(VR^{(i)}V^T\)中采样的,其中\(V \in \mathbb{R}^{n\times d}\)和\(R^{(i)} \in \mathbb{R}^{d\times d}\)。得分矩阵\(R^{(i)}\)允许每个图不同,但必须是对称的。所有图共享一个共同的潜在位置矩阵\(V\)。
对于有向图的总体,MASE假设总体是从\(UR^{(i)}V^T\)中采样的,其中\(U \in \mathbb{R}^{n\times d_1}\),\(V \in \mathbb{R}^{n\times d_2}\),以及\(R^{(i)} \in \mathbb{R}^{d_1\times d_2}\)。在这种情况下,得分矩阵\(R^{(i)}\)可以是非对称和非方形的,但所有图仍然共享共同的潜在位置矩阵\(U\)和\(V\)。
了解更多内容,请访问多重邻接谱嵌入(MASE)教程
- Parameters:
- n_componentsint or None, default = None
输出数据的期望维度。如果为"full",则
n_components必须<= min(X.shape)。否则,n_components必须< min(X.shape)。如果为None,则最佳维度将由select_dimension()使用n_elbows参数选择。- n_elbowsint, optional, default: 2
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- algorithm{'randomized' (default), 'full', 'truncated'}, optional
使用的SVD求解器:
- 'randomized'
使用
sklearn.utils.extmath.randomized_svd()计算随机化svd
- 'full'
使用
scipy.linalg.svd()计算完整的奇异值分解
- 'truncated'
使用
scipy.sparse.linalg.svds()计算截断的奇异值分解
- n_iterint, optional (default = 5)
随机SVD求解器的迭代次数。不适用于'full'或'truncated'。默认值比randomized_svd中的默认值大,以处理可能具有缓慢衰减谱的稀疏矩阵。
- scaledbool, optional (default=True)
是否在第一个嵌入阶段使用特征值缩放单个特征向量。
- diag_augbool, optional (default = True)
是否在嵌入之前用对应于度(或加权网络的边权重和)的向量替换每个邻接矩阵的主对角线。
- concatbool, optional (default False)
如果图是有向的,是否沿轴1连接每个图的左右(出和入)潜在位置。
- svd_seedint or None (default
None) 仅适用于
algorithm="randomized";允许您为随机化SVD求解器设置种子,以实现确定性的伪随机行为。
- Attributes:
- n_graphs_int
图形数量
- n_vertices_int
每个图中的顶点数
- latent_left_array, shape (n_samples, n_components)
图的估计潜在位置。
- latent_right_array, shape (n_samples, n_components), or None
图的估计潜在位置。仅在输入图是有向的或邻接矩阵不对称时计算。否则,为None。
- scores_array, shape (n_samples, n_components, n_components)
每个输入图的估计 \(\hat{R}\) 矩阵。
- singular_values_array, shape (n_components) OR length 2 tuple of arrays
如果输入图是无向的,等于连接邻接谱嵌入的奇异值。如果输入图是有向的,
singular_values_是一个长度为2的元组,其中singular_values_[0]对应于连接左邻接谱嵌入的奇异值,而singular_values_[1]对应于连接右邻接谱嵌入的奇异值。
注释
当输入图是有向图时,
n_components的latent_left_可能不等于n_components的latent_right_。- __init__(n_components=None, n_elbows=2, algorithm='randomized', n_iter=5, scaled=True, diag_aug=True, concat=False, svd_seed=None)[source]¶
- fit(graphs, y=None)[source]¶
使用图表拟合模型。
- Parameters:
- graphslist of nx.Graph, ndarray or scipy.sparse.csr_array
如果是nx.Graph的列表,每个图必须包含相同数量的节点。 如果是ndarray或csr_array的列表,每个数组必须具有形状(n_vertices, n_vertices)。 如果是ndarray,则数组必须具有形状(n_graphs, n_vertices, n_vertices)。
- Returns:
- selfobject
返回自身的实例。
- fit_transform(graphs, y=None)[source]¶
使用图拟合模型并在图上应用嵌入。 n_components 要么自动确定,要么基于用户输入。
- Parameters:
- graphslist of nx.Graph, ndarray or scipy.sparse.csr_array
如果列表是nx.Graph,每个图必须包含相同数量的节点。 如果列表是ndarray或csr_array,每个数组必须具有形状(n_vertices, n_vertices)。 如果是ndarray,则数组必须具有形状(n_graphs, n_vertices, n_vertices)。
- Returns:
- outnp.ndarray or length 2 tuple of np.ndarray.
如果输入的图是对称形状(n_vertices, n_components)。 如果图是有向的且
concat为False,则返回两个数组的元组(形状与上述相同)。 第一个对应于左侧的潜在位置,第二个对应于右侧的潜在位置。 当concat为True时,左侧和右侧(出和入)的潜在位置将沿轴1连接。
- get_metadata_routing()¶
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装了路由信息。
- get_params(deep=True)¶
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- set_fit_request(*, graphs='$UNCHANGED$')¶
传递给
fit方法的请求元数据。请注意,此方法仅在
enable_metadata_routing=True时相关(参见sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。每个参数的选项是:
True: 请求元数据,并在提供时传递给fit。如果未提供元数据,则忽略该请求。False: 不请求元数据,元估计器不会将其传递给fit。None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。str: 元数据应使用此给定的别名传递给元估计器,而不是原始名称。
默认值(
sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。在版本1.3中添加。
注意
此方法仅在此估计器用作元估计器的子估计器时相关,例如在
Pipeline内部使用时。否则它没有效果。- Parameters:
- graphsstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
fit方法中graphs参数的元数据路由。
- Returns:
- selfobject
更新后的对象。
- Parameters:
self (MultipleASE)
- Return type:
- set_params(**params)¶
设置此估计器的参数。
该方法适用于简单的估计器以及嵌套对象(如
Pipeline)。后者具有形式为的参数,以便可以更新嵌套对象的每个组件。__ - Parameters:
- **paramsdict
估计器参数。
- Returns:
- selfestimator instance
估计器实例。
- transform(X)¶
从邻接矩阵或样本外顶点矩阵中获取潜在位置。有关转换样本外顶点的更多详细信息,请参阅 样本外 (OOS) 嵌入
关于数学背景,请参见[2]。
- Parameters:
- Xarray-like or tuple, original shape or (n_oos_vertices, n_vertices).
原始拟合矩阵("graph"在fit中)或新的样本外数据。 如果
X是原始拟合矩阵,则返回一个接近self.fit_transform(X)的矩阵。如果
X是一个样本外矩阵,n_oos_vertices 是新顶点的数量,n_vertices 是原始图中顶点的数量。如果是元组,图是有向的,并且X[0]包含从样本外顶点到样本内顶点的边。
- Returns:
- outnp.ndarray OR length 2 tuple of np.ndarray
潜在位置的数组,形状为 (n_oos_vertices, n_components) 或 (n_vertices, n_components)。如果传递了拟合矩阵,则对其进行转换。
如果
X是一个包含与新节点对应的邻接向量的数组或元组,则返回新样本外邻接向量的估计潜在位置。 如果是无向的,返回数组。 如果是有向的,返回(X_out, X_in),其中X_out包含与从样本外顶点到样本内顶点的边对应的潜在位置。
注释
如果矩阵是对角增强的(例如,
self.diag_aug为 True),fit后接transform将产生一个与fit_transform略有不同的矩阵。要获取原始嵌入,建议使用
fit_transform。在有向图的情况下,如果A是原始样本内邻接矩阵,如果你不想使用fit_transform,则需要将元组(A.T, A)传递给transform。参考文献
[1]Sussman, D.L., Tang, M., Fishkind, D.E., Priebe, C.E. "随机块模型图的一致性邻接谱嵌入," 美国统计协会杂志, 卷107(499), 2012
[2]Levin, K., Roosta-Khorasani, F., Mahoney, M. W., & Priebe, C. E. (2018). 图邻接谱嵌入的样本外扩展。PMLR: 机器学习研究论文集, 80, 2975-2984
- class graspologic.embed.mug2vec[源代码]¶
多图到向量(mug2vec)。
mug2vec 是一系列三个算法的序列,它为每个输入图学习一个特征向量。
步骤:
1. 传递到排名 - 将所有边的权重从最小到最大进行排名,然后通过一个常数进行归一化。
2. Omnibus嵌入 - 在随机点积模型(RDPG)下,联合学习所有图的低维矩阵表示。
3. 经典多维尺度分析 (cMDS) - 通过计算从全息嵌入中每对图嵌入之间的欧几里得距离,然后进行特征分解,为每个图学习一个特征向量。
- Parameters:
- pass_to_ranks: {'simple-nonzero' (default), 'simple-all', 'zero-boost'} string, or None
- 'simple-nonzero'
为所有非零边分配排名,使用平均值解决平局。然后通过 \(\frac{rank(\text{non-zero edges})}{\text{total non-zero edges} + 1}\) 缩放排名
- 'simple-all'
为所有非零边分配排名,使用平均值解决平局。然后通过 \(\frac{rank(\text{non-zero edges})}{n^2 + 1}\) 缩放排名,其中n是节点的数量
- 'zero-boost'
保留所有0值的边的权重,但将其他边的排名视为所有0值边的排名已被分配。如果有10个0值的边,最低的非零边将获得11 /(可能的边数)的权重。平局通过那些边本应获得的权重的平均值来解决。可能的边数由图的类型决定(无环或有环,有向或无向)。
- None
未应用排名通行。
- omnibus_components, cmds_componentsint or None, default = None
输出数据的期望维度。如果为"full",则
n_components必须<= min(X.shape)。否则,n_components必须< min(X.shape)。如果为None,则最佳维度将由select_dimension()使用n_elbows参数选择。- omnibus_n_elbows, cmds_n_elbows: int, optional, default: 2
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- svd_seedint or None (default
None) 允许您为Omnibus嵌入中使用的随机化svd求解器设定种子,以实现确定性的伪随机行为。
- Attributes:
- omnibus_n_components_int
等于参数
n_components。如果输入的n_components为 None, 则等于最佳嵌入维度。- cmds_n_components_int
等于参数
n_components。如果输入的n_components为 None,则等于最佳嵌入维度。- embeddings_array, shape (n_components, n_features)
来自管道的嵌入。每个图都是
n_features维度中的一个点。
另请参阅
- __init__(pass_to_ranks='simple-nonzero', omnibus_components=None, omnibus_n_elbows=2, cmds_components=None, cmds_n_elbows=2, svd_seed=None)[source]¶
- fit(graphs, y=None)[source]¶
为每个图计算一个向量。
- Parameters:
- graphslist of nx.Graph or ndarray, or ndarray
如果是nx.Graph的列表,每个图必须包含相同数量的节点。 如果是ndarray的列表,每个数组必须具有形状(n_vertices, n_vertices)。 如果是ndarray,则数组必须具有形状(n_graphs, n_vertices, n_vertices)。
- yIgnored
- Returns:
- selfreturns an instance of self.
- Parameters:
- Return type:
- fit_transform(graphs, y=None)[source]¶
为每个图计算一个向量。
- Parameters:
- graphslist of nx.Graph or ndarray, or ndarray
如果是nx.Graph的列表,每个图必须包含相同数量的节点。 如果是ndarray的列表,每个数组必须具有形状(n_vertices, n_vertices)。 如果是ndarray,则数组必须具有形状(n_graphs, n_vertices, n_vertices)。
- yIgnored
- Returns:
- embeddingsembeddings generated by fit.
- Parameters:
- Return type:
ndarray
- get_metadata_routing()¶
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装了路由信息。
- get_params(deep=True)¶
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- set_fit_request(*, graphs='$UNCHANGED$')¶
传递给
fit方法的请求元数据。请注意,此方法仅在
enable_metadata_routing=True时相关(参见sklearn.set_config())。 请参阅 用户指南 了解路由机制的工作原理。每个参数的选项是:
True: 请求元数据,并在提供时传递给fit。如果未提供元数据,则忽略该请求。False: 不请求元数据,元估计器不会将其传递给fit。None: 不请求元数据,如果用户提供了元数据,元估计器将引发错误。str: 元数据应使用此给定的别名传递给元估计器,而不是原始名称。
默认值(
sklearn.utils.metadata_routing.UNCHANGED)保留现有的请求。这允许您更改某些参数的请求,而不更改其他参数。在版本1.3中添加。
注意
此方法仅在此估计器用作元估计器的子估计器时相关,例如在
Pipeline内部使用时。否则它没有效果。
差异图嵌入¶
- class graspologic.embed.ClassicalMDS[源代码]¶
经典多维尺度分析(cMDS)。
cMDS 寻求数据的低维表示,其中距离很好地反映了原始高维空间中的距离。
- Parameters:
- n_componentsint, or None (default=None)
要保留的组件数量。如果为None,则将运行
select_dimension()以找到最佳的嵌入维度。- n_elbowsint, or None (default=2)
如果
n_components为 None,则使用select_dimension()计算最佳嵌入维度。否则,忽略。- dissimilarity'euclidean' | 'precomputed', optional, default: 'euclidean'
使用的相异性度量:
- 'euclidean'
数据集中点之间的成对欧几里得距离。
- 'precomputed'
预计算的不相似性直接传递给
fit()和fit_transform()。
- Attributes:
- n_components_int
等于参数
n_components。如果输入的n_components为 None,则等于最佳嵌入维度。- n_features_in_: int
传递给
fit()方法的特征数量。- components_array, shape (n_components, n_features)
特征空间中的主轴。
- singular_values_array, shape (n_components,)
对应于每个选定组件的奇异值。
- dissimilarity_matrix_array, shape (n_features, n_features)
相异矩阵
- svd_seedint or None (default
None) 仅适用于
n_components!=1;允许您为随机化svd求解器提供种子,以实现确定性的伪随机行为。
参考文献
Wickelmaier, Florian. "MDS简介。" 丹麦奥尔堡大学音质研究小组, 46.5 (2003).
- fit(X, y=None)[source]¶
用X拟合模型。
- Parameters:
- Xarray_like
如果
dissimilarity=='precomputed',输入应该是形状为 (n_samples, n_samples) 的相异矩阵。如果dissimilarity=='euclidean',则输入应该是形状为 (n_samples, n_features) 的二维数组或形状为 (n_samples, n_features_1, n_features_2) 的三维数组。
- Returns:
- selfobject
返回自身的实例。
- Parameters:
X (ndarray)
y (Any | None)
- Return type:
- fit_transform(X, y=None)[source]¶
拟合来自X的数据,并返回嵌入的坐标。
- Parameters:
- Xnd-array
如果
dissimilarity=='precomputed',输入应该是形状为 (n_samples, n_samples) 的相异矩阵。如果dissimilarity=='euclidean',则输入应该是形状为 (n_samples, n_features) 的数组或形状为 (n_samples, n_features_1, n_features_2, ..., n_features_d) 的 nd-array。nd-array 的第一个轴必须是n_samples。
- Returns:
- X_newarray-like, shape (n_samples, n_components)
嵌入式输入。
- Parameters:
X (ndarray)
y (Any | None)
- Return type:
ndarray
- get_metadata_routing()¶
获取此对象的元数据路由。
请查看用户指南了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
一个
MetadataRequest封装了路由信息。
- get_params(deep=True)¶
获取此估计器的参数。
- Parameters:
- deepbool, default=True
如果为True,将返回此估计器及其包含的子对象(如果也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。