[기계 학습] 최고의 운송과 POT 라이브러리에 대해
운송에 가장 적합한 개념을 배웠기 때문에 자신의 이해를 위해 필기를 간단하게 정리했다.
최적 운송 정보
확률 분포를 비교하는 방법으로 쓸 수 있다.이동 확률로 분포된 산을 통해 일치에 필요한 원가를 달성한다.이하 상황의 확률 분포μ0에서 확률로 분포μ산을 1로 옮겼을 때는 모래산처럼 움직이는 느낌이었다.μ0의 모든 위치에서μ1의 어디든지 옮길 수 있지만 가장 효율적인 이동 방식이 가장 적합한 운송 방식이다.
인용자 Transportation theory (mathematics), Wikipedia
이산 분포 사이의 최적 전송 거리의 공식화
입력
\mu_0 = \{a_1,a_2,...,a_m\}, \mu_1 =\{b_1,b_2,...,b_n\}
M \in \mathbb{R}^{m \times n}_{+}
출력: 최적 수송 거리최적 전송 거리를 다음 최적화 문제의 최적 값으로 정의합니다. $\gamma^* 달러입니다.
여기 있습니다.{ij}달러는 i에서 j까지의 운송 원가를 나타낸다.
\gamma^* = \underset{\gamma\in\mathbb{R}^{n \times m}_+}{arg\mathrm{min}}\sum_{i,j}^n\gamma_{i,j}M_{i,j}\\
\mathrm{s.t.} \quad M_{ij} \geq 0,\forall i,j, \quad \sum_{j=1}^m\gamma_{ij}=\mu_0,\forall i,\quad\sum_{i=1}^n\gamma_{ij}=\mu_1,\forall j
또한 KL 분집은 두 확률 분포의 비교에도 사용된다.P와 Q의 두 확률 분포가 존재할 때 다음은 이산 분포할 때의 KL 분집의 정의이다.D_{KL}(p||q) = \sum_i{P(i)\log\frac{P(i)}{Q(i)}}
KL 분집은 pythonscipy.special.kl_div에서 계산할 수 있습니다.그러나 KL 분집은 각 요소에 독립적으로 항목을 더한 관계이기 때문에 때때로 적당한 비교를 할 수 없다.최상의 운송 아이디어라면 요소 간 거리를 잘 정의하고 다른 요소를 고려해 비교할 수 있어 비교를 더 잘할 수 있다.그러나 최상의 운송은 KL의 계산 원가보다 높다는 것을 주의해야 한다.
또 이산 분포 상황에서 선형 계획이 되면 기존의 POT 등 라이브러리로 풀 수 있다.연속 분포된 상황에서 사랑을 나누었지만 직접적으로 해결하기 어렵다. 상응하는 연속 분포에서 샘플을 채취하여 점조 비교로 돌아가 해결하도록 한다.
POT 라이브러리 정보
최상의 운송 문제는 POT 라이브러리를 통해 해결할 수 있다.설치는 POT: Python Optimal Transport와 같이 pip를 통해 설치할 수 있다.
POT는 이전에 이산 분포 시 선형 계획 최적화 문제를 해결하는 해답기를 실현했다.emd(a, b, M) 호출 시 최적 수송 매트릭스γ*되돌아오다a와 b는 질량 히스토그램이고 M은 거리 행렬이다.또한 M은 2개의 분포를 입력하여 POT 라이브러리에서 계산할 수 있다.
경을 베껴 보아라quick start의 2D Optimal transport between empirical distributions.
import numpy as np
import matplotlib.pylab as pl
import ot
import ot.plot
n = 100 # 各分布のサンプル数
#1つ目の分布パラメータ
mu_s = np.array([0, 0])
cov_s = np.array([[1, 0], [0, 1]])
#2つ目の分布パラメータ
mu_t = np.array([4, 4])
cov_t = np.array([[1, -.8], [-.8, 1]])
#2Dガウス分布で作成それぞれの分布を作成
xs = ot.datasets.make_2D_samples_gauss(n, mu_s, cov_s)
xt = ot.datasets.make_2D_samples_gauss(n, mu_t, cov_t)
#各点の重さ。今回は全て1/nとしている
a, b = np.ones((n,)) / n, np.ones((n,)) / n
# 距離を定義する
# ot.distで、xsとxtの距離行列を計算する。
# https://pythonot.github.io/all.html?highlight=dist#ot.dist
M = ot.dist(xs, xt)
M /= M.max()
#作成した2つの分布を可視化
pl.figure(1)
pl.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')
pl.plot(xt[:, 0], xt[:, 1], 'xr', label='Target samples')
pl.legend(loc=0)
pl.title('Source and target distributions')
#計算した距離行列の可視化
pl.figure(2)
pl.imshow(M, interpolation='nearest') #2次元配列を画像として表示
pl.title('Cost matrix M')
#最適輸送行列の計算
G0 = ot.emd(a, b, M)
#最適輸送行列の可視化。前と後の対応関係がわかる。
pl.figure(3)
pl.imshow(G0, interpolation='nearest') #2次元配列を画像として表示
pl.title('OT matrix G0')
#2つの分布図に対しての輸送対応を可視化
pl.figure(4)
ot.plot.plot2D_samples_mat(xs, xt, G0, c=[.6, .6, .6]) #見やすさのため、サンプルと線の色を変えました。
pl.plot(xs[:, 0], xs[:, 1], '+b', label='Source samples')
pl.plot(xt[:, 0], xt[:, 1], 'xr', label='Target samples')
pl.legend(loc=0)
pl.title('OT matrix with samples')
우선, 두 분포의 가장 좋은 운송에 관해서는 이 견본 코드를 참고하여 적당히 교체하면 된다.
최후
최우선 운송 계산 알고리즘의 연구 동향에 따르면 색상 변환과 모양 변환 등 이미지 프로세싱 시스템의 응용, 언어 프로세싱 시스템, 데이터 생성과 데이터 보완 등에도 활용되는 등 소품으로도 흥미롭다.
문헌 목록
Reference
이 문제에 관하여([기계 학습] 최고의 운송과 POT 라이브러리에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/purple_jp/items/fe935e73382373264c3e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)