Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 KDE以两点失败?_Python_Numpy_Scipy_Kernel Density - Fatal编程技术网

Python KDE以两点失败?

Python KDE以两点失败?,python,numpy,scipy,kernel-density,Python,Numpy,Scipy,Kernel Density,下面的简单示例返回一个奇异矩阵。为什么?有什么办法克服它吗 In: from scipy.stats import gaussian_kde Out: In: points Out: (array([63, 84]), array([46, 42])) In: gaussian_kde(points) Out: (array([63, 84]), array([46, 42])) LinAlgError: singular matrix 当gaussian_kde()尝试对输入数据的

下面的简单示例返回一个奇异矩阵。为什么?有什么办法克服它吗

In: from scipy.stats import gaussian_kde
Out:

In:  points
Out: (array([63, 84]), array([46, 42]))

In:  gaussian_kde(points)
Out: (array([63, 84]), array([46, 42]))

LinAlgError: singular matrix

gaussian_kde()
尝试对输入数据的协方差矩阵求逆时,会发生错误。为了使协方差矩阵非奇异,输入中的(不相同)点数必须大于等于变量数。尝试添加第三点,您应该会看到它是有效的


对这种情况的原因有一个恰当的解释。

查看回溯,您可以看到它在反转协方差矩阵时失败。这是由于您的数据准确无误。从页面上看,如果两个变量是共线的,则数据具有多重共线性,即

两个自变量之间的相关性等于1或-1

在这种情况下,两个变量只有两个样本,并且它们总是共线的(很简单,总是有一条线通过两个不同的点)。我们可以检查:

np.corrcoef(array([63,84]),array([46,42]))
[[ 1. -1.]
 [-1.  1.]]
为了不必共线,两个变量必须至少具有
n=3
样本。为了增加这个约束,您有ali_m指出的限制,即样本数
n
应该大于或等于变量数
p
。把两者结合起来,

n>=max(3,p)

在这种情况下,
p=2
n>=3
是正确的约束条件。

@flebool D'oh-不确定怎么会错过这一点!是的,当然你是对的,有
n>=p
是一个必要但不是充分的条件-如果你有多重共线性,协方差矩阵仍然可能是秩亏的。