Java は GIS トレーニング アルゴリズムを組み合わせて最大のエントロピーを達成します

リソースのダウンロード アドレス: https://download.csdn.net/download/sheziqiong/88284338
リソースのダウンロード アドレス: https://download.csdn.net/download/sheziqiong/88284338
MaxEnt

これは最大エントロピーの簡潔な Java 実装であり、トレーニングおよび予測インターフェイスを提供します。トレーニング アルゴリズムには GIS トレーニング アルゴリズムが使用されており、サンプル トレーニング セットと天気予報のデモが付属しています。

MaxEnt のトレーニングと予測

呼び出しメソッド

public static void main(String[] args) throws IOException
{
    
    
        String path = "data/train.txt";
        MaxEnt maxEnt = new MaxEnt();
        maxEnt.loadData(path);
        maxEnt.train(200);
        List<String> fieldList = new ArrayList<String>();
        fieldList.add("Sunny"); // 假如天晴
        fieldList.add("Humid"); // 并且湿润
        Pair<String, Double>[] result = maxEnt.predict(fieldList);  // 预测出门和自宅的概率各是多少
        System.out.println(Arrays.toString(result));
}

最大エントロピーの Java 実装

アルゴリズムの詳細な説明
最大エントロピーは識別モデルに属し、すべての既知の制約を満たすことができ、未知の情報について過度の仮定を行いません。

これは最大エントロピーの簡潔な Java 実装であり、トレーニングおよび予測インターフェイスを提供します。トレーニングには GIS トレーニング アルゴリズムが使用され、サンプル トレーニング セットが付属しています。この記事は、最大エントロピーの原理、分類、実装を紹介することを目的としており、数式の導出やその他の学習アルゴリズムは含まれていませんので、お気軽にお読みください。

最大エントロピー理論

導入

最大エントロピーは識別モデルに属し、既知の制約をすべて満たすことができ、未知の情報について過度の仮定を立てません。

既知の制約とは何ですか? この記事では、難解な用語で混乱することはありません。例を次に示します。

あなたの友達は毎日「外出する」か「家にいる」、この二つの行動は「天気」「気分」「湿度」(彼女は女の子なので)に同時に影響を受け、特性と言えます。

次に、彼女の Weibo 履歴から「アクティビティ <-> 特性」の対応する例をいくつか収集しました。

1.“今天天气真好,我很开心,所以出门逛街了”
2.“太干燥了,我要睡个美容觉!”
3.“我的备胎2号又来踩我的微博主页了,气死我了!魔都的雨冷死了,干脆看美剧算了!”
4.“男神约我逛街,就算天气差,我也要去!”
5.……

これは... 緑茶ビッチ ( ̄_ ̄|||) 余談... 私たちは直感的に「良い天気」が「外出」や「良い気分」にプラスの関係があると感じます。同様のことが当てはまり、機嫌の悪さは負の相関関係にありますが、これは絶対的なものではなく、「乾いていない」場合にのみ当てはまる可能性があります。

最大エントロピーは、私たちの直観を特徴 (または特徴関数) としてデジタル化し、各特徴がどれほど重要かを計算します。制約とは、予測結果の分布が特徴の統計的確率を満たし、これらの確率が均一に分布することを意味し、最終的にはシステムのエントロピーが最大化されます。

最大エントロピーは、「天気」と「気分」が独立して分布していることを前提としていませんし、「天気」が「気分」に影響を与えることも認めていません。おそらく影響はありますが、最大エントロピーは最終結果が適合することを保証するだけです。確率の制約に。

深い数学的知識と十分な時間があれば、付録の論文と導出プロセスを読むことを選択できます。そこでは、厳密な説明と公式の導出が得られます。

分類

最大エントロピー モデルは、サンプル情報に基づく確率推定の場合、結合最大エントロピー モデルと条件付き最大エントロピー モデルの 2 つのタイプに分類できます。a がイベント、b がイベント a が発生する環境 (またはコンテキスト) であると仮定すると、a と b の同時確率は p(a, b) として記録されます。一般的に言えば、起こり得るすべてのイベントの集合が A であり、すべての環境の集合が B であると仮定すると、任意の a∈A、b∈B に対して、確率 p(a, b) を見つけるために結合最大エントロピーを確立する必要があります。 )モデル。b の条件下でイベント a が発生する確率、つまり確率 p(a | b) を計算するには、条件付き最大エントロピー モデルを確立する必要があります。

この記事で実装された最大エントロピー モデルは、条件付き最大エントロピー モデルに属します。

成し遂げる

コードは自分でダウンロードできます

トレーニングセット

上記で収集した Weibo をコンピューターで読み取り可能なデータセット data/train.txt にするとします (このオープンソース プロジェクトに既に含まれています):

Outdoor Sunny Happy
Outdoor Sunny Happy Dry
Outdoor Sunny Happy Humid
Outdoor Sunny Sad Dry
Outdoor Sunny Sad Humid
Outdoor Cloudy Happy Humid
Outdoor Cloudy Happy Humid
Outdoor Cloudy Sad Humid
Outdoor Cloudy Sad Humid
Indoor Rainy Happy Humid
Indoor Rainy Happy Dry
Indoor Rainy Sad Dry
Indoor Rainy Sad Humid
Indoor Cloudy Sad Humid
Indoor Cloudy Sad Humid

データには最大 4 つの列があり、各行の最初の列はその日のアクティビティを表し、残りの列はその日の環境を表します。

電車

実際のトレーニングの目的は、各特徴関数の重要度に対応する最適なラグランジュ乗数のセットを計算することです。

GISアルゴリズム

λi を特性関数 i のラグランジュ乗数、C を各イベントの特徴の最大数として定義し、log の分子と分母はそれぞれ経験的分布期待値とモデル推定期待値を表します。

GIS アルゴリズムは、N 回目の反復のモデルを使用して、トレーニング データ内の各フィーチャの分布を推定します。実際の値を超える場合(端数が 1 未満の場合、log は負の数になります)、対応するパラメータを小さくします(負の数を追加すると小さくなります)。それ以外の場合は、サイズを大きくしてください。トレーニングサンプルの特性分布がモデルの特性分布と同じである場合、最適なパラメータが得られます。

この式は Java では次のように記述されます。

for (int i = 0; i < maxIt; ++i)
       {
    
    
          computeModeE(modelE);
          for (int w = 0; w < weight.length; w++)
          {
    
    
           lastWeight[w] = weight[w];
           weight[w] += 1.0 / C * Math.log(empiricalE[w] / modelE[w]);
           }
          if (checkConvergence(lastWeight, weight)) break;
        }

予測する

最もエキサイティングな瞬間がついにやって来ました。あなたはバックアップ 2 として、明日彼女に映画を見に行くように頼みます。天気予報を見ると、明日は晴れて湿度が高いことがわかります。それで、彼女があなたと付き合うことに同意する確率はどれくらいでしょうか?

   String path = "data/train.txt";
        MaxEnt maxEnt = new MaxEnt();
        maxEnt.loadData(path);
        maxEnt.train(200);
        List<String> fieldList = new ArrayList<String>();
        fieldList.add("Sunny"); // 假如天晴
        fieldList.add("Humid"); // 并且湿润
        Pair<String, Double>[] result = maxEnt.predict(fieldList);  // 预测出门和自宅的概率各是多少
        System.out.println(Arrays.toString(result));

出力

[Outdoor=0.9747657631914007, Indoor=0.025234236808599233]

出る確率は97%もあるそうです。

そうですね、言い忘れていました。彼女があなたのために何かをすることに同意する確率を掛ける必要もあります。この確率はおそらく 0 に近いでしょう。なぜ?あなたはコーダーですから、はははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははははは!

「単独の犬も犬であり、愛情を示すことも犬虐待の一種です。愛する必要はありませんが、傷つけないでください。」


リソースのダウンロード アドレス: https://download.csdn.net/download/sheziqiong/88284338
リソースのダウンロード アドレス: https://download.csdn.net/download/sheziqiong/88284338

おすすめ

転載: blog.csdn.net/newlw/article/details/132625342
おすすめ