1

グラフのプロットとデータをご覧ください。プロット「px4」と他のプロットの間で最も近い一致(類似度が最も高い)を見つける方法またはアルゴリズムは何ですか。この問題に適応できる C# ライブラリまたは VF-Graph 認識アルゴリズムが存在する場合、任意の提案をいただければ幸いです。

px データからのプロット

データ

    enr px1 px2 px3 px4 px5 px6
    1   90  5   15  20  60  10
    2   70  10  20  30  85  15
    3   100 15  15  10  32  18
    4   80  20  8   3   9   44
    5   60  25  3   5   15  12
    6   50  30  12  8   24  16
    7   70  18  28  24  70  25
    8   90  12  32  28  84  22
    9   75  20  12  15  45  16
    10  65  10  20  18  54  25
4

2 に答える 2

3

私は統計の専門家ではありません。しかし...私はプロットを取り、各ポイントと別のプロットの同等のポイントとの違いを一度に1ポイントずつ比較します。Math.Abs​​()を使用して、これらの10個の差のそれぞれを正の数に変換してから、任意の方法(平均、中央値など)を使用して、10個の差の平均を取ります。他のすべてのプロットについて、それぞれの比較を繰り返します。ほとんどの計算は途中で捨てることができ、各プロットの平均数を保持するだけで済みます。最小の平均は、おそらく最も近いプロットになります。

今日はやることがあまりないので...

Dictionary<string, int[]> plots = new Dictionary<string, int[]>();

plots.Add("px1", new int[] { 90, 70, 100, 80, 60, 50, 70, 90, 75, 65 });
plots.Add("px2", new int[] { 5, 10, 15, 20, 25, 30, 18, 12, 20, 10 });
plots.Add("px3", new int[] { 15, 20, 15, 8, 3, 12, 28, 32, 12, 20 });
plots.Add("px4", new int[] { 20, 30, 10, 3, 5, 8, 24, 28, 15, 18 });
plots.Add("px5", new int[] { 60, 85, 32, 9, 15, 24, 70, 84, 45, 54 });
plots.Add("px6", new int[] { 10, 15, 18, 44, 12, 16, 25, 22, 16, 25 });

string test = "px4";
string winner = string.Empty;
double smallestAverage = double.MaxValue;

foreach (string key in plots.Keys)
{
    if (key == test)
    {
        continue;
    }

    int[] a = plots[test];
    int[] b = plots[key];

    double count = 0;

    for (int point = 0; point <= 9; point++)
    {
        count += Math.Abs(a[point] - b[point]);
    }

    double average = count / 10;

    if (average < smallestAverage)
    {
        smallestAverage = average;
        winner = key;
    }
}

Console.WriteLine("Winner: {0}", winner);
于 2012-04-04T08:03:06.183 に答える
2

2 つのグラフの「差異」を定義する方法は文字通り無数にあります。

グラフを 10 次元のベクトルとして扱う場合は、ベクトル normを使用できます。

それらを区間 [1, 10] の実数値関数として扱いたい場合は、L^p-spaceでノルムを使用できます。(これには積分が必要ですが、関数はすべて直線セグメントで構成されているため、積分の数値近似を行わなくても、このノルムを正確に計算できます。)

実際には、「類似」をどのように定義するかを決定し、期待どおりに動作するメソッドを選択する必要があります。

于 2012-04-04T09:04:59.020 に答える