web-dev-qa-db-ja.com

アルゴリズムの精度を測定する方法は?

(関数の最小値を見つけるための)いくつかの最適化アルゴリズムがあり、それらがどの程度優れているかを確認したいと思います。テストケースを作成し、実際の結果と理論上の結果を比較するとします。関数の最小値が実際に見つかったかどうかを推定するためにどのような測定を使用すればよいですか?

私は考えました:

  • 関数評価の平均数(±標準偏差)
  • 成功率(実際に最小を見つける頻度)

他に見逃したものはありますか(アルゴリズムが既知のソリューションから1e-4を終了するとします。それで、すでに成功しているかどうかはわかりませんか?)

私の主な関心事はnot時間の複雑さです。正確な解が見つからない場合のアルゴリズムの精度です(例:多次元解空間)。収束率を計算するにはどうすればよいですか?

2
alex

あるソリューションが別のソリューションにどの程度「近い」かを知る簡単な方法は、その標準誤差を決定することです。

標準誤差は、得られる回答の標準偏差です。次に、2つのソリューション間の距離を標準誤差で割ります。答えが1未満の場合、ランダム性だけで大きな差を得ることができるため、これはかなり近い値です。 2未満の場合でも、それは立派です。 2を超えると、あなたはノーと言います、近くではありません。

もう1つの方法は、変化しているものすべてに関して解の2次導関数を取得することです。その2次導関数は解の「鋭さ」を表し、標準誤差はその逆平方根に比例します。

数学が好きなら、 herehere

2
Mike Dunlavey
  1. アルゴリズムの複雑さを理解する(そのBig O)
  2. 1つの反復を実行するのにかかる時間を測定する(一定の場合)、または複数の反復を測定して、かかる時間を償却します。

それでおしまい。

特定のnの実行時間を取得するには、1回の反復にかかる時間を取り、それをビッグOに接続します。たとえば、ビッグOがO(n ^ 2)であり、1回の反復に100がかかる場合ミリ秒の場合、n = 6の実行時間は10秒になります。

2
Robert Harvey