python中的KDE具有不同的mu、sigma/mapping函数到数组
我有一个二维的值数组,我想对其执行高斯KDE,有一个陷阱:假设点具有不同的方差。对于这一点,我有第二个二维数组(具有相同的形状),它是用于每个点的高斯方差。在这个简单的例子中python中的KDE具有不同的mu、sigma/mapping函数到数组,python,arrays,kernel-density,Python,Arrays,Kernel Density,我有一个二维的值数组,我想对其执行高斯KDE,有一个陷阱:假设点具有不同的方差。对于这一点,我有第二个二维数组(具有相同的形状),它是用于每个点的高斯方差。在这个简单的例子中 import numpy as np data = np.array([[0.4,0.2],[0.1,0.5]]) sigma = np.array([[0.05,0.1],[0.02,0.3]]) 将有四个高斯,其中第一个以x=0.4为中心,σ=0.05。注:实际数据远大于2x2 我在寻找两件事中的一件: 高斯KDE解
import numpy as np
data = np.array([[0.4,0.2],[0.1,0.5]])
sigma = np.array([[0.05,0.1],[0.02,0.3]])
将有四个高斯,其中第一个以x=0.4为中心,σ=0.05。注:实际数据远大于2x2
我在寻找两件事中的一件:
我发现处理这个问题的最好方法是通过sigma数组和数据数组的数组乘法。然后,我为每个我想求解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)]
警告,对于任何试图使用此代码的人:高斯值沿轴0,而不是原始问题中指定的轴2。您不能逐行或其他方式切片数组吗?例如,对范围(data.shape)中的循环中的数据[i,:]”执行一维KDE?还有,你看过这个吗?行对行不起作用,因为每个单元格都有自己的方差。一个单元接一个单元可以工作,我只是不知道一个好的实现方法——我当前的实现花费的时间太长了一个数量级。至于scipy包,我目前正在尝试重写它以满足我的需要。如果没有更好的答案出现,我可能最终会这样做。
中的sigma\u数组
不应该通过除以指数而不是乘以指数来求解吗?即:return(1./sigma\u数组)*np.exp(-(val-data\u数组)*…