2
私はPythonには新しく、2Dサンプルから密度を推定する必要があります。私の最初のアイデアは、私は以下のように実装され、単純なヒストグラム推定器、だった:Pythonの密度推定
はnum = 10**4
sp = 0.01
subsetf1 = np.random.uniform(0,1,size=(num,2)) # I created this set to test the estimator
def f_est(x,y,h=sp, subset=subsetf1):
indicator = np.zeros(num)
for i in range(num):
if (x <= subset[i][0] <= (x + h)) and (y <= subset[i][1] <= (y + h)):
indicator[i] = 1
else : indicator[i] = 0
return sum(indicator)/(num*h**2)
#f_est should yield values closely to 1 if 0 <x,y <1 , because subsetf1 contains uniformly distributed values on [0,1).
問題はf_est
は、多くの場合、私のコードが間違っていると信じて私をリード1以上の値が得られていることですが、私は知りませんバグはどこにあるのでしょうか?私はカーネル密度の推定も試みましたが、次のようなものを試してみました。
from scipy import stats
xmin = partsetf1[0].min()
xmax = partsetf1[0].max()
ymin = partsetf1[1].min()
ymax = partsetf1[1].max()
X, Y = np.mgrid[xmin:xmax:100j, ymin:ymax:100j]
positions = np.vstack([X.ravel(), Y.ravel()])
values = np.vstack([partsetf1[0], partsetf1[1]])
gkde=stats.gaussian_kde(values)
f = np.reshape(gkde(positions).T, X.shape)
fは奇妙な値を生成できません。 誰かが私のコード内のバグがどこにあるのか、またPythonでkdeを使う方法を教えてもらえれば幸いです。なぜなら私はこの話題に関して良いチュートリアルを見つけられなかったからです。彼らは確率のではなく、確率密度を返すされていないため、
あなたの結果をscipyの密度推定のような組み込み関数と比較しましたか? https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html または、私は、あなたの結果を何かと比較して何を求めているのでしょうか? – Jon
こんにちは@Jon。私もscipyの密度推定を試したので、コードは私のポストにもあります。問題はscipysの密度の推定は全く間違った結果をもたらし、なぜわからないのですか – murph
申し訳ありませんが、私はそれを見ませんでした。 Scipyの代わりに、統計モデルがあります。試しましたか?http://statsmodels.sourceforge.net/notebooks/generated/statsmodels.nonparametric.kde.KDEUnivariate.html?highlight=kde#statsmodels.nonparametric.kde.KDEUnivariate – Jon