在Python中查找热点。 KernelDensity

时间:2016-06-10 11:24:02

标签: python optimization max minimum scikits

我遇到以下问题: 我在2D空间中有(大)不均匀分布点$(X_i,Y_i)$的样本。我想确定分布密度的局部极值。

KernelDensity函数是否允许估算样本外点的样本密度?

如果是,我找不到正确的语法?

以下是一个例子:

import numpy as np
import pandas as pd
mean0=[0,0]
cov0=[[1,0],[0,1]]
mean1=[3,3]
cov1=[[1,0.2],[0.2,1]]
A=pd.DataFrame(np.vstack((np.random.multivariate_normal(mean0, cov0, 5000),np.random.multivariate_normal(mean1, cov1, 5000))))
A.columns=['X','Y']
A.describe()

from sklearn.neighbors import KernelDensity
kde = KernelDensity(bandwidth=0.04, metric='euclidean',
                        kernel='gaussian', algorithm='ball_tree')
kde.fit(A)

如果我进行此查询

kde.score_samples([(0,0)])

我得到一个负数,显然不是密度!!

  

阵列([ - 2.88134574])

我不知道它是否是正确的方法。我想使用该函数来使用优化器来获取局部极值。 (你会推荐哪个库/功能?)

编辑:是的,这是一个对数密度,而不是密度,所以它可以是负数

0 个答案:

没有答案