Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 每点使用一个带宽值的核估计_Python_Scipy_Scikit Learn - Fatal编程技术网

Python 每点使用一个带宽值的核估计

Python 每点使用一个带宽值的核估计,python,scipy,scikit-learn,Python,Scipy,Scikit Learn,我熟悉常用的核密度估计(KDE),其中单个带宽值用于为每个采样点生成多变量(通常为高斯)函数。最后的KDE是通过对所有样本点的高斯函数求和得到的 假设我有N个样本点(假设为一维),每个点都有一个误差估计值,例如: sample_points = [0.5, 0.7, 0.3, 1.2, 0.01, 3.6, 0.4] errors = [0.02, 0.03, 0.05, 0.01, 0.03, 0.01, 0.07] 我所追求的是,使用与每个点相关联的错误作为其函数的带宽来获取此示例的KDE

我熟悉常用的核密度估计(KDE),其中单个带宽值用于为每个采样点生成多变量(通常为高斯)函数。最后的KDE是通过对所有样本点的高斯函数求和得到的

假设我有N个样本点(假设为一维),每个点都有一个误差估计值,例如:

sample_points = [0.5, 0.7, 0.3, 1.2, 0.01, 3.6, 0.4]
errors = [0.02, 0.03, 0.05, 0.01, 0.03, 0.01, 0.07]
我所追求的是,使用与每个点相关联的错误作为其函数的带宽来获取此示例的KDE的方法

我最终可以通过分别手动获取每个点的高斯核,然后组合所有函数来实现这一点(这不是一项简单的任务)

是否有一个已经实现的函数可以执行此操作?我环顾四周,但我发现的核密度估计器函数(,)对所有点都使用固定的带宽值。

我最近问了一个问题。目前(就我所能找到的而言)还没有这方面的实现。以下是我使用的(适合我的需要):


这是scipy高斯kde的重新实现

(我一定是一年前错过了这个答案,对不起)我对你的另一个答案发表了评论,给出了这个代码,为了完整性,我也会在这里这样做。
sigma\u数组
不应该将指数除以而不是相乘吗,即:
(1./sigma\u数组)*np.exp(-(val-data\u数组)*…
?正如在另一个答案中一样,是的;两者都已修复。感谢您捕捉到这一点。您如何在
数据数组
西格玛数组
中存储数据?我在尝试将数据馈送到
解算kde
时遇到一些错误。另外,您的代码应该适用于多维度吗?
import numpy as np

def solve_gaussian(val,data_array,sigma_array):
    return (1. / sigma_array) * np.exp(- (val - data_array) * (val - data_array) / (2 * sigma_array * sigma_array))

def solve_kde(xlist,data_array,sigma_array):
    kde_array = np.array([])
    for xx in xlist:
        single_kde = solve_gaussian(xx,data_array,sigma_array)
        if np.ndim(kde_array) == 3:
            kde_array = np.concatenate((kde_array,single_kde[np.newaxis,:,:]),axis=0)
        else:
            kde_array = np.dstack(single_kde)
    return kde_array

xlist = np.linspace(0,1,101) #Adjust as needed
kde_array = solve_kde(xlist,data_array,sigma_array)
kde_vector = np.sum(np.sum(kde_array,axis=2),axis=1)
mode_guess = xlist[np.argmax(kde_vector)]