pot lib:optimal transport python库

article/2025/11/6 16:32:16

文章目录

    • transport
      • 1. [计算最优传输(Computational Optimal Transport)](https://zhuanlan.zhihu.com/p/94978686)
      • 2. 离散测度 (Discrete measures), 蒙日(Monge)问题, Kantorovich Relaxation (松弛的蒙日问题)
      • 3. scipy.stats.wasserstein_distance 距离计算
      • 4. 转化为线性方程求解 Wasserstein距离 , KL散度的对比分析
      • 5. pytorch 通过Sinkhorn 方法计算 Wasserstein距离
      • 6. sinkhorn 原理:
      • 7. 解决方案
      • 8. KL散度
      • 9. book
    • pot lib
      • 1 问题目标
      • 2 ot.emd 方法
      • 3. ot.dist
      • 4. 计算Wasserstein distance
      • 5. 特殊case:快速计算
      • 6. Regularized Optimal Transport
        • 6.1 Entropic regularized OT
        • 6.2 Quadratic regularization 二次方约束
        • 6.3 Group Lasso regularization
      • 7 一个通用的约束框架
      • 7.1 二范数正则化
      • 7.2 entropic regularization
      • 7.3 平方 + entropic reg
    • 8. 求质心
    • 9. Debiased Sinkhorn barycenter 无偏质心
    • 10 unbalanced OT
    • 11. Partial optimal transport 部分转换

transport

https://github.com/rpetit/color-transfer
Rabin, J., & Papadakis, N. (2014). Non-convex relaxation of optimal transport for color transfer.

https://github.com/RachelBlin/Colorization-optimal-transport
Adaptive color transfer with relaxed optimal transport" by Rabin et. al.

A non parametric approach for histogram
segmentation 一种根据直方图分布的图像分割算法。

Optimal Transportation for Example-Guided Color Transfer 颜色转换

https://github.com/search?q=Optimal+Transport

1. 计算最优传输(Computational Optimal Transport)

介绍距离矩阵 和 概念

2. 离散测度 (Discrete measures), 蒙日(Monge)问题, Kantorovich Relaxation (松弛的蒙日问题)

最优运输(Optimal Transfort):从理论到填补的应

3. scipy.stats.wasserstein_distance 距离计算

转化为累计直方图的差异。
還看不懂Wasserstein Distance嗎?看看這篇
在这里插入图片描述

4. 转化为线性方程求解 Wasserstein距离 , KL散度的对比分析

Wasserstein距离

5. pytorch 通过Sinkhorn 方法计算 Wasserstein距离

想要算一算Wasserstein距离?这里有一份PyTorch实战

6. sinkhorn 原理:

最优传输简介
在这里插入图片描述

7. 解决方案

在这里插入图片描述

8. KL散度

在这里插入图片描述

https://zhuanlan.zhihu.com/p/527799934

9. book

Computational Optimal Transport
https://arxiv.org/pdf/1803.00567v4.pdf

pot lib

1 问题目标

将一个分布转移到另一个分布,做最小的功
在这里插入图片描述

主要应用:
1)测量两个分布的相似性,尤其是对于没有相同因变量(support)的分布
2)获得两个分布的mapping 关系。

  1. Wasserstein distance between distributions

用于测量两个分布的距离或相似度。 <C, P>

  1. mapping
    OT问题的一个非常有趣的方面是OT映射本身。当计算离散分布之间的最佳传输时,一个输出是OT矩阵,它将为您提供每个分布中样本之间的对应关系.

  2. ot.optim.cg

    是一个通用的OT问题求解器,可以利用各种平滑连续约束。
    generic OT solver ot.optim.cg that can solve OT problems with any smooth/continuous regularization term making it particularly practical for research purpose.

  3. 规模大的问题用 geomloss, 兼容pytorch

2 ot.emd 方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPVkY2KA-1681721618643)(2023-04-12-13-11-15.png)]

# a and b are 1D histograms (sum to 1 and positive)
# M is the ground cost matrix
T = ot.emd(a, b, M)  # exact linear program

exact linear program 求精确解,复杂度是 O^3

一维例子:
两个直方图以及他们的cost 矩阵
在这里插入图片描述

得到的结果
在这里插入图片描述

二维例子:
2D point, 每个点的概率相同(uniform)

在这里插入图片描述

得到的结果和转换关系:
在这里插入图片描述

无论是一维还是二维,都是一些位置,另外就是把每个位置的值当作土堆的质量

3. ot.dist

采用不同的距离评价标准:

a, b = ot.unif(n), ot.unif(n)  # uniform distribution on samples# loss matrix
M1 = ot.dist(xs, xt, metric='euclidean')
M1 /= M1.max()# loss matrix
M2 = ot.dist(xs, xt, metric='sqeuclidean')
M2 /= M2.max()# loss matrix
Mp = ot.dist(xs, xt, metric='cityblock')
Mp /= Mp.max()

得到不同的距离矩阵(cost matrix):
在这里插入图片描述

最终得到的映射关系也是不同的:
在这里插入图片描述

4. 计算Wasserstein distance

可以通过计算出的转换矩阵T 与 cost matrix M对应相乘求和。
也可以通过 ot.emd2(a, b, M)
在这里插入图片描述

注意Wasserstein distance的公式:
在这里插入图片描述

当p=1时, 利用 M = ot.dist(xs, xt, metric=‘euclidean’)
当p=2时, 利用 M = ot.dist(xs, xt) 默认是metric=‘seuclidean’, 因此调用ot.emd2后,还要求一个平方根,毕竟是 1/p

利用不同的M求解ot.emd2的效果:
分布距离越来越大,值也越来越大。
在这里插入图片描述

5. 特殊case:快速计算

再1D的情况下, ot.emd_1d, ot.emd2_1d, ot.wasserstein_1d 会有更好的计算效率。
另外就是如果两个分布都服从高斯分布,ot.gaussian.bures_wasserstein_mapping可以更快的计算。

6. Regularized Optimal Transport

正则化项1)提高计算效率,2)对于不同的应用可以设置不同的约束
在这里插入图片描述

具体来说有以下常见约束:

6.1 Entropic regularized OT

在这里插入图片描述

利用sinkhorn-knopp算法求解,函数是 ot.sinkhorn 和 ot.sinkhorn2.
lamda是一个超参数,控制 熵的大小,lamda越大,对转换矩阵的熵约束越弱,会使结果的熵更大,转换矩阵更加平滑。

The Sinkhorn-Knopp algorithm is implemented in ot.sinkhorn and ot.sinkhorn2 that return respectively the OT matrix and the value of the linear term.

主要函数是:(还有其他解法,没有一一列出。)

ot.sinkhorn
ot.sinkhorn2
ot.bregman.empirical_sinkhorn
ot.bregman.empirical_sinkhorn2

ot.sinkhorn实验:

# reg term
lambd = 1e-1Gs = ot.sinkhorn(a, b, M, lambd)

在这里插入图片描述

ot.bregman.empirical_sinkhorn 实验:
在这里插入图片描述

两者差不多。

不同的lamda reg得到的 转换矩阵T不同:
在这里插入图片描述

损失也会随着lamda增大而变大。
在这里插入图片描述

6.2 Quadratic regularization 二次方约束

在这里插入图片描述

使用函数:

ot.smooth.smooth_ot_dual(a, b, M, lambd, reg_type='kl')
ot.smooth.smooth_ot_dual(a, b, M, lambd, reg_type='l2') # 这个是二次方约束
ot.smooth.smooth_ot_semi_dual

6.3 Group Lasso regularization

没有太理解其具体原理,它的作用是促进稀疏性,一般情况下 emd算法已经足够稀疏,所以这个约束并没有什么意义。 可以将它与 entropic regularization结合。

7 一个通用的约束框架

在这里插入图片描述
在这里插入图片描述

分别依赖ot.emd 和 ot.sinkhorn

函数分别是 ot.optim.cg 和 ot.optim.gcg
使用的时候需要定义正则化约束函数 和 其导数,通过这个方法可以实现各种正则化方法。

7.1 二范数正则化

def f(G):return 0.5 * np.sum(G**2)
def df(G):return G
reg = 1e-1
Gl2 = ot.optim.cg(a, b, M, reg, f, df, verbose=True)

7.2 entropic regularization

def f(G):return np.sum(G * np.log(G))
def df(G):return np.log(G) + 1.reg = 1e-3
Ge = ot.optim.cg(a, b, M, reg, f, df, verbose=True)

7.3 平方 + entropic reg

def f(G):return 0.5 * np.sum(G**2)
def df(G):return Greg1 = 1e-3
reg2 = 1e-1
Gel2 = ot.optim.gcg(a, b, M, reg1, reg2, f, df, verbose=True)

效果对比:
在这里插入图片描述

8. 求质心

alpha = 0.5  # 0<=alpha<=1
weights = np.array([1 - alpha, alpha])
# l2bary
bary_l2 = A.dot(weights)
# wasserstein
reg = 1e-3
ot.tic()
bary_wass = ot.bregman.barycenter(A, M, reg, weights)
ot.toc()
# linear exact
ot.tic()
bary_wass2 = ot.lp.barycenter(A, M, weights, solver='interior-point', verbose=True)
ot.toc()

以上三种方法的表现:
在这里插入图片描述

9. Debiased Sinkhorn barycenter 无偏质心

barycenter(A, M, reg, weights)
barycenter_debiased(A, M, reg, weights)
A是两个分布
效果对比如下:
在这里插入图片描述

对于2Dimage:
ot.bregman.convolutional_barycenter2d(A, reg, weights)
ot.bregman.convolutional_barycenter2d_debiased(A, reg, weights, log=True)
A 是多个图cancat在一起, reg是正则化系数,weights是 每个图的权重
最终效果如下:
在这里插入图片描述

10 unbalanced OT

数量不平衡,对转换矩阵的严格要求变为 正则化约束, 不要求完全a转到b, 因为两者的总数量也不同。
在这里插入图片描述

主要函数:

ot.sinkhorn_unbalanced
ot.sinkhorn_unbalanced2entropic_kl_uot = ot.unbalanced.sinkhorn_unbalanced(a, b, M, reg, reg_m_kl)# mm_unbalanced 不带 reg正则化项
kl_uot = ot.unbalanced.mm_unbalanced(a, b, M, reg_m_kl, div='kl')
l2_uot = ot.unbalanced.mm_unbalanced(a, b, M, reg_m_l2, div='l2')

质心:
bary_wass = ot.unbalanced.barycenter_unbalanced(A, M, reg, alpha, weights=weights)
在这里插入图片描述

11. Partial optimal transport 部分转换

允许只tansport一部分:

w0, log0 = ot.partial.partial_wasserstein(p, q, M, m=0.5, log=True)
w, log = ot.partial.entropic_partial_wasserstein(p, q, M, reg=0.1, m=0.5,log=True)
精确解 和 约束解

公式如下:
在这里插入图片描述

对于两个数据分布如下:
在这里插入图片描述

转换矩阵求得为:
在这里插入图片描述

可以看出只进行了部分数据的转换。


http://chatgpt.dhexx.cn/article/J4VmFN8p.shtml

相关文章

Python 小型项目大全 46~50

# 四十六、百万骰子投掷统计模拟器 原文&#xff1a;http://inventwithpython.com/bigbookpython/project46.html 当你掷出两个六面骰子时&#xff0c;有 17%的机会掷出 7。这比掷出 2 的几率好得多&#xff1a;只有 3%。这是因为只有一种掷骰子的组合给你 2&#xff08;当两个…

在 Python 中完成的一些大型项目有哪些?

在本文中&#xff0c;我们将了解一些在 Python 中完成的大型项目。 Python是目前最流行的编程语言之一。这一趋势似乎将在 2022 年及以后继续下去。所以&#xff0c;如果你刚刚开始使用Python&#xff0c;你能做的最好的事情就是研究一些现实世界的Python项目想法。 Python 是…

PBL Python 学习——第0天

一个月PBL Python学习 第一章 Python环境的基本搭建 文章目录 一个月PBL Python学习前言一、Python下载二、Pycharm下载和配置1.Pycharm下载macOS查看方法第一步第二步第三步 Windows 2.Pycharm配置macOSWindows 总结 前言 本人是一位中学生&#xff0c;python新手&#xff0…

Python 小型项目大全 61~65

六十一、ROT13 密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project61.html ROT13 密码是最简单的加密算法之一&#xff0c;代表“旋转 13 个空格”密码将字母A到Z表示为数字 0 到 25&#xff0c;加密后的字母距离明文字母 13 个空格&#xff1a; A变成N&…

7个Python实战项目代码,让你分分钟晋级大老

关于Python有一句名言&#xff1a;不要重复造轮子。 但是问题有三个&#xff1a; 1、你不知道已经有哪些轮子已经造好了&#xff0c;哪个适合你用。有名有姓的的著名轮子就400多个&#xff0c;更别说没名没姓自己在制造中的轮子。 2、确实没重复造轮子&#xff0c;但是在重复…

Python 小型项目大全 76~81

七十六、井字棋 原文&#xff1a;http://inventwithpython.com/bigbookpython/project76.html 井字棋是一种在3 3网格上玩的经典纸笔游戏。玩家轮流放置 X 或 O 标记&#xff0c;试图连续获得三个。大多数井字棋都以平局告终&#xff0c;但如果你的对手不小心&#xff0c;你也…

Python 小型项目大全 66~70

六十六、简单替换密码 原文&#xff1a;http://inventwithpython.com/bigbookpython/project66.html 简单替换密码用一个字母代替另一个字母。由于字母A有 26 种可能的替换&#xff0c;B有 25 种可能的替换&#xff0c;C有 24 种可能的替换&#xff0c;等等&#xff0c;所以可能…

河北软件职业技术学院05级NIIT班第四学习小组——流氓山好汉一览

李大毛&#xff1a;只所以叫大毛&#xff0c;并不是因为这家伙浑身长毛&#xff0c;而是因为这家伙天天下载毛片&#xff0c;使毛片比病毒还疯狂地通过QQ在班里乱窜。 王狗狗&#xff1a;只所以叫狗狗是因为这家伙特别坏&#xff0c;在女生面前常常装成一正人君子面&#xff0…

软件精英齐聚张江 “校园之星”闪亮沪上——微软院校IT课程“校园之星”大赛决赛结果揭晓

2007年8月10日&#xff0c;微软院校IT课程“校园之星”大赛总决赛和颁奖仪式在上海张江软件园举行。自活动开展以来&#xff0c;备受人们关注的冠军获得者终于水落石 出&#xff0c;冠军组成员为湖北武汉商贸职业学院陶泽华、江苏南通农业职业技术学院王珍勇、辽宁沈阳理工大学…

重磅:吴晟当选 Apache 软件基金会 2021年董事

点击上方“开源社”关注我们 | 作者&#xff1a;刘天栋 | 编辑&#xff1a;王玥敏 | 设计&#xff1a;王福政 宣布新一届 ASF 董事会成员名单 在本周举行的 Apache 软件基金会&#xff08;ASF&#xff09;年度会员大会上&#xff0c;以下人员当选为ASF董事会成员。 Bertrand De…

科东软件Intewell操作系统获2023数字中国创新大赛·信创赛道全国总决赛三等奖

深耕信创生态&#xff0c;科东软件捷报频传 科东软件Intewell操作系统获2023数字中国创新大赛信创赛道全国总决赛三等奖 4月27日&#xff0c;2023数字中国创新大赛信创赛道全国总决赛(以下简称“大赛”)落下帷幕&#xff0c;历时2个多月&#xff0c;全国282支队伍&#xff0c;…

麦聪软件喜获双软认证

近日&#xff0c;北京麦聪软件有限公司&#xff08;以下简称&#xff1a;麦聪软件&#xff09;喜获由中国软件行业协会颁发并由北京软件和信息服务业协会评估的“软件产品证书”和“软件企业证书”&#xff0c;即业界公认的“双软认证”。 据了解&#xff0c;获得“双软认证”…

清华学姐熬了一个月肝出这份32W字软件测试知识手册,在 Github标星31K+

前言 金三银四即将过去&#xff0c;后面迎来的便是金九银十&#xff0c;一直想着说分享一些软件测试的面试题&#xff0c;这段时间做了一些收集和整理&#xff0c;大家可以试着做一下&#xff0c;希望能帮助到大家。 包括测试理论、Linux基础、MySQL基础、Web测试、接口测试、…

MFC学生成绩管理系统

MFC学生成绩管理系统 程序使用MFC框架编写&#xff0c;开发工具是VC6.0。 要求完成以下功能&#xff1a; 添加学生信息&#xff08;学生信息包含学号、姓名、班级、密码、各科成绩等&#xff09;&#xff1b;删除学生信息&#xff08;指定学号删除&#xff09;&#xff1b;修…

不是科班出身可以做配音演员吗?成都环宇博睿告诉你有没有学历要求?

成都环宇博睿今天给大家带来的是大多学生问得比较多的问题&#xff0c;在此成都环宇博睿给大家解读&#xff1a;文凭&#xff0c;对配音演员来说重要吗&#xff1f;不重要的话&#xff0c;各大求职网站都写着“大专及以上学历&#xff0c;本科学历”等字样&#xff1b;重要的话…

【软件测试】复习完整版还不快看怎么复习?--电子科技大学2023年期末考试

《软件测试》重要知识点 作者内容发布时间博客地址GithubTrae1ounG软件测试复习2023/6/3Trae1ounG的博客_CSDN博客-软件测试,计算机组成原理,数据库领域博主GitHub - Trae1ounG/jisuanjizuchengyuanli: 计组期末复习汇总 期末题型 分析题 分析怎么解决 分析修改缺陷 应用题 …

从7k到14k,软件测试三年,其中的辛酸只有我自己知道

我是今年2月换的工作&#xff0c;上一份工作刚好做满了2年&#xff0c;上一家公司月薪7000&#xff0c;实际拿到手就6450左右。但是工作了一阵后&#xff0c;工作越来越忙&#xff0c;感觉自己的技能已经跟不上了&#xff0c;加上周围的朋友也都开始跳槽&#xff0c;薪资都从之…

MindCon极客周 | 第四届如期而至,挑战硬核任务,C位出道赢万元激励 !

MindCon 极客周是华为昇思 MindSpore 开源社区每半年举办一次的开发者狂欢盛会&#xff0c;旨在引领兴趣者们走入 AI 探索的世界。第四届 MindCon 极客周以超级挑战赛为主题&#xff0c;发布多领域多级别应用场景的挑战任务&#xff0c;与开发者共同探索 AI 开源趣味世界。 第四…

河北工程科技学院软件学院学子在第二届“火焰杯”软件测试高校就业选拔赛中斩获大奖

本文由河北工程科技学院首发。http://www.hebsoft.com/?p5967 2022年4月&#xff0c;我院软件工程专业老师组织学生参加了第二届火焰杯高校就业选拔赛&#xff0c;我院学生与广西大学、重庆邮电大学、华东师范大学、华东交通大学、西安邮电大学、石家庄铁道大学、河北工程大学…