確率密度推定の概要

ツイート共有共有

最終更新日:2020年7月24日

確率密度は、観測値とその観測値の関係です。確率。

確率変数の一部の結果は確率密度が低く、他の結果は確率密度が高くなります。

確率密度の全体的な形状は確率と呼ばれます。分布、および確率変数の特定の結果の確率の計算は、確率密度関数、または略してPDFによって実行されます。

データのサンプルの確率密度関数を順番に知ることは有用です。特定の観測値が異常または異常と見なされる可能性が低いか、または可能性が低いか、およびそれを削除する必要があるかどうかを知るため。また、特定の確率分布を持つ入力データを必要とする適切な学習方法を選択するためにも役立ちます。

データのランダムサンプルの確率密度関数がわかっている可能性はほとんどありません。そのため、確率密度は、確率密度推定と呼ばれるプロセスを使用して概算する必要があります。

このチュートリアルでは、確率密度推定の簡単な概要を説明します。

これを完了した後チュートリアルでは、次のことがわかります。

  • ヒストグラムプロットは、データサンプルの確率密度を視覚化するための高速で信頼性の高い方法を提供します。
  • パラメトリック確率密度推定には、共通の分布の選択が含まれます。データサンプルから密度関数のパラメータを推定します。
  • 非パラメトリック確率密度推定では、カーネル密度推定など、モデルをデータの任意の分布に適合させる手法を使用します。

ステップバイステップのチュートリアルとすべての例のPythonソースコードファイルを含む、私の新しい本「機械学習の確率」でプロジェクトを開始します。

始めましょう。

穏やかな紹介n確率密度推定
写真提供:Alistair Paterson、一部の権利は留保されています。

チュートリアルの概要

このチュートリアルは4つのパートに分かれています。それらは次のとおりです。

  1. 確率密度
  2. ヒストグラムで密度を要約する
  3. パラメトリック密度推定
  4. ノンパラメトリック密度推定

確率密度

ランダム変数xには確率分布p(x)があります。

ランダム変数の結果とその確率の関係は次のとおりです。確率密度、または単に「密度」と呼ばれます。

ランダム変数が連続している場合、確率は確率密度関数、または略してPDFを介して計算できます。確率密度の形状ランダム変数のドメイン全体の関数は確率分布と呼ばれ、一般的な確率分布には、均一、正規、指数などの名前があります。

ランダム変数を考えると、次のことに関心があります。その確率の密度。

たとえば、変数のランダムなサンプルが与えられた場合、確率分布の形状などを知りたい場合があります。しかし、最も可能性の高い値、値の広がり、およびその他のプロパティ。

確率変数の確率分布を知ることは、平均や分散などの分布のモーメントを計算するのに役立ちますが、観測が可能性が低いか非常に可能性が低く、外れ値または異常である可能性があるかどうかを判断するなど、他のより一般的な考慮事項に役立ちます。

問題は、確率変数の確率分布がわからない可能性があることです。確率変数のすべての可能な結果にアクセスできるわけではないため、分布を知ることはめったにありません。実際、私たちがアクセスできるのは観測のサンプルだけです。そのため、確率分布を選択する必要があります。

この問題は、確率密度推定、または単に「密度推定」と呼ばれます。これは、ランダムサンプルの観測値を使用しての一般的な密度を推定するためです。利用可能なデータのサンプルだけではない確率。

確率変数の密度推定のプロセスにはいくつかのステップがあります。

最初のステップは、単純なヒストグラムを使用した確率サンプルの観測値。ヒストグラムから、正規分布など、使用できる一般的でよく理解されている確率分布を特定できる場合があります。そうでない場合は、モデルをに適合させる必要があります。分布を推定します。

次のセクションでは、これらの各ステップを順番に詳しく見ていきます。

単変量データ、たとえば1つの確率変数に焦点を当てます。簡単にするために、この投稿では、手順は多変量データに適用できますが、より困難になる可能性があります変数の数が増えるにつれてng。

機械学習の確率を学びたい

今すぐ無料の7日間のメールクラッシュコースを受講してください(サンプルコード付き)。

クリックしてサインアップすると、コースの無料のPDF電子ブックバージョンも入手できます。

無料のミニコースをダウンロード

ヒストグラムで密度を要約する

密度推定の最初のステップは、ランダムサンプルの観測値のヒストグラムを作成することです。

ヒストグラムは、最初に観測値をビンにグループ化し、各ビンに分類されるイベントの数をカウントすることを含むプロットです。次に、各ビンのカウントまたは観測の頻度が棒グラフとしてプロットされ、ビンがx軸に、頻度がy軸になります。

ビンの数の選択は次のとおりです。分布の粗さ(棒の数)を制御し、次に、観測値の密度がどれだけ適切にプロットされるかを制御するため、重要です。特定のデータサンプルに対してさまざまなビンサイズを試して、同じデータに対して複数のパースペクティブまたはビューを取得することをお勧めします。

ヒストグラムは、Matplotlibライブラリとhist()関数を使用して作成できます。データは最初の引数として提供され、ビンの数は「bins」引数を介して整数(例:10)または各ビンの境界のシーケンス(例)として指定されます。

以下のスニペットは、データサンプルの10個のビンを含むヒストグラムを作成します。

1
2
3
4

#サンプルのヒストグラムをプロット
pyplot.hist(sample、 bins = 10)
pyplot.show()

正規分布から抽出されたランダムサンプルを作成できます。分布がわからない場合は、データのヒストグラムを作成してください。 normal()NumPy関数はこれを実現し、平均が0、標準偏差が1の1,000個のサンプルを生成します。標準のガウス。

完全な例を以下に示します。

1
2
3
4
5
6
7
8

#ランダムサンプルのヒストグラムをプロットする例
from matplotlib import pyplot
from numpy.random import normal
#サンプルを生成する
sample = normal(size = 1000)
#サンプルのヒストグラムをプロット
pyplot.hist(sample、bins = 10)
pyplot.show()

例では、ランダムな観測値のサンプルを描画し、10個のビンでヒストグラムを作成します。正規分布の形状をはっきりと見ることができます。

データサンプルのランダムな性質により、結果が異なることに注意してください。例を数回実行してみてください。

ランダムデータサンプルの10個のビンを使用したヒストグラムプロット

ビンを3に設定して例を実行すると、正規分布がわかりにくくなります。

ランダムデータサンプルの3つのビンを使用したヒストグラムプロット

ビンの数が異なる範囲のデータサンプルのヒストグラムを確認すると、密度が見えるかどうかを識別できます。一般的な確率分布のようかどうか。

ほとんどの場合、正規分布のよく知られたベルの形、ユニフォームの平らな形、またはの下降または上昇の形など、単峰性の分布が表示されます。指数分布またはパレート分布。

また、バイモーダル分布と呼ばれる、ビンの数が異なっても消えない複数のピークや、と呼ばれる複数のピークなどの複雑な分布が表示される場合があります。マルチモーダル分布。また、特定の値の密度に大きなスパイクが見られる場合や、外れ値を示す値の範囲が狭い場合があります。これは、密度の残りの部分から遠く離れた分布の裾で発生することがよくあります。

パラメトリック密度推定

ほとんどのランダムサンプルのヒストグラムの形状は、よく知られている確率分布と一致します。

一般的な分布は、さまざまな、場合によっては予期しないドメインで何度も発生するため、一般的です。

一般的な確率分布をよく理解してください。これは、から特定の分布を特定するのに役立ちます。ヒストグラム。

識別されたら、選択した確率分布を使用して確率変数の密度を推定することができます。これは、データのランダムサンプルから分布のパラメーターを推定することで実現できます。

たとえば、正規分布には、平均と標準偏差の2つのパラメーターがあります。これらの2つのパラメーターが与えられると、確率分布関数がわかります。これらのパラメータは、サンプルの平均とサンプルの標準偏差を計算することでデータから推定できます。

このプロセスをパラメトリック密度推定と呼びます。

その理由は、事前定義された関数を使用しているためです。観測値と、パラメータで制御または構成できる確率、つまり「パラメトリック」との関係を要約します。

密度を推定したら、それが適切かどうかを確認できます。これは、次のようなさまざまな方法で実行できます。

  • 密度関数をプロットし、形状をヒストグラムと比較します。
  • 密度関数をサンプリングし、生成されたサンプルを実際のサンプル。
  • 統計テストを使用して、データが分布に適合していることを確認します。

例を使用してこれを示すことができます。

平均50、標準偏差5の正規分布から1,000個の観測値のランダムサンプルを生成できます。

1
2
3

#サンプルを生成
サンプル=通常(loc = 50、scale = 5、size = 1000)

次に、確率分布がわからないふりをして、ヒストグラムを見て、それが正常であると推測することができます。正常であると仮定すると、分布のパラメーター、具体的には平均と標準偏差を計算できます。

サンプルサイズが小さい場合、平均と標準偏差が50と5になるとは期待できません。

次に、分布をこれらのパラメーターに適合させます。これは、データサンプルのいわゆるパラメトリック密度推定です。

この場合、norm( )SciPy関数。

1
2
3

#分布を定義する
dist = norm(sample_mean、sam ple_std)

次に、この分布から確率をサンプリングできますドメイン内の値の範囲(この場合は30〜70)について。

最後に、データサンプルのヒストグラムをプロットし、からの値の範囲に対して計算された確率のラインプロットをオーバーレイできます。 PDF。

重要なのは、ヒストグラムの各ビンのカウントまたは頻度を正規化された確率に変換して、ヒストグラムのy軸がラインプロットのy軸と一致するようにすることです。これは、hist()の呼び出しで「density」引数を「True」に設定することで実現できます。

1
2
3
4

#ヒストグラムとpdfをプロット
pyplot.hist(sample、bins = 10、density = True)
pyplot.plot(values、probabilities)

これらのスニペットを結合して、パラメトリック密度推定の完全な例を以下に示します。

例を実行すると、最初にデータサンプルが生成されます。 、次に正規確率のパラメーターを推定します配布。

データサンプルのランダムな性質により、結果が異なることに注意してください。例を数回実行してみてください。

この場合、平均と標準偏差にノイズがあり、それぞれ期待値の50と5とわずかに異なることがわかります。ノイズは軽微であり、分布は依然として適切であると予想されます。

1

平均= 49.852 、標準偏差= 5.023

次に、PDFを適合させます推定されたパラメーターと10個のビンを持つデータのヒストグラムを使用して、PDFからサンプリングされた値の範囲の確率と比較されます。

PDFがデータによく一致していることがわかります。

正規分布の確率密度関数オーバーレイを使用したデータサンプルヒストグラム

データが一般的な確率分布と一致する可能性がありますが、パラメトリック密度推定の前に変換が必要です。

たとえば、外れ値の値が分布の平均または重心。これは、分布パラメーターの誤った推定値を与える効果があり、その結果、データへの適合性が低下する可能性があります。これらの外れ値は、分布パラメーターを推定する前に削除する必要があります。

別の例として、データにスキューがあるか、左または右にシフトしている可能性があります。この場合、対数や平方根をとるなど、パラメーターを推定する前にデータを変換する必要がある場合があります。より一般的には、Box-Cox変換などの累乗変換を使用します。

これらのタイプデータへの変更が明確でない場合があり、効果的なパラメトリック密度推定には、次の反復プロセスが必要になる場合があります。

  • データへの分布の適合が十分になるまでループする:
    • 1。分布パラメータの推定
    • 2。結果のPDFをデータと照合する
    • 3。分布によりよく適合するようにデータを変換する

ノンパラメトリック密度推定

場合によっては、データサンプルが一般的な確率に似ていないことがあります

これは、データに2つのピーク(バイモーダル分布)または多数のピーク(マルチモーダル分布)がある場合によくあります。

この場合場合、パラメトリック密度推定は実行不可能であり、一般的な分布を使用しない代替方法を使用できます。代わりに、アルゴリズムを使用して、事前定義された分布なしでデータの確率分布を概算します。これは、ノンパラメトリック手法と呼ばれます。

分布にはパラメーターがありますが、同じ方法で直接制御することはできません。単純な確率分布として。たとえば、ノンパラメトリック法では、ランダムサンプルのすべての観測値を使用して密度を推定し、実際にはサンプルの「パラメータ」のすべての観測値を作成します。

おそらく、の確率密度関数を推定するための最も一般的なノンパラメトリックアプローチです。連続確率変数は、カーネルスムージングまたはカーネル密度推定、略してKDEと呼ばれます。

  • カーネル密度推定:データセットを使用して新しいポイントの確率を推定するためのノンパラメトリック法。

この場合、カーネルは、確率変数の特定の値の確率を返す数学関数です。カーネルは、確率変数の結果の範囲全体で確率を効果的に平滑化または補間し、確率の1は、正常に動作する確率の要件である1に等しくなります。

カーネル関数は、データサンプルからの観測値の寄与を、それらの関係または距離に基づいて重み付けします。確率が要求されます。

平滑化パラメーターまたは帯域幅と呼ばれるパラメーターは、特定のサンプルの確率の推定に寄与するデータサンプルからの観測の範囲またはウィンドウを制御します。そのため、カーネル密度推定は、メソッドの開発者にちなんで、Parzen-Rosenblattウィンドウまたは単にParzenウィンドウと呼ばれることがあります。

  • 平滑化パラメーター(帯域幅):パラメーターを制御します。新しいポイントの確率を推定するために使用されるサンプルの数またはサンプルのウィンドウ。

ウィンドウが大きいと密度が粗くなり、詳細がほとんどなくなる可能性がありますが、ウィンドウが小さいと詳細が多すぎる可能性があります。また、新しい例や目に見えない例を正しくカバーするのに十分なほどスムーズまたは一般的ではありません。ウィンドウ内のサンプルの寄与は、基底関数と呼ばれることもあるさまざまな関数を使用して形成できます。結果の密度関数の滑らかさにさまざまな影響を与える均一な正規分布など。

  • 基底関数(カーネル):データセット内のサンプルの推定への寄与を制御するために使用される選択された関数新しいポイントの確率。

そのため、さまざまなウィンドウサイズとさまざまな寄与関数を試して、データのヒストグラムに対して結果を評価すると便利な場合があります。

これを例で示すことができます。

最初に、2つの異なる正規分布からのサンプルを組み合わせることによってバイモーダル分布を構築できます。具体的には、平均が20で標準偏差が5(小さいピーク)の300の例と、平均が40で標準偏差が5(大きいピーク)の700の例です。結合されたサンプルで分布が重複するように、平均を互いに近づけて選択しました。

バイモーダル確率分布を使用してこのサンプルを作成し、ヒストグラムをプロットする完全な例を以下に示します。

例を実行すると、データサンプルが作成され、ヒストグラムがプロットされます。

データサンプルのランダムな性質により、結果が異なることに注意してください。例を数回実行してみてください。

平均が40のサンプルよりも、平均が20のサンプルの数が少ないため、ヒストグラムに反映されているのは、約40のサンプルの密度が周囲よりも大きいことです。 20.

この分布のデータは、設計上、一般的な確率分布にうまく適合しません。ノンパラメトリックカーネル密度推定法を使用するのに適しています。

データサンプルのヒストグラムプロットバイモーダル確率分布を使用

scikit-learn機械学習ライブラリは、カーネル密度推定を実装するKernelDensityクラスを提供します。

最初に、クラスは目的の帯域幅で構築されます(ウィンドウサイズ)およびカーネル(基本関数)引数。データのさまざまな構成をテストすることをお勧めします。この場合、2の帯域幅とガウスカーネルを試します。

次に、fit()関数を介してクラスをデータサンプルに適合させます。この関数は、データがフォームの2D形状であることを想定しているため、データサンプルを1,000行1列に再形成できます。

1
2
3
4
5

#フィット密度
model = KernelDensity(bandwidth = 2、kernel = “gaussian”)
sample = sample.reshape((len(sample)、1))
model.fit(sample)

次に、ある範囲のobsの確率を計算することにより、密度推定がデータとどの程度一致しているかを評価できます。前のセクションのパラメトリックの場合と同じように、エルベーションと形状のヒストグラムの比較。

KernelDensityのscore_samples()関数は、サンプルの配列の対数確率を計算します。ドメインの範囲について、1〜60の範囲のサンプルを作成し、対数確率を計算してから、指数またはexp()を計算して対数演算を反転し、通常の確率の値を0-1の範囲に戻すことができます。 。

最後に、正規化された頻度と推定確率に対する値のオーバーレイラインプロットを使用してヒストグラムを作成できます。

1
2
3
4
5

#ヒストグラムとpdfをプロット
pyplot.hist(sample、bins = 50、density = True)
pyplot.plot(values、確率)
pyplot.show()

これをまとめると、バイモーダルデータサンプルのカーネル密度推定の完全な例を以下に示します。

この例を実行すると、データ分布が作成され、カーネル密度推定モデルに適合して、のヒストグラムがプロットされます。 KDEモデルからのデータサンプルとPDF。

データサンプルのランダムな性質により、結果が異なることに注意してください。例を数回実行してみてください。

この場合、PDFがヒストグラムに適していることがわかります。これはあまりスムーズではなく、「bandwidth」引数を3サンプル以上に設定することでさらにスムーズにすることができます。帯域幅とカーネル関数のさまざまな値を試してください。

バイモーダルデータサンプルのカーネル密度推定によって推定されたヒストグラムと確率密度関数のプロット

KernelDensityクラスは強力で、多次元データのPDFの推定をサポートします。

さらに読む

このセクションでは、さらに深く掘り下げたい場合に、このトピックに関するより多くのリソースを提供します。

書籍

  • パターン認識と機械学習、2006年。
  • 機械学習:確率論的展望、2012年。
  • 統計学習の要素:データマイニング、推論、およびPrediction、2009年。

API

  • scipy.stats.gaussian_kdeAPI。
  • ノンパラメトリックメソッドノンパラメトリック、StatsmodelsAPI。
  • カーネル密度推定統計モデルExa mple。
  • 密度推定、Scikit-LearnAPI。

記事

  • 密度推定、ウィキペディア。
  • ヒストグラム、ウィキペディア。
  • カーネル密度推定、ウィキペディア。
  • 多変量カーネル密度推定、ウィキペディア。
  • Parzen-Rosenblattウィンドウ法によるカーネル密度推定、 2014.
  • 詳細:カーネル密度推定。

要約

このチュートリアルでは、確率密度推定の穏やかな紹介を発見しました。

具体的には、次のことを学びました。

  • ヒストグラムプロットは、データサンプルの確率密度を視覚化するための高速で信頼性の高い方法を提供します。
  • パラメトリック確率密度推定には、共通の分布を選択し、データサンプルから密度関数のパラメーターを推定することが含まれます。
  • 非パラメトリック確率密度推定には、カーネル密度推定など、モデルをデータの任意の分布に適合させる手法を使用することが含まれます。

ご不明な点がありますか?
以下のコメントで質問してください。できる限りお答えします。

機械学習の確率を把握しましょう!

確率の理解を深める

…ほんの数行のPythonコードで

新しい電子ブックでその方法を発見してください:
機械学習の確率

それは自習を提供しますチュートリアルとエンドツーエンドプロジェクト:
ベイズの定理、ベイズ最適化、分布、最尤法、クロスエントロピー、モデルのキャリブレーション
など…

最後に不確実性を利用するあなたのプロジェクト

アカデミックをスキップします。結果だけです。中身を見る

ツイート共有共有

Leave a Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です