当我使用scipy做核密度估计时,带宽似乎对整个数据集来说是一个固定值,尽管我可以自己设置它的值。
def scotts_factor(self):
#Compute Scott's factor.
return power(self.neff, -1./(self.d+4))
self.covariance_factor = self.scotts_factor
self.factor = self.covariance_factor() #get the value of bandwidth
顺便说一下,我已经检查了sklearn中的代码来做内核密度估计,代码如下:
kde = KernelDensity(kernel='gaussian', bandwidth=0.2).fit(X)
对于数据集X,它们似乎也共享一个公共带宽。
因此,整个数据集共享一个共同的带宽值。如果我想为散点图中的每个点设置不同的带宽,我应该怎么做?
1条答案
按热度按时间z3yyvxxp1#
从我所读到的来看,你似乎根本没有在使用Scipy,但也许我错了。
SciPy提供了一个密度估计类,叫做
gaussian_kde
。你可以阅读文档here。从文档中,参数
bw_method
允许选择估算带宽的方法。您可以选择已经实现的Scott或Silverman方法,也可以提供一个可调用的方法。您可以在这里找到如何设置bw_method
参数的其他示例。