4

複数の数値セットをターゲット セットと比較して、どれが最も「似ている」かを判断するアルゴリズムは何ですか?

このアルゴリズムの用途の 1 つは、今日の 1 時間ごとの天気予報を過去の天気記録と比較して、天気が似ている日を見つけることです。

2 つのセットの類似性は少し主観的なものであるため、アルゴリズムは実際には、良い一致と悪い一致を区別する必要があります。過去のデータがたくさんあるので、近いものは自動で捨てて、「ベストマッチ」が上位にくるようにして、ユーザーが閲覧しなければならない日数を絞り込みたいと思います。リスト。

編集: 理想的には、アルゴリズムの結果は、異なるデータ セットを使用した結果に匹敵します。たとえば、ナイルズが提案する平均二乗誤差を使用すると、かなり良い結果が得られますが、データのスケールが異なるため、温度を比較するときに生成される数値は、風速や降水量などの他のデータで生成される数値と比較することはできません. 気象以外のデータの一部は非常に大きいため、温度を使用して生成される数十または数百と比較して、平均二乗誤差アルゴリズムは数十万の数を生成します。

4

11 に答える 11

4

天気の比較などのアプリケーションでは、平均二乗誤差メトリックが機能する可能性があると思います。計算が簡単で、意味のある数値が得られます。

経時的に測定値を比較したいので、計算から欠損値を除外することができます。

時間に縛られていないか、並べ替えられていない多次元散布データの値の場合、それは少し難しくなります。適切な距離メトリックを選択することは、そのようなデータを分析する技術の一部になります。

于 2008-09-26T14:22:51.543 に答える
2

ピアソン相関係数を使用します。ここにあるSQLクエリでそれを計算する方法を見つけました:http://vanheusden.com/misc/pearson.php

于 2008-09-27T14:28:45.110 に答える
1

例として、気温、風、降水量を測定していると仮定します。これらのアイテムを「機能」と呼びます。したがって、有効な値は次のようになります。

  • 温度:-50から100F(私は米国ミネソタ州にいます)
  • 風:0から120マイル/時(これが現実的かどうかはわかりませんが、我慢してください)
  • 降水量:0〜100

データを正規化することから始めます。Tempの範囲は150ユニット、Wind 120ユニット、Precip100ユニットです。風の単位に1.25を掛け、降水量に1.5を掛けて、気温とほぼ同じ「スケール」にします。ここで空想を得て、1つの機能を他の機能よりも価値のあるものとして評価するルールを作成できます。この例では、風の範囲が広い場合がありますが、通常は範囲が狭いため、結果が歪むのを防ぐために、風の重さを軽くする必要があります。

ここで、各測定値を多次元空間の点として想像してください。この例では、3D空間(温度、風、降水量)を測定します。良い点は、機能を追加すると、空間の次元が増えるだけで、計算は同じままになることです。とにかく、現在のポイントに最も近い履歴ポイントを見つけたいと思います。これを行う最も簡単な方法は、ユークリッド距離です。したがって、現在のポイントから各履歴ポイントまでの距離を測定し、最も近い一致を維持します。

for each historicalpoint

    distance = sqrt(
        pow(currentpoint.temp - historicalpoint.temp, 2) + 
        pow(currentpoint.wind - historicalpoint.wind, 2) +
        pow(currentpoint.precip - historicalpoint.precip, 2))

    if distance is smaller than the largest distance in our match collection
        add historicalpoint to our match collection
        remove the match with the largest distance from our match collection

next

これはブルートフォースアプローチです。時間があれば、もっと夢中になれるかもしれません。多次元データは、kd-treesr-treesのようなツリーとして表すことができます。大量のデータがある場合、現在の観測値をすべての過去の観測値と比較するのは遅すぎます。木はあなたの検索をスピードアップします。データクラスタリング最近傍探索を確認することをお勧めします。

乾杯。

于 2008-09-26T21:18:41.997 に答える
1

統計学者に相談してください。

真剣に。

彼らは生計を立てるためにこの種のことをしています。

あなたは「2 つのセットの類似性は少し主観的である」と書いていますが、それはまったく主観的ではありません。それは、問題のドメインに対する類似性の適切な基準を決定することの問題です。

これは、たくさんのプログラマーに尋ねるよりも専門家に話す方がはるかに良い状況の 1 つです。

于 2008-09-27T14:19:04.977 に答える
1

金融では、ベータを使用して 2 つの一連の数値の相関関係を測定します。EG、ベータ版は、「昨年、S&P 500 指数の価格が 5% 上昇した日に IBM の価格はいくら上昇したでしょうか?」という質問に答えることができます。移動のパーセンテージを扱うため、2 つのシリーズは異なるスケールを持つことができます。

私の例では、ベータは Covariance(IBM、S&P 500) / Variance(S&P 500) です。

ウィキペディアには、 CovarianceVariance、および Beta を説明するページがあります: http://en.wikipedia.org/wiki/Beta_(finance)

于 2008-09-26T14:46:20.910 に答える
1

統計サイトを見てください。あなたは相関関係を探していると思います。

于 2008-09-26T14:53:58.770 に答える
0

何度か、データの分布がわからないとおっしゃいましたが、もちろんその通りです。つまり、明日は華氏 150 度、時速 2000 km の風が吹く日が来るかもしれませんが、その可能性はほとんどないようです。

あなたは長い歴史の記録を持っているので、分布について非常に良い考えを持っていると私は主張します. それを考えると、過去の分布の分位点に関してすべてを置き、すべての測定値の分位点の絶対差または二乗差で何かを行うことができます。これは別の正規化方法ですが、データの非線形性を考慮したものです。

どのようなスタイルの正規化でも、すべての変数を比較可能にする必要があります。

例として、ある日が風が強く暑い日だったとします。この場合、気温の分位が .75 で、風の分位が .75 である可能性があります。熱の 0.76 分位点は 1 度離れている可能性があり、風の分位点は時速 3km 離れている可能性があります。

経験的分布へのこの焦点も同様に理解しやすく、通常の推定 (平均二乗誤差など) よりも堅牢である可能性があります。

于 2008-09-27T13:47:49.420 に答える
0

まず、これらがセットなのか、それとも順序付けられたコレクションなのかを自問してください。

これらは重複のある順序付けられたコレクションであると想定しています。最も明白なアルゴリズムは、数値が同じと見なされる許容範囲を選択し、その基準で数値が同じであるスロットの数をカウントすることです。

于 2008-09-26T14:21:28.660 に答える
0

私は自分のアプリケーションでこれに対する解決策を実装していますが、より良い、またはより「正しい」ものがあるかどうかを確認しています。履歴日ごとに、次のことを行います。

function calculate_score(historical_set, forecast_set)
{
    double c = correlation(historical_set, forecast_set);
    double avg_history = average(historical_set);
    double avg_forecast = average(forecast_set);
    double penalty = abs(avg_history - avg_forecast) / avg_forecast
    return c - penalty;
}

次に、すべての結果を高いものから低いものへと並べ替えます。

相関関係は -1 から 1 までの値であり、数値が一緒に下降するか上昇するかを示すため、2 セットの数値の平均のパーセンテージ差で「ペナルティ」を課します。

于 2008-09-26T15:31:23.843 に答える
0

おそらく、一連の数値をベクトルとして見ることができます (セットの各数値はベクトルの構成要素です)。

次に、内積を使用して、2 つの与えられたベクトル (つまり、数値のセット) の類似性を計算できます。

ベクトルを正規化する必要がある場合があります。

詳細 :コサイン類似度

于 2013-08-16T21:39:59.510 に答える
0

2 つのデータセットは順序付けられていますか?

注文した場合、インデックスは同じですか? 等間隔に?

たとえば、インデックスが共通している場合 (同じ日に測定された温度が異なる場所である場合)、最初のデータ セットを 2 番目のデータ セットに対して回帰し、勾配が 1 に等しく、切片が 0 であることをテストできます。
http://stattrek.com/AP-Statistics-4/Test-Slope.aspx?Tutorial=AP

それ以外の場合は、インデックスに対する y=values の 2 つの回帰を行うことができます。 http://en.wikipedia.org/wiki/Correlation。勾配と切片を比較する必要があります。

====

順序付けられていない場合は、累積分布関数http://en.wikipedia.org/wiki/Cumulative_distribution_functionを見たいと思います

関連するテストの 1 つに Kolmogorov-Smirnov があります: http://en.wikipedia.org/wiki/Kolmogorov-Smirnov_test

あなたも見ることができます

スチューデントの t 検定、 http://en.wikipedia.org/wiki/Student%27s_t-test

または Wilcoxon の符号付き順位検定http://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test

2 つのサンプル間の平均値が等しいかどうかをテストします。

また、Levene 検定http://www.itl.nist.gov/div898/handbook/eda/section3/eda35a.htmで等分散性を検定できます。

注: 異なるデータ セットの平均と分散が同じになる可能性があります。どの程度厳密にするか (およびデータの量) によっては、より高いモーメントの同等性をテストすることも検討できます。

于 2008-09-30T14:31:53.703 に答える