多次元カーネル密度推定の効率的な評価


9

カーネル密度の見積もりを計算するときにカーネルと帯域幅を選択する方法については、かなりの量の文献を見てきましたが、現在、任意の数のポイントで結果のKDE を評価するのにかかる時間を改善する方法に興味があります。

私の場合、私は対角共分散の多次元(2Dまたは3D)ガウスカーネルを使用しています(つまり、各次元は独立しています)。各次元の帯域幅は異なる場合があり、最近傍を使用して選択されます。ただし、私の質問はおそらく、異なるカーネルと帯域幅の選択方法に及んでいます。

のは、私が持っていると言うデータポイントとの結果としてKDEを評価したいNの格子点を。単純な実装では、多変量正規確率密度関数をM N回評価します。私の目的では、MNはどちらも数千程度であり、評価が私のコードのボトルネックになっています。MNMNMN

この基本的な方法に一般に受け入れられている改善があるかどうかは知りません。複雑さをO M N からO M + N に減らすと主張するこの論文を見つけました。ただし、このメソッドは、私が知っている「標準の」RまたはPythonライブラリには実装されていません。これは、まだ広く採用されていないことを示唆していますか?O(MN)OM+N

あなたが与えることができるすべてのポインタをありがとう。

回答:


12

他の誰かを助けるために、ここでは(不完全な)回答を提供します。

  1. KDEをより効率的に計算するための最近の数学的方法がいくつかあります。1つは、これを含むいくつかの研究で発表された高速ガウス変換です。もう1つは、ツリーベースのアプローチ(KDツリーまたはボールツリー)を使用して、特定のグリッドポイントに寄与するソースを特定することです。これが公開されているかどうかは不明ですが、Scikit-learnで実装されており、Jake Vanderplasが開発した方法に基づいています。
  2. これらのメソッドが少し手間がかかる場合は、同様のタスクを実現するもう少し基本的なものを書くことが可能です。各グリッドポイントの周囲に直方体を作成してみました。辺の長さは、各次元の帯域幅に関連しています。これはエラーを適切に制御することを許可しませんが、多少のスピードアップはできます。
  3. 最後に、KDEの計算は、複数のCPUコアまたはGPUで非常に簡単に並列化できます。CUDAでKDEを実装することを検討していますが、まだ実装していません。

ああ、私は懇願するつもりはありません...しかし、誰かがこれ賛成して新参者に課せられた制限からようやく解放できるようにこれ賛成できれば、それは非常に高く評価されます:)
Gabriel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.