1

現在、2 つの 1D 分布を比較したいという問題があります。私の場合、分布の 1 つを別の分布に変えるためにどれだけ移動する必要があるかを見つけようとしているので、比較のためにアースムーバーの距離を使用します。しかし、私はまた、分布が別のものに変わるために移動される実際の方向にも興味があります.

1D でアースムーバー距離の有向バージョンはありますか?

より正確に言うと、私には 2 つのディストリビューションがf : {1...N} -> |Rあり、g : {1...N} -> |R互いに向き合わなければなりません。fここで、 のビンから のビンに移動した汚れの量もg増やしたいと考えていますが、方向を考慮したいと考えています。つまり、「汚れ」がビンxからビンに移動する場合、標準の地球移動距離の代わりに、y移動した量を掛けたいと思います。次に、動かした地球の総量が最小になる動きを見つけたいと思います。x-yd(x,y)

これに使用できる既知のアルゴリズムはありますか? これについては、元のハンガリーのアルゴリズムを変更できるはずですが、このアルゴリズムを使用したことがないため、これを行う方法はまだわかりません。

4

3 に答える 3

2

したがって、私があなたの質問を正しく理解していれば、以下の (Go での) コードで解決できると思います。各分布の積分が等しい (一方を他方に変換できることを意味する) と仮定できる場合は、移動するだけです。ディストリビューションを左から右に移動し、各ポイントで右からそこに移動する必要がある汚れの量、またはそこから左に移動する必要がある余分な汚れの量を把握します。いずれの場合も、必要な汚れはすべて取得できると想定できるため、一時的に「マイナス」の汚れがあっても問題ありません。

// Finds out how to move dirt to transform b into a.
// assumes that the integrals over a and b are equal
func earthMover(a, b []int) []int {
  r := make([]int, len(a))
  for i := 0; i < len(a); i++ {
    // if diff is positive it means that there is too much dirt here and it
    // must be moved to the right.  if it is negative it means some dirt
    // needs to be pulled in from the right.  In either case dirt can be
    // moved over multiple spaces.
    diff := b[i] - a[i]
    r[i] = diff
    b[i] -= diff
    if i < len(a) - 1 {
      b[i+1] += diff
    }
  }
  return r
}

ここに例があります。負の数は汚れが右から引き込まれることを意味し、正の数は左から右に押し込まれることを意味します。あなたのメトリクスについては、移動配列のすべての数値を合計するだけだと思う​​ので、この場合の解は 5 です。

target: [ 3  0  1  0  2  6]
source: [ 1  1  5  0  1  4]
  move: [-2 -1  3  3  2  0]

これで、実際にそれが必要な場合は、分布の加重平均または重心 (ダート) の違いを実際に探していることがわかりました。例えば:

            0  1  2  3  4  5
  target: [ 3  0  1  0  2  6]
weighted:   0 +0 +2 +0 +8+30 = 40

  source: [ 1  1  5  0  1  4]
weighted:   0 +1+10 +0 +4+20 = 35

ご覧のとおり、ターゲットの重心からソースの重心を差し引いた値は、先ほど取得した数値で、40 - 35 = 5 です。

于 2012-04-04T16:16:46.330 に答える
1

あなたの「距離」は平均(f) - 平均(g)です。地球の移動距離に関係なく移動した地球の総量を最小化するために、貪欲なアルゴリズムは、分布間の統計的距離である最適値を達成します。

于 2012-04-04T15:21:00.660 に答える
0

https://github.com/wihoho/VideoRecognition

于 2013-12-10T09:27:19.240 に答える