Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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 Scipy高斯KDE:矩阵不是正定的_Python_Scipy_Kernel Density - Fatal编程技术网

Python Scipy高斯KDE:矩阵不是正定的

Python Scipy高斯KDE:矩阵不是正定的,python,scipy,kernel-density,Python,Scipy,Kernel Density,我试图使用scipy来估计数据集在某些点上的密度 from scipy.stats import gaussian_kde import numpy as np 我有一个3D点的数据集(这只是一个最小的例子。我的实际数据有更多的维度和更多的样本) 我想估算密度的点 B = np.array([[0.40209377, 0.21063273, 0.75885516], [0.91709997, 0.79303252, 0.65156937]]) 但我似乎无法使用gaussian

我试图使用scipy来估计数据集在某些点上的密度

from scipy.stats import gaussian_kde
import numpy as np
我有一个3D点的数据集(这只是一个最小的例子。我的实际数据有更多的维度和更多的样本)

我想估算密度的点

B = np.array([[0.40209377, 0.21063273, 0.75885516],
       [0.91709997, 0.79303252, 0.65156937]])

但我似乎无法使用
gaussian_kde
函数

result = gaussian_kde(A.T)(B.T)
返回

LinAlgError: Matrix is not positive definite
如何修复此错误?如何获得样本的密度?

TL;博士: 您的数据中有高度相关的特征,这会导致数值错误。有几种可能的方法来解决这个问题,每种方法都有利弊。下面建议为
gaussian_kde
减少替代类别

诊断的 您的
数据集
(即,您在创建
gaussian_kde
对象时输入的矩阵,而不是在使用它时输入的矩阵)可能包含高度依赖的特征。这一事实(可能与低数值分辨率(如
float32
和“太多”数据点)相结合)导致协方差矩阵具有接近零的特征值,由于数值误差,特征值可能会低于零。这反过来将破坏在数据集协方差矩阵上使用Cholesky分解的代码(具体细节请参见解释)

假设您的数据集具有形状
(dims,N)
,您可以通过
np.linalg.eigh(np.cov(数据集))[0]来测试这是否是您的问题
LinAlgError: Matrix is not positive definite