4

次のような一連のパラメーターを持つオブジェクトがあります。

var obj = new {Param1 = 100; Param2 = 212; Param3 = 311; param4 = 11; Param5 = 290;}

反対側には、オブジェクトのリストがあります:

var obj1  = new {Param1 = 1221 ; Param2 = 212 ; Param3 = 311 ; param4 = 11  ; Param5 = 290 ; }
var obj3  = new {Param1 = 35   ; Param2 = 11  ; Param3 = 319 ; param4 = 211 ; Param5 = 790 ; }
var obj4  = new {Param1 = 126  ; Param2 = 218 ; Param3 = 2   ; param4 = 6   ; Param5 = 190 ; }
var obj5  = new {Param1 = 213  ; Param2 = 121 ; Param3 = 61  ; param4 = 11  ; Param5 = 29  ; }
var obj7  = new {Param1 = 161  ; Param2 = 21  ; Param3 = 71  ; param4 = 51  ; Param5 = 232 ; }
var obj9  = new {Param1 = 891  ; Param2 = 58  ; Param3 = 311 ; param4 = 21  ; Param5 = 590 ; }
var obj11 = new {Param1 = 61   ; Param2 = 212 ; Param3 = 843 ; param4 = 89  ; Param5 = 210 ; }

リストされたオブジェクトの最初のオブジェクトに最も近いものを見つけるための最良の (最も簡単な) アルゴリズムは何ですか?

4

3 に答える 3

4

検索する前に、最も近い用語を定義する必要があります!!



1- 多くの人が使用する 1 つの方法は、平均二乗誤差(またはユークリッド距離) です。

すべてのオブジェクトの平均二乗誤差を計算します。

Sqr(obj.Param1-obj1.Param1) + Sqr(obj.Param2-obj1.Param2) + ..... // for obj1
Sqr(obj.Param1-obj2.Param1) + Sqr(obj.Param2-obj2.Param2) + ..... // for obj2

最小値のものを選択します...



2- 最小絶対誤差を使用することもできます:

Abs(obj.Param1-obj1.Param1) + Abs(obj.Param2-obj1.Param2) + ..... // for obj1
Abs(obj.Param1-obj2.Param1) + Abs(obj.Param2-obj2.Param2) + ..... // for obj2

最小値のものを選択します...



3- また、上記で選択した任意の基準でk 最近傍を適用できます



それはすべて、これらのパラメーターのプロパティに依存します...

詳細については、分類アルゴリズムのリストを参照してください。

于 2010-06-09T16:29:55.050 に答える
1

ユークリッド距離を使用することもできます。

基本的に、各オブジェクトが5次元のポイントであると偽って、最も近い(つまり、距離が最も短い)ポイントを探します。

于 2010-06-09T16:33:55.633 に答える
1

依存します、私は推測します。いくつかの可能性が思い浮かびます。

  • SAD:パラメーターの各ペア(テストするパラメーターと各候補)の絶対差を計算し、それらを合計します。最も小さい番号が最も近い
  • L2-ノルム:パラメーターの各ペアの差を計算し、それらを二乗し、それらを合計し、平方根を取ります
  • コサイン:各パラメーターに他のパラメーターを掛けて、合計します。結果を両方のオブジェクトの長さ(L2-Norm)の積で除算します

もちろん、さらに多くの可能性があります。したがって、正確に何が欲しいかを指定する必要があります。

于 2010-06-09T16:33:56.240 に答える