多维数据的高斯核密度估计: 数组的主要子矩阵不是正定的。

3
我有两个 n 维数据子集 A 和 B,并且我想知道对于 B 中的每个样本,周围 A 样本的密度是多少。
以下是一个在 3 维中包含 5 个样本的示例数据集。
A = np.array([[-2.44528668, -0.09326276, -1.06527892],
       [-1.35144799, -1.45507518, -0.02096   ],
       [-0.5788315 , -1.48932706, -0.28496559],
       [-1.60224949, -0.76823424, -0.11548589],
       [-1.15768561, -0.74704022, -0.14744463]])

B = np.array([[-1.84134663, -1.42036525, -1.38819347],
       [-2.58165693, -2.49423057, -1.57609454],
       [-0.78776371, -0.79168188,  0.21967791],
       [-1.0165618 , -1.78509185, -0.68373997],
       [-1.21764947, -0.43215885, -0.34393573]])

我尝试做以下事情:

from scipy.stats import gaussian_kde

kernel = gaussian_kde(A)
densities = kernel(B)

但这引起了一些问题

LinAlgError: 2-th leading minor of the array is not positive definite

这个错误是什么意思?我如何从A中获取每个样本的点密度B

@PhungDuyPhong 不,我想要所有五个样本的kde,而不仅仅是第一个。 - usernumber
1个回答

3

根据我执行时得到的错误信息

kernel = gaussian_kde(A)
densities = kernel(B[0])

我想到 gaussian_kde 把每一列都视为一个样本,每一行都是第n维的坐标,所以我应该使用数组的转置。因此,为了得到我想要的结果,我应该这样做:
kernel = gaussian_kde(A.T)
densities = kernel(B.T)

但我仍然不知道我收到的错误消息是什么意思。

嗨@usernumber,我也遇到了同样的问题,你解决了这个错误信息吗?有什么办法可以解决它吗? - azeez
@azeez 当你使用转置数组时,是否会收到相同的消息? - usernumber
不使用转置数组 - azeez
@azeez 请确保您的数组中每一列都是一个样本。如果不是这种情况,请使用转置后的数组。 - usernumber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接