カーネル密度推定器の簡単なサンプリング方法


10

私はJavaで単純なKernel Density Estimatorを開発しました。これは、数十ポイント(おそらく100程度まで)とガウスカーネル関数に基づいています。この実装により、任意の時点での確率分布のPDFおよびCDFが得られます。

このKDEに簡単なサンプリング方法を実装したいと思います。もちろん、KDEを構成するポイントのセットから描画するのが当然の選択ですが、KDEのポイントとは少し異なるポイントを取得できるようにしたいと思います。

これまでのところ、この問題を解決するために簡単に実装できる(数値積分や複雑な計算のための外部ライブラリに依存せずに)サンプリング手法を見つけていません。何かアドバイスは?精度や効率に関しては、特に強い要件はありません。私の主な関心事は、機能し、簡単に実装できるサンプリング機能を持つことです。ありがとう!


4
これについては、このドキュメントの 5ページで詳しく説明しています。

ありがとう、それは役に立ちました!そして、私が思ったよりも簡単です;-)
Pierre Lison

@ user10525提供されたコードが間違っている、それは次のようになります。rnorm(n, sample(dx$x, n, prob = dx$y, replace = TRUE), dx$bw)どこdxから出力するdensity機能が。probそれ以外の場合は均一にサンプリングするため、引数を指定する必要があります。
Tim

回答:


17

先延ばしで述べたように、カーネル密度推定器からサンプリングする簡単な方法があります。

  1. KDEに含まれる点のセットx 1、... x nから1つの点描画しますバツバツ1バツ
  2. 取得したら、その点に関連付けられたカーネルから値を描画します。この場合、ガウスから引くNX IH を中心とX Iと分散の時間(帯域幅)バツNバツhバツh

(+1)ソリューションを共有するため。

あるのオリジナルのポイントの一つは?その場合、実際のKDEを構築する必要はまったくないようです。元のポイントの1つからサンプリングするだけで、N x ih で十分ですか?バツNバツh
Ramは

はい、確かに、サンプリングにKDE分布のみを使用している場合は、PDFを明示的に作成する必要はありません。サンプリング操作に必要な情報は、ポイントのセットと帯域幅だけです。
Pierre Lison 2013

ピエール・リソンに追加するだけです:ステップ2で:ガウスカーネルからのサンプリングの場合、帯域幅hは、分散ではなく、点x_iの周りのガウス分布の標準偏差と見なされます。

標準偏差1 / hなどを使用してサンプリングしませんか?書かれているように、xの可能性が低いほど、Nの標準偏差が低いため、近くにある可能性の低い別のポイントをサンプリングする可能性が高くなります。
クリスアンダーソン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.