0

私の現在の方法では、最も正確な配列を決定できますが、有益な結果を表示するための良い方法を見つけることができません。

これが私の状況です…</p>

X個の整数配列を静的整数配列と比較します。配列内の各位置について、静的配列内の同等の位置と比較することにより、位置の精度の結果を計算します。配列の最後の位置精度の結果が決定された後、後で比較するために、その配列のすべての精度の結果の合計を保存します。

すべての精度結果の各配列の合計が保存されると、それらは互いに比較されます。合計が最小の配列が最も正確であると見なされます。

擬似コード…</p>

foreach (ComparableArray as SingleArray) {
    for (i = 0; i < count(SingleArray); i++) {
        AccuracyResults[SingleArray] += |StaticArray[i] - SingleArray[i]| / CONSTANT;
    }   
}   
BestArray = AscendingSort(AccuracyResults)[0];

精度は、StaticArrayからのSingleArray値の差の絶対値を取得し、定数で除算することによって決定されます。精度の結果が1未満の場合、結果は正確であると見なされます。結果>1の場合、それは不正確であり、結果=0は完全です。

これがシナリオです...簡単にするために2つの配列を使用しましょう

S = [56、53、50、64]

A = [56、54、52、64]

B = [54、52、51、63]

Aで始まる各配列をループします。

精度については、A( 56)とS(56 )の位置[1]を比較してください。精度を決定します(定数には2つ使用します)| 56-56 | = 0、0 /2 = 0 ; 完璧な精度

引き続き各位置を比較し、精度を計算します| 53-54 | = 1、1 / 2 = 0.5 ; <=1であるため正確

| 50-52 | = 2、2 / 2 = 1 ; 正確

| 64-64 | = 0 ; 完全

次に、配列A 0 + 0.5 + 1 + 0= 1.5のすべての精度の結果の合計を計算します

配列Bに対して同じ操作を行うと、最終結果は1 + 0.5 + 0.5 + 0.5= 2.5になります。

ここで、配列AとBを比較すると、合計が小さいため、配列Aの方がBよりも正確であることがわかります。

問題は1.5であり、AがBに対してどれだけ正確であるかを表示しようとすると、2.5はあまり意味がありません。

これらの結果を表示するための最良の方法は何でしょうか?パーセンテージを表示することを考えました…たとえば、AはBより17%優れています。または、BestArrayは平均より6%優れています。

それらの結果をどのように計算しますか?

精度を計算する私の方法に論理的な問題がありますか、またはより良い方法を知っていますか?

あなたが提供できる洞察に感謝します!

4

4 に答える 4

1

「位置精度」は単なるエラーであり、正規分布の場合(予想どおり)、ガウス分布でモデル化できます。その場合、ガウス確率変数の合計はそれ自体がガウスであるため、「すべての精度の合計」の数値もガウス分布の確率変数になります。これらの誤差の合計の平均と分散を計算し、システムをモデル化するガウスPDF(確率分布関数)を使用して、「最後の不格好なベクトルは、誤差の合計が95%を超えるため、真っ赤になるはずです。そのようなすべてのベクトルの」。または、「他のすべてのベクトルの1%未満のエラーがあったため、最後のベクトルはA+でした」。

このwiki投稿も役立つかもしれません。

ポール

于 2010-01-16T06:51:42.930 に答える
1

相対的なパーセンテージは悪い考えです。なぜなら、人々はそれが実際に何を意味するのかを判断するのが非常に苦手だからです。詳細については、「悪い科学」という本を参照してください。

合計を最も正確なものから最も低いものの順に表示し、評価システムを説明するだけです。それらを何らかのパーセンテージに変換することは役に立たないと思いますが、良い、中途半端な、そして悪い精度が何であるかについて、いくつかのガイド図またはバンディング(たとえば、テキストまたは背景に色を付けることによって)を与えることは良い考えです。

最後に、あなたの質問はあなたのプログラミングプログラムに非常に固有であり、それが表現されている方法で他の多くの人々に役立つ可能性は低いです。ここでは、質問を技術的なトピックに具体的にすることを好みますが、一般的に他の問題に適用できるので、次に問題をより一般的に表現すると、より良いリソースになります。

于 2010-01-15T09:52:16.830 に答える
1

私は@Martinに同意する傾向があり、定性的な測定値の違いを定量化するために数値を使用するのは少し危険です。しかし、人々はいつもそれをしているので、あなたがそれを続けたいのなら、すぐにそれを行ってください!

さて、私が本当に書きたかったのは、あなたの擬似コードがひどく擬似コードではないということです。これが私が書く擬似コードです:

ManhattanDistance[{56, 53, 50, 64},{56, 54, 52, 64}]

これは、バージョンと同じ計算を指定します。さて、あなたはこれが有効なMathematicaステートメントであると認識するかもしれないし、認識しないかもしれないが、それは重要ではない。重要なのは、 2つのベクトル間の距離を測定するための無数の関数の1つにぶつかったということです。他の距離測度には、ユークリッド距離とチェス盤距離が含まれます。

また、ベクトル間の距離を測定するために、いくつかのベクトルノルムのいずれかを使用することもできます。たとえば、Mathematicaは計算の結果sqrt(5)を与えます。

Norm[S - A]

だから、もしあなたがベクトル距離とノルムのいくつかの定義のためにグーグルの周りのいくつかの危険な疑似統計にふけることを望むなら。コードまたは少なくとも命令型アルゴリズムも見つかると思います。

よろしく

マーク

PS私が疑似科学であなたを助けた人には言わないでください:-)

于 2010-01-15T11:47:05.880 に答える
0

平均二乗誤差は、ソリューションとソリューションの推定値の間のエラーを定量化するために、エンジニアリング界でよく使用されます。

値の分散が大きい問題を回避するには、log(error)の使用を検討してください...もちろん、これにはlog(0)が無限大であり、(0 <error <1)logが負の数を与えるという独自の問題があります。

于 2010-01-18T12:34:47.673 に答える