質問

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

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

2つのセットの類似性は少し主観的であるため、アルゴリズムは実際にはちょうど良い一致と悪い一致を区別する必要があります。過去のデータがたくさんあるので、近いものではないセットを自動的に破棄し、「最高」を入れようとして、ユーザーが調べなければならない日数を絞り込みたいと思います。リストの先頭に一致します。

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

役に立ちましたか?

解決

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

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

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

他のヒント

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

財務では、ベータを使用して2つの数値シリーズの相関を測定します。例えば、ベータ版は、「昨年、S& P 500インデックスの価格が5%上がった日にIBMの価格はいくら上がりましたか?」という質問に答えることができました。移動の割合を処理するため、2つのシリーズは異なるスケールを持つことができます。

私の例では、ベータは共分散(IBM、S& P 500)/分散(S& P 500)です。

ウィキペディアには、共分散分散、およびベータ: http://en.wikipedia.org/wiki/Beta_(finance)

統計サイトをご覧ください。相関関係を探していると思います。

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

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

データの正規化から始めます。 Tempの範囲は150ユニット、Wind 120ユニット、Precip 100ユニットです。風ユニットを1.25倍、Precipyを1.5倍して、ほぼ同じ「スケール」にします。あなたの臨時雇用者としてここで空想を得て、1つの機能を他の機能よりも重要なものとして評価するルールを作成できます。この例では、風の範囲は非常に広い場合がありますが、通常はより狭い範囲にとどまるため、結果のゆがみを防ぐために風の重みを減らしたいと考えています。

ここで、各測定値を多次元空間の点として想像してください。この例では、3Dスペース(temp、wind、precip)を測定します。良い点は、より多くの機能を追加する場合、単に空間の次元を増やすだけですが、数学は同じままです。とにかく、現在のポイントに最も近い履歴ポイントを見つけたいと思います。これを行う最も簡単な方法は、ユークリッド距離です。したがって、現在のポイントから各履歴ポイントまでの距離を測定し、最も近い一致を維持します。

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-trees r-trees 。大量のデータがある場合、現在の観測値とすべての履歴観測値を比較するのは遅すぎます。木は検索を高速化します。 データクラスタリングおよび最近傍検索

乾杯。

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

真剣に。

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

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

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

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

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

これにはアプリケーションに実装されたソリューションがありますが、より良いまたはより「正しい」何かがあるかどうかを確認しています。歴史的な日ごとに次のことを行います。

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つの数値セットの平均値。

数回、あなたはデータの分布を知らないことを述べましたが、これはもちろん真実です。つまり、明日は風が華氏150度、風速が2000km / hになる可能性がありますが、それはなさそうです。

長い歴史的な記録があるので、分布について非常に良い考えを持っていると主張します。そのため、履歴分布の分位数に関してすべてを入力し、すべてのメジャーで分位数の絶対差または二乗差で何かを行うことができます。これは別の正規化方法ですが、データの非線形性を考慮したものです。

任意のスタイルで正規化すると、すべての変数が比較可能になります。

例として、1日が風が強く暑い日だとしましょう。これは、一時的分位が.75、風分位が.75になる場合があります。熱の0.76分位は1度離れ、風の分位は3kmh離れています。

経験的分布に焦点を当てるのも理解しやすく、通常の推定(平均二乗誤差など)よりも堅牢です。

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つは、コルモゴロフ-スミルノフです。 http://en.wikipedia.org/wiki/Kolmogorov-Smirnov_test

また見ることができます

生徒のt検定、 http://en.wikipedia.org/wiki/Student%27s_t-test

またはウィルコクソン署名ランクテスト http://en.wikipedia.org/wiki/ Wilcoxon_signed-rank_test

2つのサンプル間の平均の等価性をテストします。

そして、Leveneテストで分散の等価性をテストできます http://www.itl.nist.gov/div898/handbook/eda/section3/eda35a.htm

注:異なるデータのセットが同じ平均と分散を持っている可能性があります-どれだけ厳密になりたいか(そしてどのくらいのデータを持っているか)に応じて、テストすることをできますより高いモーメントの平等も同様です。

多分、あなたはあなたの数の集合をベクトルとして見ることができます(集合の各数はベクトルの構成要素です)。

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

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

その他:コサインの類似性

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top