24

ガンマ分布をデータ ポイントに当てはめようとしていますが、以下のコードを使用してそれを行うことができます。

import scipy.stats as ss
import numpy as np
dataPoints = np.arange(0,1000,0.2)
fit_alpha,fit_loc,fit_beta = ss.rv_continuous.fit(ss.gamma, dataPoints, floc=0)

このような小さなガンマ分布を多数使用して、より大きな分布を再構築したいと考えています (より大きな分布は質問には関係なく、pdf ではなく cdf を当てはめようとしている理由を正当化するだけです)。

それを達成するために、pdfではなく累積分布をより小さな分布データに適合させたいと考えています。—より正確には、累積分布の一部だけにデータを当てはめたい

たとえば、累積確率関数 (特定のスケールと形状) が 0.6 に達するまで、データを当てはめたいとします。

fit()この目的のために使用することについて何か考えはありますか?

4

1 に答える 1

4

分布の「ローカル」領域をキャプチャする異なるスケールと形状パラメーターを持ついくつかの小さなガンマ分布を使用して、累積分布関数を区分的に再構築しようとしていることを理解しています。

経験的分布がマルチモーダルであるか、1 つの「グローバル」パラメトリック分布で要約するのが難しい場合は、おそらく意味があります。

いくつかのガンマ分布を具体的に当てはめる背後に特定の理由があるかどうかはわかりませんが、目標が比較的滑らかで経験的 cdf を適切に捉える分布に当てはめることである場合は、おそらくカーネル密度推定を見ることができます。これは本質的に、分布をデータに適合させるノンパラメトリックな方法です。

http://scikit-learn.org/stable/modules/density.html http://en.wikipedia.org/wiki/Kernel_density_estimation

たとえば、ガウス カーネルを試して、帯域幅パラメーターを変更して、近似の滑らかさを制御できます。帯域幅が小さすぎると、滑らかでない (「オーバーフィット」) 結果が得られます [高分散、低バイアス]。帯域幅が大きすぎると、結果は非常に滑らかになりますが、偏りが大きくなります。

from sklearn.neighbors.kde import KernelDensity
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(dataPoints) 

バイアスのバランスをとる帯域幅パラメーターを選択する良い方法 - 分散のトレードオフは、相互検証を使用することです。基本的に高レベルの考え方は、データを分割し、トレーニング セットで分析を実行し、テスト セットで「検証」することです。これにより、データの過剰適合が防止されます。

幸いなことに、sklearn は、いくつかのコードを借用できる Cross Validation を使用して Guassian Kernel の最適な帯域幅を選択する良い例も実装しています。

http://scikit-learn.org/stable/auto_examples/neighbors/plot_digits_kde_sampling.html

お役に立てれば!

于 2015-04-16T23:58:32.150 に答える