当我使用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,它们也共享一个共同的带宽。
因此,整个数据集共享一个共同的带宽值。如果我想为散点图中的每个点设置不同的带宽,我该怎么办?
从我读到的内容来看,你似乎根本没有使用SciPy,但也许我错了。
SciPy提供了一个用于密度估计的类,称为gaussian_kde
。你可以在这里阅读文档。
从文档中,参数bw_method
允许选择估计带宽的方法。您可以选择已经实现的Scott或Silverman方法,也可以提供可调用的方法。您可以在此处找到有关如何设置bw_method
参数的其他示例。