ot.mapping

最优运输地图及其变体

警告

请注意,默认情况下该模块不会在 ot 中导入。为了使用它,您需要显式导入 ot.mapping

函数

ot.mapping.joint_OT_mapping_kernel(xs, xt, mu=1, eta=0.001, kerneltype='gaussian', sigma=1, bias=False, verbose=False, verbose2=False, numItermax=100, numInnerItermax=10, stopInnerThr=1e-06, stopThr=1e-05, log=False, **kwargs)[源]

提出的联合OT和非线性映射估计与核

[8].

该函数解决以下优化问题:

\[ \begin{align}\begin{aligned}\min_{\gamma, L\in\mathcal{H}}\quad \|L(\mathbf{X_s}) - n_s\gamma \mathbf{X_t}\|^2_F + \mu \langle \gamma, \mathbf{M} \rangle_F + \eta \|L\|^2_\mathcal{H}\\s.t. \ \gamma \mathbf{1} = \mathbf{a}\\ \gamma^T \mathbf{1} = \mathbf{b}\\ \gamma \geq 0\end{aligned}\end{align} \]

其中 :

  • \(\mathbf{M}\) 是样本之间的 (ns, nt) 平方欧几里得成本矩阵 在\(\mathbf{X_s}\)\(\mathbf{X_t}\) 之间(由 \(n_s\) 缩放)

  • \(L\) 是一个 \(n_s \times d\) 的线性算子,作用于一个核矩阵,近似重心映射

  • \(\mathbf{a}\)\(\mathbf{b}\) 是均匀的源权重和目标权重

该问题在于共同求解一个最优运输矩阵 \(\gamma\) 和适合重心映射的非线性映射 \(n_s\gamma \mathbf{X_t}\)

还可以使用偏差可选参数估计具有恒定偏差的映射(请参阅[8]的补充材料)。

用于解决问题的算法是块坐标下降法,它在对\(\mathbf{G}\)(使用条件梯度)进行更新和使用经典核最小二乘求解器对\(\mathbf{L}\)进行更新之间交替进行。

Parameters:
  • xs (类似数组 (ns,d)) – 源领域中的样本

  • xt (类数组 (nt,d)) – 目标领域中的样本

  • mu (float,可选) – 线性OT损失的权重 (>0)

  • eta (float, 可选) – 线性映射 L 的正则化项 (>0)

  • kerneltype (str,可选) – 调用函数 ot.utils.kernel() 使用的核(默认为高斯)

  • sigma (float, 可选) – 高斯核带宽。

  • bias (bool,可选) – 估计带有恒定偏差的线性映射

  • verbose (bool, 可选) – 在迭代过程中打印信息

  • verbose2 (bool, 可选) – 在迭代过程中打印信息

  • numItermax (int, 可选) – 最大BCD迭代次数

  • numInnerItermax (int, 可选) – 最大迭代次数(内层CG求解器)

  • stopInnerThr (float, 可选) – 错误的停止阈值(内部CG求解器) (>0)

  • stopThr (float, 可选) – 相关损失降低的停止阈值 (>0)

  • log (bool, 可选) – 如果为真,则记录日志

Returns:

  • gamma ((ns, nt) array-like) – 给定参数的最佳运输矩阵

  • L ((ns, d) array-like) – 非线性映射矩阵 ((\(n_s+1\), d) 如果有偏差)

  • log (dict) – 仅在参数中log==True时返回日志字典

参考文献

另请参见

ot.lp.emd

未正则化的OT

ot.optim.cg

通用正则化OT

ot.mapping.joint_OT_mapping_linear(xs, xt, mu=1, eta=0.001, bias=False, verbose=False, verbose2=False, numItermax=100, numInnerItermax=10, stopInnerThr=1e-06, stopThr=1e-05, log=False, **kwargs)[源]

联合OT和线性映射估计如在 [8]中提出的。

该函数解决以下优化问题:

\[ \begin{align}\begin{aligned}\min_{\gamma,L}\quad \|L(\mathbf{X_s}) - n_s\gamma \mathbf{X_t} \|^2_F + \mu \langle \gamma, \mathbf{M} \rangle_F + \eta \|L - \mathbf{I}\|^2_F\\s.t. \ \gamma \mathbf{1} = \mathbf{a}\\ \gamma^T \mathbf{1} = \mathbf{b}\\ \gamma \geq 0\end{aligned}\end{align} \]

其中 :

  • \(\mathbf{M}\) 是样本之间的 (ns, nt) 平方欧几里得成本矩阵 在\(\mathbf{X_s}\)\(\mathbf{X_t}\) 之间(由 \(n_s\) 缩放)

  • \(L\) 是一个 \(d\times d\) 线性算子,用于近似重心映射

  • \(\mathbf{I}\) 是单位矩阵(中性线性映射)

  • \(\mathbf{a}\)\(\mathbf{b}\) 是均匀的源权重和目标权重

这个问题在于共同求解一个最优传输矩阵 \(\gamma\) 和一个适合重心映射的线性映射 \(n_s\gamma \mathbf{X_t}\)

还可以使用偏差可选参数估计具有恒定偏差的映射(请参阅[8]的补充材料)。

用于解决问题的算法是块坐标下降法,它在更新\(\mathbf{G}\)(使用条件梯度)和使用经典最小二乘求解器更新\(\mathbf{L}\)之间交替进行。

Parameters:
  • xs (类似数组 (ns,d)) – 源领域中的样本

  • xt (类数组 (nt,d)) – 目标领域中的样本

  • mu (float,可选) – 线性OT损失的权重 (>0)

  • eta (float, 可选) – 线性映射 L 的正则化项 (>0)

  • bias (bool,可选) – 估计带有恒定偏差的线性映射

  • numItermax (int, 可选) – 最大BCD迭代次数

  • stopThr (float, 可选) – 相关损失降低的停止阈值 (>0)

  • numInnerItermax (int, 可选) – 最大迭代次数(内层CG求解器)

  • stopInnerThr (float, 可选) – 错误的停止阈值(内部CG求解器) (>0)

  • verbose (bool, 可选) – 在迭代过程中打印信息

  • log (bool, 可选) – 如果为真,则记录日志

Returns:

  • gamma ((ns, nt) array-like) – 给定参数的最优运输矩阵

  • L ((d, d) array-like) – 线性映射矩阵 ((\(d+1\), d) 如果有偏置)

  • log (dict) – 仅在参数中log==True时返回日志字典

参考文献

另请参见

ot.lp.emd

未正则化的OT

ot.optim.cg

通用正则化OT

ot.mapping.nearest_brenier_potential_fit(X, V, X_classes=None, a=None, b=None, strongly_convex_constant=0.6, gradient_lipschitz_constant=1.4, its=100, log=False, init_method='barycentric')[源]

计算在强凸势能 \(\varphi\) 下在 X 处的最优值和梯度,且具有 Lipschitz 梯度,基于由 X_classes 定义的分区,其中 \(\varphi\) 是最优的,使得 \(\nabla \varphi \#\mu \approx \nu\),给定样本 \(X = x_1, \cdots, x_n \sim \mu\)\(V = v_1, \cdots, v_n \sim \nu\)。找到这样一个在分区 \((E_k)_{k \in [K]}\)(由类 X_classes 给出)上具有所需规则性的势能,相当于找到 phi 的最优值和其梯度 \(\nabla \varphi(x_i)\)(变量 `G`)。在实践中,这些最优值是通过解决以下问题找到的

\begin{gather*} \text{min} \sum_{i,j}\pi_{i,j}\|g_i - v_j\|_2^2 \\ g_1,\cdots, g_n \in \mathbb{R}^d,\; \varphi_1, \cdots, \varphi_n \in \mathbb{R},\; \pi \in \Pi(a, b) \\ \text{s.t.}\ \forall k \in [K],\; \forall i,j \in I_k: \\ \varphi_i-\varphi_j-\langle g_j, x_i-x_j\rangle \geq c_1\|g_i - g_j\|_2^2 + c_2\|x_i-x_j\|_2^2 - c_3\langle g_j-g_i, x_j -x_i \rangle. \end{gather*}

常数 \(c_1, c_2, c_3\) 只依赖于 strongly_convex_constantgradient_lipschitz_constant。约束 \(\pi \in \Pi(a, b)\) 表示矩阵 \(\pi\) 属于边际 a 和 b 的 OT 多面体。\(I_k\)\([n]\) 的一个子集,包含满足 \(x_i\) 在分区(或类别)\(E_k\) 中的 i,即 X_classes[i] == k

这个问题是通过交替变量 \(\pi\) 和变量 \(\varphi_i, g_i\) 来解决的。对于 \(\pi\),问题是标准的离散OT问题,而对于 \(\varphi_i, g_i\),问题是一个通过使用 cvxpy (ECOS求解器)解决的凸QCQP。

接受任何兼容的后端,但将在Numpy数组上执行QCQP优化,并在最后进行转换。

警告

此函数需要CVXPY库

警告

接受任何后端,但会首先转换为Numpy,然后再转换回后端。

Parameters:
  • X (数组类型 (n, d)) – 用于计算最优值 phi 和 G 的参考点

  • V (array-like (n, d)) – 在参考点 X 处的梯度值

  • X_classes (类数组 (n,), 可选) – 参考点的类别,默认值为单一类别

  • a (类似数组 (n,), 可选) – 参考点 X 的权重,默认为均匀分布

  • b (数组类型 (n,), 可选) – 目标点 V 的权重,默认为均匀

  • strongly_convex_constant (float, 可选) – 输入潜能 phi 的强凸性常数,默认为 0.6

  • gradient_lipschitz_constant (float, optional) – 输入梯度 G 的 Lipschitz 性质的常数,默认为 1.4

  • 它的 (整型, 可选) – 迭代次数,默认为 100

  • log (bool, optional) – 如果为真则记录日志

  • init_method (str, 可选) – ‘target’ 初始化 G=V,‘barycentric’ 通过重心投影在 X 的图像上初始化

Returns:

  • phi (数组类型 (n,)) – 在点 X 处的潜在最优值

  • G (数组类型 (n, d)) – 在点 X 处的梯度的最优值

  • log (字典,可选) – 如果输入的 log 为真,则包含每次迭代中变量的值及求解器信息的字典

参考文献

另请参见

ot.mapping.nearest_brenier_potential_predict_bounds

在新源数据上预测SSNB图像

ot.da.NearestBrenierPotential

SSNB的BaseTransport包装器

使用 ot.mapping.nearest_brenier_potential_fit 的示例

平滑且强凸的最近Brenier势

平滑且强凸的最近Brenier潜力
ot.mapping.nearest_brenier_potential_predict_bounds(X, phi, G, Y, X_classes=None, Y_classes=None, strongly_convex_constant=0.6, gradient_lipschitz_constant=1.4, log=False)[源]

计算输入点Y处的下界和上界潜能值,使用潜在的最优值phi在X处及其梯度G在X处。‘下界’潜能对应于[58]的方法,方程2,而边界特性和‘上界’潜能来自于[59],定理3.14(考虑到该定理的表述中有一个最小值而不是最大值,这是一个笔误)。这两种潜能对于SSNB问题都是最优的。

如果 \(I_k\)\([n]\) 的一个子集,其中 i 使得 \(x_i\) 在分区(或类)\(E_k\) 中,对于每个 \(y \in E_k\),该函数分别解决凸 QCQP 问题,l: '下限' 和 u: '上限':

\begin{gather*} (\varphi_{l}(x), \nabla \varphi_l(x)) = \text{argmin}\ t, \\ t\in \mathbb{R},\; g\in \mathbb{R}^d, \\ \text{s.t.} \forall j \in I_k,\; t-\varphi_j - \langle g_j, y-x_j \rangle \geq c_1\|g - g_j\|_2^2 + c_2\|y-x_j\|_2^2 - c_3\langle g_j-g, x_j -y \rangle. \end{gather*}
\begin{gather*} (\varphi_{u}(x), \nabla \varphi_u(x)) = \text{argmax}\ t, \\ t\in \mathbb{R},\; g\in \mathbb{R}^d, \\ \text{s.t.} \forall i \in I_k,\; \varphi_i^* -t - \langle g, x_i-y \rangle \geq c_1\|g_i - g\|_2^2 + c_2\|x_i-y\|_2^2 - c_3\langle g-g_i, y -x_i \rangle. \end{gather*}

常量 \(c_1, c_2, c_3\) 仅依赖于 strongly_convex_constantgradient_lipschitz_constant

警告

此函数需要CVXPY库

警告

接受任何后端,但会首先转换为Numpy,然后再转换回后端。

Parameters:
  • X (数组类型 (n, d)) – 用于计算最优值 phi 和 G 的参考点

  • X_classes (类数组 (n,), 可选) – 参考点的类别

  • phi (类数组 (n,)) – 在点 X 处的潜在最佳值

  • G (类似数组 (n, d)) – 在点 X 处梯度的最优值

  • Y (数组类型 (m, d)) – 输入点

  • X_classes – 参考点的类别,默认为单一类别

  • Y_classes (array_like (m,), 可选) – 输入点的类别,默认为单个类别

  • strongly_convex_constant (float, 可选) – 输入潜能 phi 的强凸性常数,默认为 0.6

  • gradient_lipschitz_constant (float, optional) – 输入梯度 G 的 Lipschitz 性质的常数,默认为 1.4

  • log (bool, optional) – 如果为真则记录日志

Returns:

  • phi_lu (array-like (2, m)) – Y处下限和上限潜能的值

  • G_lu (array-like (2, m, d)) – Y处下限和上限潜能的梯度

  • log (dict, optional) – 如果输入的log为真,包含求解器信息的字典

参考文献

另请参见

ot.mapping.nearest_brenier_potential_fit

在源数据和目标数据上拟合SSNB

ot.da.NearestBrenierPotential

SSNB的BaseTransport包装器

使用 ot.mapping.nearest_brenier_potential_predict_bounds 的示例

平滑且强凸的最近Brenier势

平滑且强凸的最近Brenier潜力
ot.mapping.joint_OT_mapping_kernel(xs, xt, mu=1, eta=0.001, kerneltype='gaussian', sigma=1, bias=False, verbose=False, verbose2=False, numItermax=100, numInnerItermax=10, stopInnerThr=1e-06, stopThr=1e-05, log=False, **kwargs)[源]

提出的联合OT和非线性映射估计与核

[8].

该函数解决以下优化问题:

\[ \begin{align}\begin{aligned}\min_{\gamma, L\in\mathcal{H}}\quad \|L(\mathbf{X_s}) - n_s\gamma \mathbf{X_t}\|^2_F + \mu \langle \gamma, \mathbf{M} \rangle_F + \eta \|L\|^2_\mathcal{H}\\s.t. \ \gamma \mathbf{1} = \mathbf{a}\\ \gamma^T \mathbf{1} = \mathbf{b}\\ \gamma \geq 0\end{aligned}\end{align} \]

其中 :

  • \(\mathbf{M}\) 是样本之间的 (ns, nt) 平方欧几里得成本矩阵 在\(\mathbf{X_s}\)\(\mathbf{X_t}\) 之间(由 \(n_s\) 缩放)

  • \(L\) 是一个 \(n_s \times d\) 的线性算子,作用于一个核矩阵,近似重心映射

  • \(\mathbf{a}\)\(\mathbf{b}\) 是均匀的源权重和目标权重

该问题在于共同求解一个最优运输矩阵 \(\gamma\) 和适合重心映射的非线性映射 \(n_s\gamma \mathbf{X_t}\)

还可以使用偏差可选参数估计具有恒定偏差的映射(请参阅[8]的补充材料)。

用于解决问题的算法是块坐标下降法,它在对\(\mathbf{G}\)(使用条件梯度)进行更新和使用经典核最小二乘求解器对\(\mathbf{L}\)进行更新之间交替进行。

Parameters:
  • xs (类似数组 (ns,d)) – 源领域中的样本

  • xt (类数组 (nt,d)) – 目标领域中的样本

  • mu (float,可选) – 线性OT损失的权重 (>0)

  • eta (float, 可选) – 线性映射 L 的正则化项 (>0)

  • kerneltype (str,可选) – 调用函数 ot.utils.kernel() 使用的核(默认为高斯)

  • sigma (float, 可选) – 高斯核带宽。

  • bias (bool,可选) – 估计带有恒定偏差的线性映射

  • verbose (bool, 可选) – 在迭代过程中打印信息

  • verbose2 (bool, 可选) – 在迭代过程中打印信息

  • numItermax (int, 可选) – 最大BCD迭代次数

  • numInnerItermax (int, 可选) – 最大迭代次数(内层CG求解器)

  • stopInnerThr (float, 可选) – 错误的停止阈值(内部CG求解器) (>0)

  • stopThr (float, 可选) – 相关损失降低的停止阈值 (>0)

  • log (bool, 可选) – 如果为真,则记录日志

Returns:

  • gamma ((ns, nt) array-like) – 给定参数的最佳运输矩阵

  • L ((ns, d) array-like) – 非线性映射矩阵 ((\(n_s+1\), d) 如果有偏差)

  • log (dict) – 仅在参数中log==True时返回日志字典

参考文献

另请参见

ot.lp.emd

未正则化的OT

ot.optim.cg

通用正则化OT

ot.mapping.joint_OT_mapping_linear(xs, xt, mu=1, eta=0.001, bias=False, verbose=False, verbose2=False, numItermax=100, numInnerItermax=10, stopInnerThr=1e-06, stopThr=1e-05, log=False, **kwargs)[源]

联合OT和线性映射估计如在 [8]中提出的。

该函数解决以下优化问题:

\[ \begin{align}\begin{aligned}\min_{\gamma,L}\quad \|L(\mathbf{X_s}) - n_s\gamma \mathbf{X_t} \|^2_F + \mu \langle \gamma, \mathbf{M} \rangle_F + \eta \|L - \mathbf{I}\|^2_F\\s.t. \ \gamma \mathbf{1} = \mathbf{a}\\ \gamma^T \mathbf{1} = \mathbf{b}\\ \gamma \geq 0\end{aligned}\end{align} \]

其中 :

  • \(\mathbf{M}\) 是样本之间的 (ns, nt) 平方欧几里得成本矩阵 在\(\mathbf{X_s}\)\(\mathbf{X_t}\) 之间(由 \(n_s\) 缩放)

  • \(L\) 是一个 \(d\times d\) 线性算子,用于近似重心映射

  • \(\mathbf{I}\) 是单位矩阵(中性线性映射)

  • \(\mathbf{a}\)\(\mathbf{b}\) 是均匀的源权重和目标权重

这个问题在于共同求解一个最优传输矩阵 \(\gamma\) 和一个适合重心映射的线性映射 \(n_s\gamma \mathbf{X_t}\)

还可以使用偏差可选参数估计具有恒定偏差的映射(请参阅[8]的补充材料)。

用于解决问题的算法是块坐标下降法,它在更新\(\mathbf{G}\)(使用条件梯度)和使用经典最小二乘求解器更新\(\mathbf{L}\)之间交替进行。

Parameters:
  • xs (类似数组 (ns,d)) – 源领域中的样本

  • xt (类数组 (nt,d)) – 目标领域中的样本

  • mu (float,可选) – 线性OT损失的权重 (>0)

  • eta (float, 可选) – 线性映射 L 的正则化项 (>0)

  • bias (bool,可选) – 估计带有恒定偏差的线性映射

  • numItermax (int, 可选) – 最大BCD迭代次数

  • stopThr (float, 可选) – 相关损失降低的停止阈值 (>0)

  • numInnerItermax (int, 可选) – 最大迭代次数(内层CG求解器)

  • stopInnerThr (float, 可选) – 错误的停止阈值(内部CG求解器) (>0)

  • verbose (bool, 可选) – 在迭代过程中打印信息

  • log (bool, 可选) – 如果为真,则记录日志

Returns:

  • gamma ((ns, nt) array-like) – 给定参数的最优运输矩阵

  • L ((d, d) array-like) – 线性映射矩阵 ((\(d+1\), d) 如果有偏置)

  • log (dict) – 仅在参数中log==True时返回日志字典

参考文献

另请参见

ot.lp.emd

未正则化的OT

ot.optim.cg

通用正则化OT

ot.mapping.nearest_brenier_potential_fit(X, V, X_classes=None, a=None, b=None, strongly_convex_constant=0.6, gradient_lipschitz_constant=1.4, its=100, log=False, init_method='barycentric')[源]

计算在强凸势能 \(\varphi\) 下在 X 处的最优值和梯度,且具有 Lipschitz 梯度,基于由 X_classes 定义的分区,其中 \(\varphi\) 是最优的,使得 \(\nabla \varphi \#\mu \approx \nu\),给定样本 \(X = x_1, \cdots, x_n \sim \mu\)\(V = v_1, \cdots, v_n \sim \nu\)。找到这样一个在分区 \((E_k)_{k \in [K]}\)(由类 X_classes 给出)上具有所需规则性的势能,相当于找到 phi 的最优值和其梯度 \(\nabla \varphi(x_i)\)(变量 `G`)。在实践中,这些最优值是通过解决以下问题找到的

\begin{gather*} \text{min} \sum_{i,j}\pi_{i,j}\|g_i - v_j\|_2^2 \\ g_1,\cdots, g_n \in \mathbb{R}^d,\; \varphi_1, \cdots, \varphi_n \in \mathbb{R},\; \pi \in \Pi(a, b) \\ \text{s.t.}\ \forall k \in [K],\; \forall i,j \in I_k: \\ \varphi_i-\varphi_j-\langle g_j, x_i-x_j\rangle \geq c_1\|g_i - g_j\|_2^2 + c_2\|x_i-x_j\|_2^2 - c_3\langle g_j-g_i, x_j -x_i \rangle. \end{gather*}

常数 \(c_1, c_2, c_3\) 只依赖于 strongly_convex_constantgradient_lipschitz_constant。约束 \(\pi \in \Pi(a, b)\) 表示矩阵 \(\pi\) 属于边际 a 和 b 的 OT 多面体。\(I_k\)\([n]\) 的一个子集,包含满足 \(x_i\) 在分区(或类别)\(E_k\) 中的 i,即 X_classes[i] == k

这个问题是通过交替变量 \(\pi\) 和变量 \(\varphi_i, g_i\) 来解决的。对于 \(\pi\),问题是标准的离散OT问题,而对于 \(\varphi_i, g_i\),问题是一个通过使用 cvxpy (ECOS求解器)解决的凸QCQP。

接受任何兼容的后端,但将在Numpy数组上执行QCQP优化,并在最后进行转换。

警告

此函数需要CVXPY库

警告

接受任何后端,但会首先转换为Numpy,然后再转换回后端。

Parameters:
  • X (数组类型 (n, d)) – 用于计算最优值 phi 和 G 的参考点

  • V (array-like (n, d)) – 在参考点 X 处的梯度值

  • X_classes (类数组 (n,), 可选) – 参考点的类别,默认值为单一类别

  • a (类似数组 (n,), 可选) – 参考点 X 的权重,默认为均匀分布

  • b (数组类型 (n,), 可选) – 目标点 V 的权重,默认为均匀

  • strongly_convex_constant (float, 可选) – 输入潜能 phi 的强凸性常数,默认为 0.6

  • gradient_lipschitz_constant (float, optional) – 输入梯度 G 的 Lipschitz 性质的常数,默认为 1.4

  • 它的 (整型, 可选) – 迭代次数,默认为 100

  • log (bool, optional) – 如果为真则记录日志

  • init_method (str, 可选) – ‘target’ 初始化 G=V,‘barycentric’ 通过重心投影在 X 的图像上初始化

Returns:

  • phi (数组类型 (n,)) – 在点 X 处的潜在最优值

  • G (数组类型 (n, d)) – 在点 X 处的梯度的最优值

  • log (字典,可选) – 如果输入的 log 为真,则包含每次迭代中变量的值及求解器信息的字典

参考文献

另请参见

ot.mapping.nearest_brenier_potential_predict_bounds

在新源数据上预测SSNB图像

ot.da.NearestBrenierPotential

SSNB的BaseTransport包装器

ot.mapping.nearest_brenier_potential_predict_bounds(X, phi, G, Y, X_classes=None, Y_classes=None, strongly_convex_constant=0.6, gradient_lipschitz_constant=1.4, log=False)[源]

计算输入点Y处的下界和上界潜能值,使用潜在的最优值phi在X处及其梯度G在X处。‘下界’潜能对应于[58]的方法,方程2,而边界特性和‘上界’潜能来自于[59],定理3.14(考虑到该定理的表述中有一个最小值而不是最大值,这是一个笔误)。这两种潜能对于SSNB问题都是最优的。

如果 \(I_k\)\([n]\) 的一个子集,其中 i 使得 \(x_i\) 在分区(或类)\(E_k\) 中,对于每个 \(y \in E_k\),该函数分别解决凸 QCQP 问题,l: '下限' 和 u: '上限':

\begin{gather*} (\varphi_{l}(x), \nabla \varphi_l(x)) = \text{argmin}\ t, \\ t\in \mathbb{R},\; g\in \mathbb{R}^d, \\ \text{s.t.} \forall j \in I_k,\; t-\varphi_j - \langle g_j, y-x_j \rangle \geq c_1\|g - g_j\|_2^2 + c_2\|y-x_j\|_2^2 - c_3\langle g_j-g, x_j -y \rangle. \end{gather*}
\begin{gather*} (\varphi_{u}(x), \nabla \varphi_u(x)) = \text{argmax}\ t, \\ t\in \mathbb{R},\; g\in \mathbb{R}^d, \\ \text{s.t.} \forall i \in I_k,\; \varphi_i^* -t - \langle g, x_i-y \rangle \geq c_1\|g_i - g\|_2^2 + c_2\|x_i-y\|_2^2 - c_3\langle g-g_i, y -x_i \rangle. \end{gather*}

常量 \(c_1, c_2, c_3\) 仅依赖于 strongly_convex_constantgradient_lipschitz_constant

警告

此函数需要CVXPY库

警告

接受任何后端,但会首先转换为Numpy,然后再转换回后端。

Parameters:
  • X (数组类型 (n, d)) – 用于计算最优值 phi 和 G 的参考点

  • X_classes (类数组 (n,), 可选) – 参考点的类别

  • phi (类数组 (n,)) – 在点 X 处的潜在最佳值

  • G (类似数组 (n, d)) – 在点 X 处梯度的最优值

  • Y (数组类型 (m, d)) – 输入点

  • X_classes – 参考点的类别,默认为单一类别

  • Y_classes (array_like (m,), 可选) – 输入点的类别,默认为单个类别

  • strongly_convex_constant (float, 可选) – 输入潜能 phi 的强凸性常数,默认为 0.6

  • gradient_lipschitz_constant (float, optional) – 输入梯度 G 的 Lipschitz 性质的常数,默认为 1.4

  • log (bool, optional) – 如果为真则记录日志

Returns:

  • phi_lu (array-like (2, m)) – Y处下限和上限潜能的值

  • G_lu (array-like (2, m, d)) – Y处下限和上限潜能的梯度

  • log (dict, optional) – 如果输入的log为真,包含求解器信息的字典

参考文献

另请参见

ot.mapping.nearest_brenier_potential_fit

在源数据和目标数据上拟合SSNB

ot.da.NearestBrenierPotential

SSNB的BaseTransport包装器